Linux:
Date: April 14, 2023
Linux 系统概览
Linux系统结构
Linux 系统一般有4个主要部分:内核、shell、文件系统、应用程序
内核是硬件与软件之间的中间层、内核是一个资源管理程序、内核提供一组面向系统的命令
进程管理
进程是正在执行的一个程序或命令
进程有自己的地址空间,占用一定的系统资源
一个CPU核同一时间只能运行一个进程
进程由它的进程 ID (PID)和它父进程的进程 DD(PPID)唯一识别
如图liunx启动后,会有一个pid 0,即创世进程。之后,运行的其他进程都是它的子进程。
查看进程信息:
注:这里可以了解一波进程的信息。
问题思考:
系统中运行的程序远远大于 CPU 的核数,那 Linux 系统是如何实现同时运行这么多程序的?
通过进程调度来实现
进程调度:
进程调度是指操作系统按某种策略或规则选择进程占用CPU进行运行的过程。
对应上图中的S
- R (TASK_ RUNNING),可执行状态
- S(TASK_ INTERRUPTIBLE),可中断的睡眠状态
- D(TASK_UNINTERRUPTIBLE),不可中断的睡眠状态
- TTASK_STOPPED Or TASK_TRACED),暂停状态或跟踪状态
- Z (TASK_DEAD- EXIT_ZOMBIE),退出状态,进程成为僵尸进程
- × (TASK_DEAD-EXIT_DEAD),退出状态,进程即将被销毁
进程调度原则:
- 一个CPU核同一时间只能运行一个进程
- 每个进程有近乎相等的执行时间
- 对于逻辑 CPU 而言进程调度使用轮询的方式执行,当轮询完成则回到第一个进程反复
- 进程执行消耗时间和进程量成正比
进程的系统调用:
内核空间 (Kernal Space):系统内核运行的空间
用户空间 (User Space):应用程序运行的空间
理解:当某一个应用程序运行在运行空间的时候,它处于用户态。当它处于内核空间的时候,它处于内核态
比如ngix运行时,默认处于用户态, 当它需要调取页面文件时,就会发起IO请求,这IO请求我们称为一次系统的调用。之后,应用就会切换到内核态,从而有权限去读取硬件中存储的资源,然后会把相应资源返回给用户态的应用程序,然后应用程序就会从内核态再次转变为用户态,从而把页面文件传给调取应用的用户。
总结:
应用程序会频繁在用户态和内核态切换,从而读取硬件资源来完成相应任务。
文件系统:
Linux文件系统采用树状的目录结构,最上层是/目录
问题思考:
Linux 有这么多不同的文件系统,如何实现对用户提供统一调用接口的?
虚拟文件系统
虚拟文件系统(VFS)
- 对应用层提供一个标准的文件操作接口
- 对文件系统提供一个标准的文件接入接口
文件读取流程:
读取数据:
当ngix需要读取文件时,它先回去用户缓冲区中读取文件,若有缓存则会直接读取,如没有,
则ngix会发起一次系统IO时,nigx进程就会从用户态切换为内核态,内核进程会从内核缓冲区中读取
缓存,如果有那就通过CPU拷贝的方式拷回来,若没有,则会通过DMA拷贝的方式拷回数据。
缓冲区的作用:
减少对系统的调用次数,集中调用,提高系统的性能