📄 00000002.htm
字号:
↓ ┃ <BR> ┏━━━━━━━━┓ ┃ <BR> ┃ 取出就绪进程 ┃ ┃ <BR> ┗━━━┳━━━━┛ ┃ <BR> ↓ ┃ <BR> ┏━━━━━━━━┓ ┃ <BR> ┃ 将本进程放入 ┃ ┃ <BR> ┃ 就绪队列 ┃ ┃ <BR> ┗━━━┳━━━━┛ ┃ <BR> ↓ ┃ <BR> ┏━━━━━━━━┓ ┃ <BR> ┃ 运行取出的 ┃ ┃ <BR> ┃ 就绪进程 ┃ ┃ <BR> ┗━━━┳━━━━┛ ┃ <BR> ┃←━━━━━━━━━┛ <BR> ↓ <BR> ┏━━━━━━━━┓ <BR> ┃ 恢复中断状态 ┃ <BR> ┗━━━┳━━━━┛ <BR> ↓ <BR> <BR> Sleep函数可以使当前进程转入阻塞态,并放弃CPU,直到被另一个进程唤醒,把它放 <BR>回就绪进程队列.Sleep函数的执行过程是: <BR> <BR> ┏━━━━━━━━┓ <BR> ┃ 当前进程状态 ┃ <BR> ┃ 设为阻塞态 ┃ <BR> ┗━━━┳━━━━┛ <BR> ┏━━━━━━→┃ <BR> ┃ ↓ <BR> ┃ ━━━━━━━━━ N <BR> ┃ 就绪进程队列 ━━━━┓ <BR> ┃ 为空 ┃ <BR> ┃ ━━━━━━━━━ ┃ <BR> ┃ ┃ Y ┃ <BR> ┃ ↓ ┃ <BR> ┃ ┏━━━━━━━━┓ ┃ <BR> ┃ ┃ 机器时钟前进 ┃ ┃ <BR> ┃ ┃ 直到一个 ┃ ┃ <BR> ┃ ┃ 中断发生 ┃ ┃ <BR> ┃ ┗━━━┳━━━━┛ ┃ <BR> ┃ ┃ ┃ <BR> ┗━━━━━━━┛ ┃ <BR> ┏━━━━━━━━━━━┛ <BR> ↓ <BR> ┏━━━━━━━━┓ <BR> ┃ 取出就绪进程 ┃ <BR> ┗━━━┳━━━━┛ <BR> ↓ <BR> ┏━━━━━━━━┓ <BR> ┃ 运行取出的 ┃ <BR> ┃ 就绪进程 ┃ <BR> ┗━━━┳━━━━┛ <BR> ↓ <BR> <BR> 在没有就绪进程时,就把时钟前进到一个中断发生的时刻,让中断发生,这是因为在 <BR>没有进程占用CPU时,只有中断处理程序可能唤醒一个进程,并把它放入就绪进程队列. <BR> <BR> 进程要等到本进程被唤醒后,并且又被进程调度模块调上CPU时,才会从Sleep函数 <BR>返回.有趣的是,新取出的就绪进程有可能就是这个要睡眠的进程.例如,如果系统中只 <BR>有一个A进程,A进程在读磁盘的时候会进入睡眠,等待磁盘操作完成.因为这时只有一个 <BR>进程,所以A进程不会被调下CPU,只授循环语句中等待中断.当磁盘操作完成时,磁盘会 <BR>发出一个磁盘读操作中断,此中断将唤醒A进程,把它放入就绪队列.这样,当A进程跳出 <BR>循环时,取出的就绪进程就是自己.这就要求进程的正文切换程序可以将一个进程切换 <BR>到自己,经分析,Nachos的进程正文切换程序SWITCH可以做到这一点,于是A进程实际上 <BR>并没有被调下CPU,而是继续运行下去了. <BR> <BR> <BR>-- <BR>m※ 来源:.鼓浪听涛站 bbs.xmu.edu.cn.[FROM: <A HREF="mailto:mysu@JingXian.xmu.ed]">mysu@JingXian.xmu.ed]</A> <BR> <BR>-- <BR>※ 来源:·BBS 水木调试站 Leeward.lib.tsinghua.edu.cn·[FROM: 166.111.68.98] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -