白话linux操作系统原理

简介: 白话linux操作系统原理

虽然计算机相关专业,操作系统和计算机组成原理是必修课。但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化。还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解也不深。所以今天我站在真正排查解决问题时的需要层面,用白话说一说linux操作系统的那些知识。

 

本文整体采用的是类似递归调用的递进式结构。

 

linux内核的本质


1112728-20220120123916483-1206464137.png


简单来说如上图所示,咱们平时的应用程序或者linux命令要和操作系统打交道,都要经过一个叫做linux内核的软件。所有的硬件操作都需要通过他。就像古代女子出嫁,都要有媒人。

 

虽然现在都是婚姻自由,没有父母之命媒妁之言那一套。其实在古代,媒人对于整个古代历史上的婚姻而言,起到的正向的作用。现在社会欺骗的婚姻也不少。而古代媒人都要是对两家熟悉,或者做过背调,掌握了情况的人。多数都是门当户对,除了个别婚前就心有所属的,大多数还是过得很幸福的。毕竟多数人的标准都差不多:好看就行。我觉得自己老公长得就挺好看,只是出去打听了一下,95%的人不这么认为

 

本文不是为封装制度正名。想表达的是:媒人最初是一种保护机制。而linux之父林纳斯最初设计linux内核也是设计成一种保护机制。


1112728-20220120123938103-2007984340.png


为什么说linux内核是一种保护机制呢,这要从冯·诺依曼体系结构说起。

 

冯·诺依曼体系结构


1112728-20220120123959957-1365323879.png


冯·诺依曼体系结构的要点是:


计算机的数制采用二进制。计算机应该按照程序顺序执行。它采用存储程序方式,指令和数据不加区别,混合存储在同一个存储器中。数据和程序在内存中是没有区别的,它们都是内存中的数据。当EIP指针指向哪,CPU就加载哪段内存中的数据。如果是不正确的指令格式,CPU就会发生错误中断。

 

这里提到计算机是在顺序的执行指令,但是咱们明明可以一边听歌一边敲代码。这个除了在目前多CPU架构下可以实现,之前单CPU下也可以实现。因为有时钟分片。如果没有插入优先级高的任务,cpu会在均匀的执行多项任务分片。因为CPU执行速度快,人可能完全感觉不到实际上是断续执行的。

 

不过我记得上大学的时候,03年我买了一台笔记本用来打魔兽。当时可是用的市面上的顶配呢。有时候还是会一卡一卡的。可以切身感受到时钟分片。

 

如果出现错误,可以通过中断来处理。中断也需要等待时钟分片。好在linux内核的分片十分合理,让中断可以及时响应。


1112728-20220120124018013-1621031855.png


在现代CPU的保护模式中,每个内存段都有其描述符。这个描述符记录着这个内存段的访问权限。在《接下来一段时间会对大家进行网络通信的魔鬼训练-理解socket》里我就提到过文件描述符。这里稍详细的解释下。

 

文件描述符

 


linux系统中,一切皆文件。文件描述符是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。

 

文件描述符、文件、进程间的关系

 


1.描述:


  • 每个文件描述符会与一个打开的文件相对应


  • 不同的文件描述符也可能指向同一个文件


  • 相同的文件可以被不同的进程打开,也可以在同一个进程被多次打开

2.系统为维护文件描述符,建立了三个表


  • 进程级的文件描述符表


  • 系统级的文件描述符表


  • 文件系统的i-node表


1112728-20220120124038909-643505077.png


3.通过这三个表,认识文件描述符


1112728-20220120124056397-952458469.png


  • 在进程A中,文件描述符1和30都指向了同一个打开的文件句柄(#23),这可能是该进程多次对执行打开操作


  • 进程A中的文件描述符2和进程B的文件描述符2都指向了同一个打开的文件句柄(#73),这种情况有几种可能,1.进程A和进程B可能是父子进程关系;2.进程A和进程B打开了同一个文件,且文件描述符相同(低概率事件=_=);3.A、B中某个进程通过UNIX域套接字将一个打开的文件描述符传递给另一个进程。


  • 进程A的描述符0和进程B的描述符3分别指向不同的打开文件句柄,但这些句柄均指向i-node表的相同条目(#1936),换言之,指向同一个文件。发生这种情况是因为每个进程各自对同一个文件发起了打开请求。同一个进程两次打开同一个文件,也会发生类似情况。


文件描述符限制


有资源的地方就有战争,文件描述符也是一种资源,系统中的每个进程都需要有文件描述符才能进行改变世界的宏图霸业。世界需要秩序,于是就有了“文件描述符限制”的规定。


如下表:


1112728-20220120124111742-149118602.png


查看文件描述符限制也可以使用linux命令。


  • 找到需要检查的进程id


  • 查看该进程的资源,比如fd 是描述符,limits是限制。


  • 查看该进程的限制,如图,在 Max open files 那一行,可以看到当前设置中soft最大文件描述符的数量为1024。


1112728-20220120124131043-1654435394.png


在《提供一个排查性能问题的思路》里,我就提到过解决过too many open files问题。咱们今天来实际理解一下。执行下面命令:


1112728-20220120124148575-1941404129.png


这就是一个进程实际占用的文件描述符和文件描述符数。超过系统设定值就会发生too many open files异常。这里大家应该可以切实理解一个文件描述符就是一个文件,文件描述符占用超限就是too many open files啦。

 

特殊的文件描述符

 

有三个特殊的文件描述符,分别是0、1、2,对应每个进程的标准输入、标准输出和错误输出。每个进程启动时,操作系统就会给它分配这三个标准的文件描述符。咱们平时用的console控制台就是通过读写这三个文件来实现滴。

 

linux基础里有介绍怎么重定向,下面一条命令可以将标准输出1和错误输出2重定向到一个文件:


1112728-20220120124206073-1973903088.png


总结


linux的内存分段、中断机制和文件描述符限制都是内核的保护机制。当然这并不全面,还有其他机制。

 

本篇内容和《网络通信之Session的历史血脉》《深入理解MQ生产端的底层通信过程-理解channel》《接下来一段时间会对大家进行网络通信的魔鬼训练-理解socket》《网络字节序列-大端序和小端序》《https引起的跨域问题-COE&casestudy》《懂得三境界-使用dubbo时请求超过问题》《一个http请求进来都经过了什么(2021版)》是一个系列。等全部串联起来,之前很多让人望而却步的生产问题,会有了大致的排查方向吧~

目录
打赏
0
0
0
0
2
分享
相关文章
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
在计算机系统的底层架构中,操作系统肩负着资源管理与任务调度的重任。当我们启动各类应用程序时,其背后复杂的运作机制便悄然展开。程序,作为静态的指令集合,如何在系统中实现动态执行?本文带你一探究竟!
【Linux进程概念】—— 操作系统中的“生命体”,计算机里的“多线程”
Linux 操作系统
在 Linux 中,UID(用户 ID)是标识用户身份的重要概念。UID 唯一标识每个用户,通过 UID 可区分不同用户类别:UID 0 为超级用户,1-999 为系统用户,1000 及以上为普通用户。因此,正确选项为:UID 标识用户、可区分用户类别、普通用户 UID 大于 1000。
深入理解Linux操作系统的进程管理
本文旨在探讨Linux操作系统中的进程管理机制,包括进程的创建、执行、调度和终止等环节。通过对Linux内核中相关模块的分析,揭示其高效的进程管理策略,为开发者提供优化程序性能和资源利用率的参考。
127 1
|
12天前
|
Linux 操作系统的诞生与发展历程
步探索与准备: 1991年初,林纳斯·托瓦兹开始在一台386sx兼容微机上学习minix操作系统。通过学习,他逐渐不能满足于minix系统的现有性能,并开始酝酿开发一个新的免费操作系统。
38 8
Linux 操作系统的诞生与发展历程
Linux系统查看操作系统版本信息、CPU信息、模块信息
在Linux系统中,常用命令可帮助用户查看操作系统版本、CPU信息和模块信息
136 23
深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
本文将详细介绍阿里云的Alibaba Cloud Linux操作系统控制台的功能和优势。
92 6
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
深入Linux操作系统:文件系统和权限管理
在数字世界的海洋中,操作系统是连接用户与硬件的桥梁,而Linux作为其中的佼佼者,其文件系统和权限管理则是这座桥梁上不可或缺的结构。本文将带你探索Linux的文件系统结构,理解文件权限的重要性,并通过实际案例揭示如何有效地管理和控制这些权限。我们将一起航行在Linux的命令行海洋中,解锁文件系统的奥秘,并学习如何保护你的数据免受不必要的访问。
Linux操作系统的内核优化与性能调优####
本文深入探讨了Linux操作系统内核的优化策略与性能调优方法,旨在为系统管理员和高级用户提供一套实用的指南。通过分析内核参数调整、文件系统选择、内存管理及网络配置等关键方面,本文揭示了如何有效提升Linux系统的稳定性和运行效率。不同于常规摘要仅概述内容的做法,本摘要直接指出文章的核心价值——提供具体可行的优化措施,助力读者实现系统性能的飞跃。 ####
Linux操作系统的内核优化与实践####
本文旨在探讨Linux操作系统内核的优化策略与实际应用案例,深入分析内核参数调优、编译选项配置及实时性能监控的方法。通过具体实例讲解如何根据不同应用场景调整内核设置,以提升系统性能和稳定性,为系统管理员和技术爱好者提供实用的优化指南。 ####

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等