当前位置: 技术问答>linux和unix
关于进程调度实现的问题
来源: 互联网 发布时间:2014-11-22
本文导语: 我在研究了模拟进程调度的源代码(用C实现)后,发现分配释放处理机是由进程和调度程序配合实现的,也就是说:在具体的进程中添加一些中断代码(比如时间片中断),当进程运行到此处时如符合条件(如时间...
我在研究了模拟进程调度的源代码(用C实现)后,发现分配释放处理机是由进程和调度程序配合实现的,也就是说:在具体的进程中添加一些中断代码(比如时间片中断),当进程运行到此处时如符合条件(如时间片到),则跳出本进程,再执行调度程序,选择新的进程。
我的问题是:我觉得具体的进程应该是一个独立的实体,即不包含调度的因素,而调度完全由操作系统实现,当操作系统认为某个具体进程该中断时,就阻塞该进程,而将处理机分配给其他进程。
请问,这种想法是否正确。这样的调度思想该怎样实现?
我的问题是:我觉得具体的进程应该是一个独立的实体,即不包含调度的因素,而调度完全由操作系统实现,当操作系统认为某个具体进程该中断时,就阻塞该进程,而将处理机分配给其他进程。
请问,这种想法是否正确。这样的调度思想该怎样实现?
|
这是一个“操作系统”课的专业问题
各种不同的系统使用的方法不同的
如果你编写过dos程序,就应该知道,dos的著名的INT 21
这个中断就是系统调用
也就是说操作系统提供各种功能(例如往屏幕上写字母,读写文件等等)
应用程序就是通过反复的INT 21+参数调用这些功能
linux系统也有一个中断作为系统调用专用
当然dos是比较简单的单任务系统,也就是说,当系统调用开始
系统就保存当前的环境信息(例如各个寄存器的内容)然后一直执行中断
处理程序,直到结束,就好像我们写程序调用一个普通的函数一样
对于window(不包括3.1)和linux这样的系统,都是分时的多任务系统
系统内部同时有多个进程,操作系统根据他们的优先级给他们分配时间段
然后轮流执行(当然分配算法有多钟,例如抢占式),每个进程的进程控
制块里都记录着自己的时间,当时间片到了,就触发中断,CPU保存环境
去执行另一个活动的进程(注意:这里的进程不是挂起,是活的,可以看作
多个进程并发)
各种不同的系统使用的方法不同的
如果你编写过dos程序,就应该知道,dos的著名的INT 21
这个中断就是系统调用
也就是说操作系统提供各种功能(例如往屏幕上写字母,读写文件等等)
应用程序就是通过反复的INT 21+参数调用这些功能
linux系统也有一个中断作为系统调用专用
当然dos是比较简单的单任务系统,也就是说,当系统调用开始
系统就保存当前的环境信息(例如各个寄存器的内容)然后一直执行中断
处理程序,直到结束,就好像我们写程序调用一个普通的函数一样
对于window(不包括3.1)和linux这样的系统,都是分时的多任务系统
系统内部同时有多个进程,操作系统根据他们的优先级给他们分配时间段
然后轮流执行(当然分配算法有多钟,例如抢占式),每个进程的进程控
制块里都记录着自己的时间,当时间片到了,就触发中断,CPU保存环境
去执行另一个活动的进程(注意:这里的进程不是挂起,是活的,可以看作
多个进程并发)