我正在研究操作系统和用户进程之间可能存在的不同关系。我看到了下面的图。它显示了操作系统功能执行的架构和用户进程。
1) 我想澄清一下图中标有 OS 功能的部分。这部分对于所有用户进程来说都完全相同吗?换句话说,这是每个进程访问的共享代码吗?
2) 进程切换函数(图中灰色部分)与操作系统函数之间的唯一区别是操作系统函数作为用户进程运行,而进程切换函数作为操作系统进程运行吗?为什么会有这样的区别?
附带的文字为图表提供背景信息:
“小型计算机(PC、工作站)操作系统的常见替代方案是在用户进程上下文中执行几乎所有操作系统软件。这种观点认为,操作系统主要是用户调用以执行各种功能的例程集合,在用户进程环境中执行。……在任何给定点,操作系统都在管理 n 个进程映像。……当发生中断、陷阱或监控调用时,处理器将处于内核模式,并将控制权传递给操作系统。要将控制权从用户程序传递给操作系统,需要保存模式上下文,并将模式切换到操作系统例程。但是,执行仍在当前用户进程中继续。因此,不会执行进程切换,而只是在同一进程内进行模式切换。”
(第 136 页,斯托林斯的《操作系统》)
答案1
在解释用户进程和操作系统/内核关系时,需要考虑很多方面。其中包括内存布局和地址空间、数据传输、处理器和执行级别/权限以及各种调度方案。
脱离上下文的图表很难准确解释。这张图是从哪里来的?这张图的附带文本是什么?这可能表示有关代码组织的内容,也可能表示有关进程调度的内容。
附录
引用的段落只起到了一点帮助。可能还有更多的文字可以解释这个图表。引用的段落解释了“进程切换”的方案不是执行”。关于进程切换的时间和原因的解释在哪里是表演?
操作系统维护每个进程的状态信息:寄存器的值、堆栈和虚拟内存;统称为“进程”的上下文。同样重要的是处理器安全/特权级别,即“模式”。
Stallings 提到,操作系统可以切换处理器的“进程”或“模式”。您引用的段落利用这些处理器状态作为(高效)处理系统调用、陷阱和中断的替代方法。也就是说,操作系统可以简单地在当前“进程”内执行“模式”切换(从用户模式到内核模式)来处理中断/陷阱/系统调用。现在每个进程都有分配足够堆栈空间的负担,以容纳系统中断/陷阱以及自己的需求。这应该部分回答了您的问题 2。
对于问题 1,物理内存中通常只有一个内核代码副本。因此“操作系统功能”将是共享代码。当然,进程必须处于内核模式才能获得执行内核代码的权限。