现代操作系统第二章进程与线程习题1
图 2-2 中给出了三个进程状态,在理论上,三个状态可以有六种转换,每个状态两个
但是,图中只给出了四种转换
有没有可能发生其他两种转换中的一个或两个A:从阻塞到运行的转换是可以想象的
假设某个进程在I/O 上阻塞,而且 I/O 结束,如果此时 CPU空闲,该进程就可以从阻塞态直接转到运行态
而另外一种转换(从阻塞态到就绪态)是不可能的
一个就绪进程是不可能做任何会产生阻塞的 I/O 或者别的什么事情
只有运行的进程才能被阻塞
假设要设计一种先进的计算机体系结构,它使用硬件而不是中断来完成进程切换
CPU需要哪些信息请描述用硬件完成进程切换的工作过程
A:应该有一个寄存器包含当前进程表项的指针
当I/O 结束时, CPU将把当前的机器状态存入到当前进程表项中
然后,将转到中断设备的中断向量,读取另一个过程表项的指针(服务例程),然后,就可以启动这个进程了
当代计算机中,为什么中断处理程序至少有一部分是用汇编语言编写的A:通常,高级语言不允许访问CPU硬件,而这种访问是必需的
例如,中断处理程序可能需要禁用和启用某个特定设备的中断服务,或者处理进程堆栈区的数据
另外,中断服务例程需要尽快地执行
(补充)主要是出于效率方面的考量
中断处理程序需要在尽量短的时间内完成所需的必要处理,尽量减少对线程 /程序流造成的影响,因此大部分情况下用汇编直接编写,跳过了通用编译过程中冗余的适配部分
中断或系统调用把控制转给操作系统时,为什么通常会用到与被中断进程的栈分离的内核栈A:内核使用单独的堆栈有若干的原因
其中两个原因如下:首先,不希望操作系统崩溃,由于某些用户程序不允许足够的堆栈空间
第二,如果内核将数据保留在用户空间,然后从系统调用返回,那么恶意的用户可能使用这些数据找出某些关于其它进程的信息
一个计算机系统的内存有足够的空间容