diff --git a/Computer-Organization/2-storage-system.md b/Computer-Organization/2-storage-system.md index 727ccc7..f78e2af 100644 --- a/Computer-Organization/2-storage-system.md +++ b/Computer-Organization/2-storage-system.md @@ -125,7 +125,7 @@ $CPU$要想实现数据的读写操作,就必须与外部器件(芯片)进 + 译码驱动:将来自地址总线的地址信号翻译成对应存储单元的选通信号,该信号在读写电路的配合下未完成对被选中的单元的读写操作。 + 译码器:将$MAR$输入的地址进行译码,选择选中的存储单元地址。 + 驱动器:根据译码器提供的地址,通过驱动器获取对应存储单元。 -+ 读写电路:包括读出放大器和写入电路,用来完成读写操作。根据控制电路的读或写操作要求,将MDR传入的数据写入存储体中,或将存储体中的数据读出到$MDR$中。 ++ 读写电路:包括读出放大器和写入电路,用来完成读写操作。根据控制电路的读或写操作要求,将$MDR$传入的数据写入存储体中,或将存储体中的数据读出到$MDR$中。 + $MAR$:地址寄存器,保存从地址总线输入的地址。 + $MDR$:数据寄存器,保存读出或写入的数据。 + 地址线$A_i$:用来输入$CPU$要访问的主存地址,是单向的,位数与$CPU$芯片容量相关,一般与$MAR$位数相等。直接连接$MAR$。多少个存储单元就多少根地址线。地址线的多少决定CPU寻址能力。 @@ -273,7 +273,7 @@ $CPU$与内存通过总线连接。 + 线选法: + 当某地址线信息为“$0$”时,就选中与之对应的存储芯片,只能一位有效。 + 优点:不需要地址译码器,线路简单。 - + 缺点:地址空间不连续,选片的地址线必须分时为低电平(否则不能工作),不能充分利用系统的存储器空间,造成地址资源的费。 + + 缺点:地址空间不连续,选片的地址线必须分时为低电平(否则不能工作),不能充分利用系统的存储器空间,造成地址资源浪费。 + 译码片选法: + 由于译码器可以将$n$位映射到$2^n$位,所以通过地址译码芯片产生片选信号。如线选法如果三位编码只能选择三个芯片,而译码片选法三位编码可以选择八个芯片,即三位二进制编码。 + 优点:地址空间可连续,可以增加逻辑设计。 @@ -408,7 +408,7 @@ M0|M1|M2|M3 默认都需要一位有效位。 -注意:$Cache$字块标记是指$Cache$有多少行,而不是有多少容量,往往以字为单位。 +注意:$Cache$字块标记是指$Cache$有多少行,而不是有多少容量。 #### 直接映射 @@ -575,7 +575,7 @@ $Cache$为了解决主存和$CPU$之间的问题,而虚拟存储器为了解 + 虚地址=虚存页号+页内字地址。 + 辅存地址=磁盘号+盘面号+磁道号+扇区号。 -注意:这里地址空间基本上都是用字地址的,即以机器字长为单位进行编址,这是因为虚拟存储器面向程序员,所以以逻辑的每一个字为单位;而上一讲的高速缓冲存储器面向的机器本身,所以经常以字节为单位进行编址。 + 注意:虚拟系统中,找到的地址后,进行地址映射是靠操作系统完成,在操作系统的书中会更详细讲到。 diff --git a/Computer-Organization/3-instruction-system.md b/Computer-Organization/3-instruction-system.md index 86c94d8..6e9a5bb 100644 --- a/Computer-Organization/3-instruction-system.md +++ b/Computer-Organization/3-instruction-system.md @@ -285,7 +285,7 @@ + 将$CPU$中基址寄存器($BR$)的内容加上指令格式中的形式地址$A$,而形成操作数的有效地址,即$EA=(BR)+A$。 + 分为隐式基址寄存器(专用寄存器$BR$)和显式基址寄存器(需要指定某通用寄存器为基址寄存器)。 -+ 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定,用户不可改变。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量,使用补码表示)。 ++ 基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定,用户不可改变。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址$A$可变(作为偏移量,使用补码表示)。 + 当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。 + 优点: + 可扩大寻址范围(基址寄存器的位数大于形式地址$A$的位数)。 diff --git a/Operate-System/0-summary.md b/Operate-System/0-summary.md index 3385b03..835790c 100644 --- a/Operate-System/0-summary.md +++ b/Operate-System/0-summary.md @@ -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 ------------------------ | 用户程序 | diff --git a/Operate-System/1-process-management.md b/Operate-System/1-process-management.md index 5bffbef..0247457 100644 --- a/Operate-System/1-process-management.md +++ b/Operate-System/1-process-management.md @@ -247,14 +247,25 @@ + 线程几乎不拥有系统资源。 + 同一进程的不同线程间共享进程的资源。 + 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预。 ++ 没有独立地址空间。 + 同一进程中的线程切换,不会引起进程切换。 + 不同进程中的线程切换,会引起进程切换。 + 切换同进程内的线程,系统开销很小。 + 切换进程,系统开销较大。 ++ 只有执行、就绪、阻塞三种状态。 #### TCB -线程控制块$TCB$是与进程的控制块$PCB$相似的子控制块,只是$TCB$中所保存的线程状态比$PCB$中保存少而已。 +线程控制块$TCB$是与进程的控制块$PCB$相似的子控制块,只是$TCB$中所保存的线程状态比$PCB$中保存少而已: + ++ 线程标识符。 ++ 寄存器。 ++ 运行状态。 ++ 优先级。 ++ 专有存储区。 ++ 堆栈指针。 + +实际上只有内核级线程才有$TCB$。 #### 线程实现