Linux开机启动流程

内核引导

当计算机打开电源后,首先是BIOS开机自检,按照BIOS中设置的启动设备(通常是硬盘)来启动。
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
🏃‍ 操作系统 - 图2

运行init

🏃‍ 操作系统 - 图3

系统初始化

在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。
它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
🏃‍ 操作系统 - 图4

内核态与用户态的区别


处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的
处于内核态执行时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的。

用户态—->内核态:唯一途径是通过中断、异常、陷入机制(访管指令)
内核态—->用户态:设置程序状态字PSW

在CPU的所有指令中,有一些指令是非常危险的,如果错用,将导致整个系统崩溃。
比如:清内存、设置时钟等。如果所有的程序都能使用这些指令,那么很容易造成系统崩溃。
所以,CPU将指令分为特权指令和非特权指令,对于那些危险的指令,只允许操作系统及其相关模块使用,普通的应用程序只能使用那些不会造成灾难的指令。Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3。

孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。

CPU负载和CPU利用率的区别

image.png
image.png

image.png
image.png
image.png

💬 内存管理

image.png

1.段式管理

image.png

分段会存在不足:
第⼀个就是内存碎片的问题。
image.png
第⼆个就是内存交换的效率低的问题。

2.页式管理

image.png
image.png
image.png

image.png
image.png

3.Linux内存

image.png

📄 进程与线程

1.进程和线程

image.png

image.png

image.png
image.png

2.哲学家就餐

image.png
image.png

3.死锁

image.png

4.悲观锁和乐观锁

image.png

✅ 调度算法

image.png
image.png

image.png
image.png

✅ 网络系统

1.网络包发送

image.png
image.png
image.png

image.png

2.零拷贝

image.png

image.png
image.png

3.IO多路复用

image.png

image.png

image.png

image.png

4.Reactor

image.png

image.png
image.png

✅ 文件系统

1.文件系统基本组成

image.png
image.png

2.硬链接和软链接

image.png