分享免费的编程资源和教程

网站首页 > 技术教程 正文

计算机组成原理(36): 分时之一——进程

goqiw 2025-03-14 16:52:38 技术教程 3 ℃ 0 评论

建立一个虚拟机VM

目标:给每个程序一个自己的虚拟机“Virtual Machine”,程序并不知道其他的虚拟机。

1.1 进程(Process)

为了捕获正在运行的程序,我们创建一个称为“进程(Process)”的新抽象概念。进程包括运行程序时将使用的所有资源:

  • CPU硬件状态:寄存器R0,R1,…,R30中的值
  • 上下文(虚拟地址空间):包括代码(Code),数据值,堆栈(Stack)和从堆(Heap)动态分配的数据对象。在MMU的管理下,这一部分可以驻留在主内存中或驻留在辅助存储中。MMU的硬件状态取决于上下文编号(Context-Number)寄存器和页面目录(Page-Directory)寄存器,还包括位分层页面隐射分配的页面。
  • 程序计数器PC,Stack
  • 程序(w/shared code)
  • 虚拟I/O设备(virtual I/O device)的信息:如:在文件系统的哪里读写文件,与开放网络连接相关的状态和缓冲区,用户界面中的未决时间(如键盘字符单击和鼠标单击),依次类推。

上述所有信息被称作进程的“状态(State)”,每一个进程都有一个“状态”,通过捕获进程的状态可以了解其一切执行情况。

1.2 操作系统OS(Operation System)

有一个特殊的特权进程,称为操作系统OS(Operation System),在自己的内核模式(kernel-mode)上下文中运行。

  • 操作系统管理每个进程的所有簿记,安排定期运行的流程。
  • 操作系统将为进程提供各种服务,例如模拟每个进程的虚拟I/O设备处理实际的I/O:访问文件中的数据,建立网络连接,管理窗口系统和用户界面等等。
  • 要将运行模式从一个用户模式切换到另一个用户模式,操作系统将需要捕获并保存当前用户模式进程的“整个(entire)状态: (1) 其中一些已经存在于主内存中,因此我们就放在那里;(2) 其中一些可以在各种内核数据结构中找到;(3) 其中一些我们需要能够对存在于CPU和MMU中的各种硬件资源进行保存和还原。

为了成功实施进程,操作系统必须确保每个进程看起来像都在各自独立的“虚拟机”上运行。

每个进程一个虚拟机

我们的目标是在所有虚拟机之间有效共享一台物理机。

2.1 一台物理机的组成

CPU主存储器构成了计算机系统核心的计算引擎。

连接到CPU的是各种外围设备,外设“periphery”是连接到CPU的各种外围设备,指示的是CPU的周边硬件资源。包括:

  • 计时器(timer)会生成周期性的CPU中断,可用于触发周期性的操作。
  • 辅助存储为系统提供了大容量的非易失性存储器
  • 连接设备:与外界的联系也很重要,许多计算机都包括用于可移动设备的USB连接,提供有线或无线的网络连接。
  • 用户的输入输出设备:监视器,键盘和鼠标
  • 相机和麦克风:现在已成为计算机的标配

2.2 操作系统对物理机的管理

物理机由在特权内核上下文中运行的OS管理。操作系统处理与外围设备的低级接口,初始化并管理上下文等。

2.3 操作系统创建虚拟机

正是操作系统创建了每个进程都能看到的虚拟机,用户模式程序可以直接在物理处理器上运行,但它们的执行可能被计时器中断。通过计时器,使操作系统有机会保存当前进程的状态,然后运行下一个进程。

  • 操作系统通过MMU为每个进程提供独立的虚拟地址空间,而与其他进程无关。
  • 操作系统提供的虚拟外设将当前进程与其他进程共享的CPU物理外设的所有细节隔离开。
  • 窗口(Windows)的概念允许进程访问显示器像素的矩阵阵列,而不必担心窗口中的某些像素是否被其他窗口隐藏,也不必担心如何确保鼠标光标始终出现在任何正在显示的显示器顶部。
  • I/O事件(I/O events):进程无需直接访问I/O设备,每个进程都通过I/O事件(如键入字符,单击鼠标等生成的事件)访问I/O流。例如操作系统如何确定哪些类型的字符属于哪个进程,在大多数窗口系统中,用户单击窗口以指示拥有该窗口的进程当前具有键盘交点,并应该接收后续键入的任何字符。在显示器上单击鼠标的位置决定当前窗口属于哪个进程。
  • 所有这些都是用简单抽象的概念描述共享计算机外设的物理资源的细节
  • files:访问磁盘上的文件也是如此。操作系统提供了有用的抽象,使得每个文件看起来都是连续的、可增长的支持读写操作的字节数组。操作系统知道如何将文件映射到磁盘上的扇区池并处理坏的扇区,之后通过预读和写操作减少扇区碎片并提高吞吐量。
  • Sockets:对于网络,操作系统提供远程套接字的按顺序字节流的访问。它实现了适当的网络协议并对流进行打包,从而解决数据量大的传输问题,并解决传输过程中的丢失、错误或乱序的数据包。
  • SVCs:超级用户调用(Supervisor Calls),这是一种在OS中调用代码的受控访问过程调用。为了配置和控制这些虚拟服务,该进程使用超级用户调用与操作系统进行通信。每个虚拟服务的涉及和实现细节都超出了本篇的范围,如果感兴趣,请参阅操作系统。

一句话,操作系统为每个进程提供独立的虚拟机,并定期从运行一个进程切换到运行下一个进程

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表