白话linux操作系统原理

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

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

linux内核的本质

白话linux操作系统原理

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

白话linux操作系统原理

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

白话linux操作系统原理

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

冯·诺依曼体系结构

白话linux操作系统原理

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

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

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

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

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

白话linux操作系统原理

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

文件描述符

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

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

1.描述:

  • 每个文件描述符会与一个打开的文件相对应
  • 不同的文件描述符也可能指向同一个文件
  • 同一文件可由不同进程打开,也可在同一进程中多次打开
    [En]

    the same file can be opened by different processes or multiple times in the same process*

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

  • 进程级的文件描述符表
  • 系统级的文件描述符表
  • 文件系统的i-node表

白话linux操作系统原理

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

白话linux操作系统原理
  • 在进程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),换言之,指向同一个文件。发生这种情况是因为每个进程各自对同一个文件发起了打开请求。同一个进程两次打开同一个文件,也会发生类似情况。

文件描述符限制

哪里有资源,哪里就有战争,文件描述符也是一种资源。为了改变世界,系统中的每个进程都需要一个文件描述符。世界需要秩序,所以有一个“文档描述符限制”规则。

[En]

Where there are resources, there is war, and file descriptors are also a kind of resources. every process in the system needs a file descriptor in order to change the world. The world needs order, so there is a “document descriptor limit” rule.

如下表:

白话linux操作系统原理

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

  • 找到需要检查的进程id
  • 查看该进程的资源,比如fd 是描述符,limits是限制。
  • 查看该进程的限制,如图,在 Max open files 那一行,可以看到当前设置中soft最大文件描述符的数量为1024。

白话linux操作系统原理

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

白话linux操作系统原理

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

特殊的文件描述符

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

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

白话linux操作系统原理

总结

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

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

Original: https://www.cnblogs.com/xiexj/p/15825930.html
Author: 编程一生
Title: 白话linux操作系统原理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/161805/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • linux 中传入上一条命令的参数 !$

    使用!$可以将上一条命令的参数传入,例如 vi ~/.bashrc source !$ 就等同于 source ~/.bashrc 联系方式:emhhbmdfbGlhbmcxOTk…

    Linux 2022年8月11日
    0165
  • 3.20 什么是环境变量,Linux环境变量有哪些?

    变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(…

    Linux 2022年10月19日
    0130
  • idea里面使用git很慢的解决方法

    在idea里面做java开发,发现git的一些操作,包括push,checktout,pull都特别慢,但是在cmd里面很快,排除网络问题。 折腾半天,最后发现修改C:\Progr…

    Linux 2022年8月30日
    0162
  • 如何利用XShell隧道通过跳板机连接内网机器

    在服务器众多的企业里,通常运维会把某台机器开放外网访问权限,其他服务器通过该机器进行访问,该机器通常称之为跳板机。开发人员可以通过SSH工具访问服务器,进行日志查看、问题排查等等。…

    Linux 2022年9月14日
    0176
  • 怎么删除github上的仓库

    1.到你的个人中心.点击你的个人账号.下图的红色部分 2.点击repositories(仓库),选择你要删除的项目 3.code这一行导航栏 最后的一个. setting 4.下拉…

    Linux 2022年8月30日
    0177
  • Linux RAID卡优化

    我们的生产服务器经常会做raid存储,但是单单做了raid就能保证性能高效和数据安全吗?答案是否定的,我们一般建议使用带电池保护的RAID卡,这样既能保证性能有能保证数据安全,但是…

    Linux 2022年8月24日
    0107
  • 一文搞懂 Redis 架构演化之路

    这种方案就是我们经常听到的 Redis RDB,RDB 采用「 定时快照」的方式进行数据持久化,它的优点是: 持久化文件体积小(二进制 + 压缩) 写盘频率低(定时写入) 缺点也很…

    Linux 2022年9月14日
    098
  • 《Linux内核原理与分析》教学进程

    2020-2021-1 《Linux内核原理与分析》教学进程 2020-2021-1 《Linux内核原理与分析》教学进程 考核方案 第一周: 第二周: 第三周: 第四周: 第五周…

    2022年8月13日
    0152
  • docker gitlab升级到14.4.2

    一、概述 目前gitlab版本是13.3.5,使用docker部署。近期阿里云发出警告,有恶意代码执行,今查询,是gitlab漏洞导致,需要升级到最新版本。 目前已知的最新版本是1…

    Linux 2022年8月30日
    0146
  • 【转】京东评价系统海量数据存储设计

    概述 京东每天有数十亿条产品评论和数十亿次服务呼叫,这些数据每年仍在指数级增长,而数据存储是其中最重要的部分之一。接下来,我们来介绍一下京东点评系统的数据存储是如何设计的。 [En…

    Linux 2022年11月12日
    079
  • LaTeX 数学公式语法

    参考来源: https://blog.csdn.net/anxiaoxi45/article/details/39449445 https://www.cnblogs.com/ya…

    Linux 2022年10月19日
    098
  • 解决samba共享虚拟机第二块磁盘的难题

    但是共享时磁盘空间是有限的,如果空间使用完了该怎么处理呢?这是个头疼的问题,不知道samba支持不支持共享第二个文件夹,由于相关知识有限没能够实现,最后想了个其他办法饶了过去。使用…

    Linux 2022年8月30日
    084
  • git remote: HTTP Basic: Access denied 错误解决办法

    问题描述:git push 报 HTTP Basic: Access denied 错误 原因:本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致。 解决方案:…

    Linux 2022年8月30日
    0188
  • linux内核学习—Linux内核更新(2)

    一:场景 openvswitch不同版本编译,可能对linux内核的要求不同,不一致的版本可能导致各种错误,比如:宏定义错误,结构体成员、回调函数缺失… 比如在VM下使…

    2022年8月11日
    0156
  • CentosYUM源报错 Invalid release/repo/arch combination

    https://blog.51cto.com/vaedit/2573233 Original: https://www.cnblogs.com/royfans/p/16198386…

    Linux 2022年8月30日
    0132
  • 为Windows Service 2019 使用 Docker

    引言最近收到领导通知,甲方需要将原来的服务器迁移到新的服务器。原服务器上安装了很多服务,每次重启后总会出现很多问题,需要大量的人工干预。 [En] There are a lot …

    Linux 2022年11月7日
    0109
最近整理资源【免费获取】:   👉 程序员最新必读书单  | 👏 互联网各方向面试题下载 | ✌️计算机核心资源汇总