From 57f849b1a31c92d52898245f65c5ed38b325823c Mon Sep 17 00:00:00 2001 From: ld_4215105 <4215105@qq.com> Date: Fri, 11 Sep 2020 11:27:10 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0files/=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=80=81=E4=B8=8E=E5=86=85=E6=A0=B8=E6=80=81.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...16\345\206\205\346\240\270\346\200\201.md" | 140 ++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 "files/\347\224\250\346\210\267\346\200\201\344\270\216\345\206\205\346\240\270\346\200\201.md" diff --git "a/files/\347\224\250\346\210\267\346\200\201\344\270\216\345\206\205\346\240\270\346\200\201.md" "b/files/\347\224\250\346\210\267\346\200\201\344\270\216\345\206\205\346\240\270\346\200\201.md" new file mode 100644 index 0000000..a2476fa --- /dev/null +++ "b/files/\347\224\250\346\210\267\346\200\201\344\270\216\345\206\205\346\240\270\346\200\201.md" @@ -0,0 +1,140 @@ + +

内核与用户态

+ + +------ + + + +> 此博客仅代表博主工作3年来对Linux内核操作系统的认知,如有偏差请见谅。 + + +### 内核态 + + +------ + + +`计算机管理硬件的软件` + + +主要职责: + + +1. 获取硬件资源 +2. 硬件的初始化 +3. 接受用户态程序调用请求 +4. 合理分配硬件资源给用户态程序 + + +### 用户态 + + +------ + + +`向内核申请硬件资源` + + +主要功能: + + +1. 完成用户特定命令 +2. 向内核申请资源 + + +### 关系 + + +------ + + + +```mermaid +sequenceDiagram + +participant 用户程序 +participant 操作系统 +participant 内核 +participant 摄像头 +用户程序->操作系统:我要自拍 +操作系统->>用户程序: 稍等 +Note over 内核: 我是内核 +loop 处理请求 + 操作系统->操作系统: 努力处理中 +end +Note over 摄像头: 我是摄像头 +操作系统->内核: 我要摄像头图片 +loop 处理请求 + 内核->内核: 努力处理中 +end +内核->摄像头:我要给我来一张照片 + +用户程序-->>操作系统: 还没有好? +操作系统->>用户程序: 不要慌,还在拍 + + loop 处理请求 + 摄像头->摄像头: 努力采集中 + end +Note over 操作系统: 我是操作系统 + 摄像头->>内核: 拿去 +内核->>操作系统: 喏,给你了 +loop 处理照片响应 + 操作系统->操作系统: 努力处理中 +end +Note over 用户程序: 我是图片处理程序 +用户程序-->>操作系统: 还没有好? +操作系统->>用户程序: 好了,给你 + +``` + + +### 说明 + + +------ + + + + +#### 1.上述例子各个角色都干了啥 + + +1. 应用程序:获取了一张来自摄像头的自拍照片 +2. `操作系统`:叫内核拍了一张照片给应用程序 +3. `内核`:我从摄像头拿取了一张图片 +4. `摄像头`:我捕捉了一张图给内核 + + +

+    在操作系统中的一个图片处理程序向操作系统提交了一个拍照 的请求。操作系统收到命令后做了各种判断,确定这个程序是有拍照的许可。随后向内核提出申请。内核收到申请后,进行摄像头的各种判断,确认摄像头可以进行拍摄过后,向摄像头发出指令。此时内核捕获摄像头上的瞬间数据,进行判断,确认拍照成功。逐层进行图片优化后,提交到用户程序进行P图处理。 + + +#### 2.用户态与内核态切换 + + +

+     程序的运行均是以CPU来执行的一系列指令。当应用程序和操作系统工作时,本质是CPU在运行这两种程序的代码,此时CPU运行的状态即为用户态。当应用程序需要访问计算机内的物理资源,比如打印机、摄像头、磁盘等时,需要经过内核,此时CPU从运行用户态指令转而运行内核程序的指令。这个转换动作我们称之为用户态与内核态切换。 +

+ + +#### 3.系统调用 + + +

+ CPU从用户态转向内核态需要一个触发条件,而这个条件包含如下类: +

+ + +1. 系统调用:操作系统、shell、库函数等触发 +2. 异常事件:如缺页异常等触发 +3. 中断:如网卡有可读数据时触发的中断 + + +>

+> 设备引起的中断称为硬中断 +> 系统调用的本质也为中断,称之为软中断 +>

+ + +------ -- GitLab