diff --git a/notes/计算机操作系统.md b/notes/计算机操作系统.md index 718b0b8d..25750576 100644 --- a/notes/计算机操作系统.md +++ b/notes/计算机操作系统.md @@ -52,11 +52,11 @@ ### 4. 异步 -异步是指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 +异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。 ## 系统调用 -如果一个进程在用户态需要用到操作系统的一些功能,就需要使用系统调用从而陷入内核,由操作系统代为完成。 +如果一个进程在用户态需要用到操作系统的一些功能,就使用系统调用从而陷入内核,由操作系统代为完成。 可以由系统调用请求的功能有设备管理、文件管理、进程管理、进程通信、存储器管理等。 @@ -120,7 +120,7 @@

-阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU,缺少 CPU 会让进程从运行态转换为就绪态。 +阻塞状态是缺少需要的资源从而由运行状态转换而来,但是该资源不包括 CPU,缺少 CPU 会从运行态转换为就绪态。 只有就绪态和运行态可以相互转换,其它的都是单向转换。就绪状态的进程通过调度算法从而获得 CPU 时间,转为运行状态;而运行状态的进程,在分配给它的 CPU 时间片用完之后就会转为就绪状态,等待下一次调度。 @@ -164,7 +164,7 @@ shortest remaining time next(SRTN)。 将所有就绪进程按 FCFS 的原则排成一个队列,每次调度时,把 CPU 分配给队首进程,该进程可以执行一个时间片。当时间片用完时,由计时器发出时钟中断,调度程序便停止该进程的执行,并将它送往就绪队列的末尾,同时继续把 CPU 分配给队首的进程。 -时间片轮转算法的效率和时间片的大小有很大关系。因为每次进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,进程切换太频繁,在进程切换上就会花过多时间。 +时间片轮转算法的效率和时间片的大小有很大关系。因为进程切换都要保存进程的信息并且载入新进程的信息,如果时间片太小,会导致进程切换得太频繁,在进程切换上就会花过多时间。 #### 2.3 多级反馈队列 @@ -196,15 +196,15 @@ shortest remaining time next(SRTN)。 ### 2. 同步与互斥 -- 同步指多个进程按一定顺序执行; -- 互斥指多个进程在同一时刻只有一个进程能进入临界区。 +- 同步:多个进程按一定顺序执行; +- 互斥:多个进程在同一时刻只有一个进程能进入临界区。 ### 3. 信号量 **信号量(Semaphore)** 是一个整型变量,可以对其执行 down 和 up 操作,也就是常见的 P 和 V 操作。 -- **down** : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,将进程睡眠,等待信号量大于 0; -- **up** :对信号量执行 +1 操作,并且唤醒睡眠的进程,让进程完成 down 操作。 +- **down** : 如果信号量大于 0 ,执行 -1 操作;如果信号量等于 0,进程睡眠,等待信号量大于 0; +- **up** :对信号量执行 +1 操作,唤醒睡眠的进程让其完成 down 操作。 down 和 up 操作需要被设计成原语,不可分割,通常的做法是在执行这些操作的时候屏蔽中断。 @@ -536,7 +536,7 @@ void test(i) { // 尝试拿起两把筷子 - C 矩阵:每个进程所拥有的资源数量,每一行都代表一个进程拥有资源的数量 - R 矩阵:每个进程请求的资源数量 -进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P1 可以执行,执行后释放 P1 拥有的资源,A = (4 2 2 2) ,P2 也可以执行。所有进程都可以顺利执行,没有死锁。 +进程 P1 和 P2 所请求的资源都得不到满足,只有进程 P3 可以,让 P3 执行,之后释放 P3 拥有的资源,此时 A = (2 2 2 0)。P2 可以执行,执行后释放 P2 拥有的资源,A = (4 2 2 1) 。P1 也可以执行。所有进程都可以顺利执行,没有死锁。 算法总结如下: @@ -666,7 +666,7 @@ void test(i) { // 尝试拿起两把筷子

-进程运行时,先将 7,0,1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 +进程运行时,先将 7, 0, 1 三个页面装入内存。当进程要访问页面 2 时,产生缺页中断,会将页面 7 换出,因为页面 7 再次被访问的时间最长。 ### 2. 先进先出(FIFO) @@ -678,7 +678,7 @@ void test(i) { // 尝试拿起两把筷子 虽然无法知道将来要使用的页面情况,但是可以知道过去使用页面的情况。LRU 将最近最久未使用的页面换出。 -可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶。这样,最近被访问的页面的页面号总是在栈顶,而最近最久未使用的页面的页面号总是在栈底。 +可以用栈来实现该算法,栈中存储页面的页面号。当进程访问一个页面时,将该页面的页面号从栈移除,并将它压入栈顶。这样,最近被访问的页面总是在栈顶,而最近最久未使用的页面总是在栈底。

@@ -696,7 +696,7 @@ Clock 页面置换算法需要用到一个访问位,当一个页面被访问 当多个进程同时请求访问磁盘时,需要进行磁盘调度来控制对磁盘的访问。磁盘调度的主要目标是使磁盘的平均寻道时间最少。 -### 1. 先来先服务(FCFS, First Come First Serverd) +### 1. 先来先服务(FCFS, First Come First Served) 根据进程请求访问磁盘的先后次序来进行调度。优点是公平和简单,缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。