diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 7ff42414..2b48bc33 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -2,8 +2,8 @@ * [一、 概述](#一-概述) * [操作系统基本特征](#操作系统基本特征) * [系统调用](#系统调用) - * [中断分类](#中断分类) * [大内核和微内核](#大内核和微内核) + * [中断分类](#中断分类) * [二、 进程管理](#二-进程管理) * [进程与线程](#进程与线程) * [进程状态的切换](#进程状态的切换) @@ -58,7 +58,27 @@ 如果一个进程在用户态需要用到操作系统的一些功能,就使用系统调用从而陷入内核,由操作系统代为完成。 -可以由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。 +需要由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。 + +

+ +## 大内核和微内核 + +### 1. 大内核 + +大内核是将操作系统功能作为一个紧密结合的整体放到内核。 + +由于各模块共享信息,因此有很高的性能。 + +### 2. 微内核 + +由于操作系统不断复杂,为了实现因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。 + +在微内核结构下,操作系统被划分成小的、定义良好的模块,只有微内核这一个模块运行在内核态,其余模块运行在用户态。 + +因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。 + +

## 中断分类 @@ -74,20 +94,6 @@ 在用户程序中使用系统调用。 -## 大内核和微内核 - -### 1. 大内核 - -大内核是将操作系统功能作为一个紧密结合的整体放到内核。 - -由于各模块共享信息,因此有很高的性能。 - -### 2. 微内核 - -由于操作系统不断复杂,因此将一部分操作系统功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。 - -因为需要频繁地在用户态和核心态之间进行切换,所以会有一定的性能损失。 - # 二、 进程管理 ## 进程与线程 @@ -98,12 +104,16 @@ 进程控制块 (Process Control Block, PCB) 描述进程的基本信息和运行状态,所谓的创建进程和撤销进程,都是指对 PCB 的操作。 +

+ ### 2. 线程 一个进程中可以有多个线程,线程是独立调度的基本单位。 同一个进程中的多个线程之间可以并发执行,它们共享进程资源。 +

+ ### 3. 区别 - 拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。 @@ -118,11 +128,16 @@ ## 进程状态的切换 -

+

-阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU,缺少 CPU 会从运行态转换为就绪态。 +- 就绪状态(ready):等待 CPU 时间 +- 运行状态(running) +- 阻塞状态(waiting):等待资源 -只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。 +应该注意以下内容: + +- 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。 +- 阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU 时间,缺少 CPU 事件会从运行态转换为就绪态。 ## 调度算法 @@ -132,7 +147,7 @@ #### 1.1 先来先服务 -first-come first-serverd(FCFS)。 +> first-come first-serverd(FCFS) 调度最先进入就绪队列的作业。 @@ -140,15 +155,15 @@ first-come first-serverd(FCFS)。 #### 1.2 短作业优先 -shortest job first(SJF)。 +> shortest job first(SJF) 调度估计运行时间最短的作业。 -长作业有可能会饿死,处于一直等待短作业执行完毕的状态。如果一直有短作业到来,那么长作业永远得不到调度。 +长作业有可能会饿死,处于一直等待短作业执行完毕的状态。因为如果一直有短作业到来,那么长作业永远得不到调度。 #### 1.3 最短剩余时间优先 -shortest remaining time next(SRTN)。 +> shortest remaining time next(SRTN) ### 2. 交互式系统中的调度 @@ -158,11 +173,11 @@ shortest remaining time next(SRTN)。 响应比 = (等待时间 + 要求服务时间) / 要求服务时间 = 响应时间 / 要求服务时间 -这种调度算法主要是为了解决 SJF 中长作业可能会饿死的问题,因为随着等待时间的增长,响应比也会越来越高。 +这种调度算法主要是为了解决短作业优先调度算法长作业可能会饿死的问题,因为随着等待时间的增长,响应比也会越来越高。 #### 2.2 时间片轮转 -将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。 +将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 时间分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 时间分配给队首的进程。 时间片轮转算法的效率和时间片的大小有很大关系。因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。 @@ -170,9 +185,9 @@ shortest remaining time next(SRTN)。

-如果一个进程需要执行 100 个时间片,如果采用轮转调度算法,那么需要交换 100 次。多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要 7 (包括最初的装入)的交换。 +如果一个进程需要执行 100 个时间片,如果采用轮转调度算法,那么需要交换 100 次。多级队列是为这种需要连续执行多个时间片的进程考虑,它设置了多个队列,每个队列时间片大小都不同,例如 1,2,4,8,..。进程在第一个队列没执行完,就会被移到下一个队列。这种方式下,之前的进程只需要交换 7 次。 -每个队列的优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。 +每个队列优先权也不同,最上面的优先权最高。因此只有上一个队列没有进程在排队,才能调度当前队列上的进程。 ### 3. 实时系统中的调度 @@ -722,3 +737,5 @@ CSCAN 对 SCAN 进行了改动,要求磁头始终沿着一个方向移动。 - 汤子瀛, 哲凤屏, 汤小丹. 计算机操作系统[M]. 西安电子科技大学出版社, 2001. - Bryant, R. E., & O’Hallaron, D. R. (2004). 深入理解计算机系统. - [进程间的几种通信方式](http://blog.csdn.net/yufaw/article/details/7409596) +- [Operating-System Structures](https://www.cs.uic.edu/\~jbell/CourseNotes/OperatingSystems/2_Structures.html) +- [Processes](http://cse.csusb.edu/tongyu/courses/cs460/notes/process.php) diff --git a/pics/2_14_microkernelArchitecture.jpg b/pics/2_14_microkernelArchitecture.jpg new file mode 100644 index 00000000..21c2a58f Binary files /dev/null and b/pics/2_14_microkernelArchitecture.jpg differ diff --git a/pics/3cd630ea-017c-488d-ad1d-732b4efeddf5.png b/pics/3cd630ea-017c-488d-ad1d-732b4efeddf5.png new file mode 100644 index 00000000..9dc77733 Binary files /dev/null and b/pics/3cd630ea-017c-488d-ad1d-732b4efeddf5.png differ diff --git a/pics/ProcessState.png b/pics/ProcessState.png new file mode 100644 index 00000000..39269579 Binary files /dev/null and b/pics/ProcessState.png differ diff --git a/pics/a6ac2b08-3861-4e85-baa8-382287bfee9f.png b/pics/a6ac2b08-3861-4e85-baa8-382287bfee9f.png new file mode 100644 index 00000000..26b0bd03 Binary files /dev/null and b/pics/a6ac2b08-3861-4e85-baa8-382287bfee9f.png differ