1
0
mirror of https://github.com/Didnelpsun/CS408.git synced 2026-11-03 05:43:42 +08:00
This commit is contained in:
Didnelpsun
2022-10-22 22:39:52 +08:00
parent 8844c0ccc0
commit 8687c421c7
4 changed files with 83 additions and 28 deletions

View File

@@ -286,28 +286,54 @@
#### 中断的分类
中断来源:
+ 内中断(异常、例外、陷入)信号来自$CPU$内部,与当前执行的命令有关,必须立刻处理,且对于无法恢复故障的需要终止进程。
+ 自愿中断:指令中断。如系统调用时使用的访管指令(陷入指令、$trap$指令)引起的**访管中断**。
+ 强迫中断:
+ 硬件故障。(缺页、主存故障造成机器校验中断)
+ 软件中断。(整数除$0$)
+ 陷阱、自陷$Trap$:是一种事先安排的"异常"事件,用于在用户态下调用操作系统内核程序,如条件陷阱指令引起的**访管中断**。
+ 故障$Fault$:通常是由指令执行引起的异常,如非法操作码、缺页故障、除数为零、运算溢出等。
+ 终止$Abort$:是指出现了使得$CPU$无法继续执行的硬件故障,如控制器出错、存储器校验错等。
+ 外中断(中断)信号来自$CPU$外部,与当前执行的命令无关。
+ 外设请求:如$I/O$操作完成时发出的中断信号。
+ 时钟中断:时间片已到。
+ 人工干预。
+ 可屏散中断中断是指通过$INTR$线发出的中断请求,通过改变屏蔽字可以实现多重中断,从而使得中断处理更加灵活。
+ 不可屏蔽中断是指通过$NMI$线发出的中断请求,通常是紧急的硬件故障,如电源掉电等。
+ 异常也是不能被屏蔽的。
+ 常见外中断:
+ 外设请求:如$I/O$操作完成时发出的中断信号。
+ 时钟中断:时间片已到。
+ 人工干预。
另一种分类方式内中断分为:
中断性质:
+ 陷阱、陷入。
+ 故障。
+ 终止。
+ 自愿中断:指令中断。
+ 强迫中断:
+ 硬件故障。(缺页、主存故障造成机器校验中断)
+ 软件中断。(整数除零)
#### 中断优先级
优先级从高到低:
+ 内部中断:
1. 故障中断。
2. 访管中断。
3. $DMA$中断。
+ 外中断:
1. 不可屏蔽中断。
2. 可屏蔽中断。
3. 高速设备中断。
4. 低速设备中断。
5. 输入输出设备中断。
6. 实时时钟中断。
7. 非实时时钟中断。
8. 程序指令中断。
9. 单步执行中断。
10. 重启。
#### 外中断的处理过程
1. 关中断。$CPU$响应中断后,首先要保护程序的现场状态,在保护现场的过程中,$CPU$不应响应更高级中断源的中断请求。否则,若现场保存不完整,在中断服务程序结束后,也就不能正确地恢复并继续执行现行程序。
2. 保存断点。为保证中断服务程序执行完毕后能正确地返回到原来的程序,中断隐指令将原来的程序的断点(即程序计数器$PC$)保存起来。由硬件自动完成。
2. 保存断点。为保证中断服务程序执行完毕后能正确地返回到原来的程序,中断隐指令将原来的程序的断点(即程序计数器$PC$)保存起来。由硬件自动完成。这是每个程序都要完成的。
3. 中断服务程序寻址。其实质是取出中断服务程序的入口地址送入程序计数器$PC$。
4. 保存现场和屏蔽字。进入中断服务程序后,首先要**操作系统**保存现场,现场信息一般是指程序状态字寄存器$PSWR$和某些通用寄存器的内容,即中断屏蔽字。
4. 保存现场和屏蔽字。进入中断服务程序后,首先要**操作系统**保存现场,现场信息一般是指程序状态字寄存器$PSWR$和某些通用寄存器的内容,即中断屏蔽字。只有父程序才需要完成,子程序不需要。
5. 开中断。允许更高级中断请求得到响应。
6. 执行中断服务程序。这是中断请求的目的。各中断向量统一存放在中断向量表中,该表由操作系统初始化,硬件找到该中断信号对应的中断向量,中断向量指明中断服务程序入口地址,然后根据其开始执行。
7. 关中断。保证在恢复现场和屏蔽字时不被中断。
@@ -366,17 +392,19 @@
### 分层法
层$0$为硬件,层$N$为用户接口。每层只能调用紧邻其低层的功能和服务。
层$0$为硬件,层$N$为用户接口。每层只能调用紧邻其低层的功能和服务,为单向依赖。
优点:
+ 便于系统调试和验证,简化系统设计和实现。从底层向上调试。
+ 易扩充和维护。
+ 便于系统调试和验证,简化系统设计和实现。
+ 从底层向上调试。
+ 易扩充和维护,不会影响其他层次。
缺点:
+ 分层困难,不够灵活。
+ 依赖复杂,效率较低。
+ 分层困难。
+ 依赖复杂,不够灵活。
+ 使用一个功能要穿越多层调用,效率较低。
### 模块化
@@ -407,25 +435,37 @@
缺点:
+ 内核代码庞大,结构混乱,难以维护。
+ 可靠性低,单个服务崩溃全系统崩溃。
+ 可靠性低,不稳定,单个服务崩溃全系统崩溃。
+ 占用空间大。
+ 可移植性差。
主流的系统,如$Windows$、$MacOS$等都是宏内核。
### 微内核
内核功能只包含基本的进程(线程)管理、低级存储器管理、中断和陷入处理。
内核功能只包含低级进程(线程)管理、低级存储器管理、中断和陷入处理、低级输入输出。
通过信息传递机制传输数据。
特点:
+ 内核小。
+ 基于C/S结构。
+ 机制与策略分离。机制是指实现某一功能的其体执行机构。策略则是在机制的基础上借助于某些参数和算法来实现该功能的优化,或达到不同的功能目标。在传统的$OS$中,将机制放在$OS$内核的较低层中,把策略放在内核的较高层中。而在微内核$OS$中,通常将机制放在$OS$的微内核中。正因如此,才可以将内核做得很小。
+ 面向对象技术。
优点:
+ 扩展性和灵活性。
+ 可靠性和安全性。
+ 内核稳定。
+ 可移植性。
+ 分布式计算。
缺点:因为很多功能不在内核中,需要频繁在核心态和用户态之间切换,效率较低。
很多新系统,如谷歌$Fuchsia$和华为鸿蒙都是微内核。
### 外核
外核为一个程序,在内核态中运行,为虚拟机分配资源并管理。
@@ -445,11 +485,13 @@
6. 在$ROM$中加载主引导记录$MBR$。硬盘以特定的标识符区分引导硬盘和非引导硬盘。如果发现一个存储设备不是可引导盘,就检查下一个存储设备。如无其他启动设备,就会死机。主引导记录$MBR$的作用是告诉$CPU$去硬盘的哪个主分区去找操作系统。
7. $MBR$扫描硬盘分区表,加载硬盘活动分区。$MBR$包含硬盘分区表,硬盘分区表以特定的标识符区分活动分区和非活动分区。主引导记录扫描硬盘分区表,进而识别含有操作系统的硬盘分区(活动分区)。找到硬盘活动分区后,开始加载硬盘活动分区,将控制权交给活动分区。
8. $MBR$加载分区引导记录$PBR$。即该分区的启动程序(操作系统引导扇区),读取活动分区的第一个扇区,这个扇区称为分区引导记录($PBR$),其作用是寻找并激活分区根目录下用于引导操作系统的程序(启动管理器)。
9. 加载启动管理器。分区引导记录搜索活动分区中的启动管理器,加载启动管理器。
10. 加载操作系统。
9. 加载启动管理器。**硬盘**的分区引导记录搜索活动分区中的启动管理器(活动分区的引导扇区的**引导程序**),加载启动管理器。
10. 加载操作系统。常驻内存的只有操作系统的**内核**,其他是需要再调入。
## 虚拟机
裸金属架构:
```txt
--------------------------------------------------------
| 用户操作系统程序进程 | 用户操作系统程序进程 | |
@@ -462,6 +504,8 @@
--------------------------------------------------------
```
寄居架构:
```txt
------------------------
| 用户程序 |

View File

@@ -247,14 +247,25 @@
+ 线程几乎不拥有系统资源。
+ 同一进程的不同线程间共享进程的资源。
+ 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预。
+ 没有独立地址空间。
+ 同一进程中的线程切换,不会引起进程切换。
+ 不同进程中的线程切换,会引起进程切换。
+ 切换同进程内的线程,系统开销很小。
+ 切换进程,系统开销较大。
+ 只有执行、就绪、阻塞三种状态。
#### TCB
线程控制块$TCB$是与进程的控制块$PCB$相似的子控制块,只是$TCB$中所保存的线程状态比$PCB$中保存少而已。
线程控制块$TCB$是与进程的控制块$PCB$相似的子控制块,只是$TCB$中所保存的线程状态比$PCB$中保存少而已:
+ 线程标识符。
+ 寄存器。
+ 运行状态。
+ 优先级。
+ 专有存储区。
+ 堆栈指针。
实际上只有内核级线程才有$TCB$。
#### 线程实现