提交 57f849b1 编写于 作者: ld_4215105's avatar ld_4215105

更新files/用户态与内核态.md

上级 8031b2fc
<center><h1>内核与用户态</h1></center>
------
> 此博客仅代表博主工作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. <code>应用程序</code>:获取了一张来自摄像头的自拍照片
2. `操作系统`:叫内核拍了一张照片给应用程序
3. `内核`:我从摄像头拿取了一张图片
4. `摄像头`:我捕捉了一张图给内核
<p>
&nbsp&nbsp&nbsp&nbsp在操作系统中的一个图片处理程序向操作系统提交了一个<i>拍照</i> 的请求。操作系统收到命令后做了各种判断,确定这个程序是有拍照的许可。随后向内核提出申请。内核收到申请后,进行摄像头的各种判断,确认摄像头可以进行拍摄过后,向摄像头发出指令。此时内核捕获摄像头上的瞬间数据,进行判断,确认拍照成功。逐层进行图片优化后,提交到用户程序进行P图处理。
#### 2.用户态与内核态切换
<p>
&nbsp&nbsp&nbsp&nbsp程序的运行均是以CPU来执行的一系列指令。当应用程序和操作系统工作时,本质是CPU在运行这两种程序的代码,此时CPU运行的状态即为<code>用户态</code>。当应用程序需要访问计算机内的物理资源,比如打印机、摄像头、磁盘等时,需要经过内核,此时CPU从运行用户态指令转而运行内核程序的指令。这个转换动作我们称之为<code style="color: red;">用户态与内核态切换</code>
</p>
#### 3.系统调用
<p>
CPU从用户态转向内核态需要一个触发条件,而这个条件包含如下类:
</p>
1. 系统调用:操作系统、shell、库函数等触发
2. 异常事件:如缺页异常等触发
3. 中断:如网卡有可读数据时触发的中断
> <p>
> 设备引起的中断称为<code style="color: red;">硬中断</code>
> 系统调用的本质也为中断,称之为<code style="color: red;">软中断</code>
> </p>
------
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册