乐趣区

关于操作系统:操作系统虚拟化进程

概念

过程的非正式定义非常简单:过程就是运行中的程序。程序自身是没有生命周期的,它只是存在磁盘下面的一些指令(也可能是一些静态数据)。人们经常心愿同时运行多个程序,一个失常的零碎可能会有上百个过程同时在运行。

操作系统通过虚拟化(virtualizing)CPU 来提供这种假象。通过让一个过程只运行一个工夫片,而后切换到其余过程,操作系统提供了存在多个虚构 CPU 的假象。这就是时候共享(time sharing)CPU 技术,容许用户如愿运行多个并发过程。潜在的开销就是性能损失,因为如果 CPU 必须共享,每个过程的运行就会慢一点。

形象:过程

操作系统为正在运行的程序提供的形象,就是所谓的过程(process)。正如咱们下面所说的,一个过程只是一个正在运行的程序。在任何时刻,咱们都能够盘点它在执行过程中拜访或影响的零碎的不同局部,从而概括一个过程。

为了了解形成过程的是什么,咱们必须了解它的机器状态(machine state):程序在运行时能够读取或更新的内容。过程的机器状态有一个显著组成部分,就是它的内存。指令存在内存中,正在运行的程序读取和写入的数据也在内存中。因而过程能够拜访的内存(称为地址空间,address space)是该过程的一部分。

过程的机器状态的另一部分是寄存器。许多指令明确地读取或更新寄存器,因而,它们对于执行该过程很重要。例如,程序计数器(ProgramCounter,PC)(有时称为指令指针,Instruction Pointer 或 IP)通知咱们程序以后正在执行哪个指令;相似地,栈指针(stack pointer)和相干的帧指针(frame pointer)用于治理函数参数栈、局部变量和返回地址。

最初,程序也常常拜访长久存储设备。此类 I / O 信息可能蕴含以后关上的文件列表。

过程创立

操作系统运行程序必须做的第一件事是将代码和所有静态数据(例如初始化变量)加载(load)到内存中,也即加载到过程的地址空间中。程序最后以某种可执行格局驻留在磁盘上。因而,将程序和静态数据加载到内存中的过程,须要操作系统从磁盘读取这些字节,并将它们放在内存中的某处。

将代码和静态数据加载到内存后,操作系统在运行此过程之前还须要执行其余一些操作。必须 为程序的运行时栈(run-time stack 或 stack)调配一些内存

操作系统也可能为程序的堆(heap)调配一些内存。在 C 程序中,堆用于显式申请的动态分配数据。程序通过调用 malloc()来申请这样的空间,并通过调用 free()来明确地开释它。

操作系统还将执行一些其余初始化工作,特地是与输出 / 输入(I/O)相干的工作。例如,在 UNIX 零碎中,默认状况下每个过程都有 3 个关上的文件描述符(file descriptor),用于规范输出、输入和谬误。

通过将代码和静态数据加载到内存中,通过创立和初始化栈以及执行与 I / O 设置相干的其余工作,OS 当初为程序执行搭好了舞台。而后它有最初一项工作:启动程序,在入口处运行,即 main()。通过跳转到 main()例程,OS 将 CPU 的控制权转移到新创建的过程中,从而程序开始执行。

过程状态

简而言之,过程能够处于以下 3 种(稳固)状态之一。

  • 运行(running):在运行状态下,过程正在处理器上运行。这意味着它正在执行指令。
  • 就绪(ready):在就绪状态下,过程已筹备好运行,但因为某种原因,操作系统抉择不在此时运行。
  • 阻塞(blocked):在阻塞状态下,一个过程执行了某种操作,直到产生其余事件时才会筹备运行。一个常见的例子是,当过程向磁盘发动 I / O 申请时,它会被阻塞,因而其余过程能够应用处理器。

数据结构

操作系统是一个程序,和其余程序一样,它有一些要害的数据结构来跟踪各种相干的信息。例如,为了跟踪每个过程的状态,操作系统可能会为所有就绪的过程保留某种过程列表(process list),以及跟踪以后正在运行的过程的一些附加信息。操作系统还必须以某种形式跟踪被阻塞的过程。当 I / O 事件实现时,操作系统应确保唤醒正确的过程,让它筹备好再次运行。

操作系统追踪过程的一些重要信息。对于进行的过程,寄存器上下文将保留其寄存器的内容。当一个过程进行时,它的寄存器将被保留到这个内存地位。通过复原这些寄存器(将它们的值放回理论的物理寄存器中),操作系统能够复原运行该过程。

除了运行、就绪和阻塞之外,还有其余一些过程能够处于的状态。有时候零碎会有一个初始(initial)状态,示意过程在创立时处于的状态。另外,一个过程能够处于已退出但尚未清理的最终(final)状态(在基于 UNIX 的零碎中,这称为僵尸状态)。

注:存储对于过程的信息的个体构造称为过程管制块(Process Control Block,PCB)。

退出移动版