白话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版)》是一个系列。等全部串联起来,之前很多让人望而却步的生产问题,会有了大致的排查方向吧~

相关文章
|
4月前
|
Ubuntu 物联网 Linux
从零安装一个Linux操作系统几种方法,以Ubuntu18.04为例
一切就绪后,我们就可以安装操作系统了。当系统通过优盘引导起来之后,我们就可以看到跟虚拟机中一样的安装向导了。之后,大家按照虚拟机中的顺序安装即可。 好了,今天主要介绍了Ubuntu Server版操作系统的安装过程,关于如何使用该操作系统,及操作系统更深层的原理,还请关注本号及相关圈子。
|
4月前
|
监控 Ubuntu Linux
什么Linux,Linux内核及Linux操作系统
上面只是简单的介绍了一下Linux操作系统的几个核心组件,其实Linux的整体架构要复杂的多。单纯从Linux内核的角度,它要管理CPU、内存、网卡、硬盘和输入输出等设备,因此内核本身分为进程调度,内存管理,虚拟文件系统,网络接口等4个核心子系统。
313 0
|
4月前
|
Unix 物联网 Linux
都什么年代了,你还不懂啥是Linux操作系统
至于华为鸿蒙操作系统是不是独树一帜,这个留给各位阅读本文的网友们来讨论
115 0
|
4月前
|
安全 Linux iOS开发
linux属于什么操作系统
Linux是一种自由和开放源代码的操作系统,具有高度的灵活性和可定制性。与常见的操作系统如Windows和macOS相比,Linux具有自由、安全和稳定等优势。Linux已广泛应用于服务器、桌面电脑、超级计算机和嵌入式设备等领域,并且在未来的发展前景广阔。由于其自由和开放源代码的特性,Linux还促进了计算机技术和社区的发展,为全球的计算机用户提供了更多的选择和可能性。
|
4月前
|
安全 Ubuntu Unix
关于Linux操作系统,你必须要知道的事
我们可以看到无论是Debian还是Buildroot都有各自的特点,为客户提供了更大的选择空间和灵活性,大家可以根据自己的需求选择合适的版本来满足终端用户的体验和功能需求。从平技术将会一直关注更多更安全、灵敏、易于开发的Linux版本,做好适配工作,不断为客户带来“简单开发、方便应用”的使用体验。
|
4月前
|
安全 Ubuntu Linux
如何安装Linux操作系统?
此时,您可以选择重新启动计算机,然后从硬盘上的Linux系统启动。以上是一个大致的安装过程。请注意,不同的Linux发行版可能会在细节上有所差异,因此在进行安装之前,请确保您阅读并理解了相应发行版的安装指南或文档。
|
4月前
|
Ubuntu Linux 开发者
Linux发行版比较:选择适合你的操作系统
在做出选择之前,建议您先在虚拟机或双系统环境中尝试不同的发行版,根据自己的体验和需求做出决策。选择适合自己的Linux发行版是一个个人化和主观的过程,最重要的是找到符合自己需求和喜好的发行版,让您在使用Linux系统时感到舒适和方便。
|
4月前
|
Ubuntu Unix Linux
玩机强化技能,动手安装Ubuntu Linux操作系统
(13)Ubuntu重启过程中,你将在关机画面中看到提示文字“Please remove the installation medium, then press ENTER:”,按下“Enter”键即可重启电脑。
|
4月前
|
Web App开发 Ubuntu Linux
Linux之Ubuntu操作系统安装
1、在Ubuntu系统下,可以使用自带的U盘启动制作软件制作启动盘。使用方法和rufus类似。 2、或者用dd命令制作启动盘,关于dd命令的使用方法可以百度查看。经过亲自实践,archlinux系统和红旗9.0系统的启动U盘就是用dd命令制作成功。
|
4月前
|
Ubuntu Linux Android开发
Ubuntu——一款备受瞩目的Linux操作系统
目前,要在Ubuntu上使用Windows下常用的工具,一个理想的解决方案是采用Deepin-wine。Deepin-wine是Windows模拟环境,允许用户在Ubuntu上轻松运行许多Windows软件。安装Deepin-wine后,您将能够使用以下列出的众多软件:

热门文章

最新文章