进程实现

226 阅读3分钟

进程

进程本质上是正在执行的一个程序。进程基本上是容纳运行一个程序所需要的所有信息的容器。 进程的作用:在许多应用中同时发生着多种活动,其中某些活动随着时间的推移会被阻塞,通过将这些应用程序分解成可以准并行运行的多个顺序进程,程序设计模型会变得更简单。我们不必考虑中断,定时器和上下文切换。

进程模型

在进程模型中,计算机上所有运行的软件,通常也包括操作系统,被组织成若干个顺序进程,简称进程。包括程序计数器、寄存器和变量的当前值。 一个进程是某种类型的一个活动,他有程序、输入、输出及其状态。

进程创建

4种主要导致进程创建的事件:

  1. 系统初始化。
  2. 正在运行的程序执行创建进程的系统调用。
  3. 用户请求创建一个新进程
  4. 一个批处理作业的初始化 在UNIX系统中,只有一个系统调用可以用来创建新的进程:fork。这个系统调用会创建一个与调用进程相同的副本。子进程接着执行execve或一个类似的系统调用,一修改其内存映射并运行一个新程序。 在UNIX系统中,进程创建后,父进程和子进程有各自的地址空间。内存通过写时复制共享。

进程终止

4种主要导致进程终止的事件

  1. 正常退出(自愿的)。
  2. 出错退出(自愿的)。
  3. 严重错误(非自愿)。
  4. 被其他进程杀死(非自愿)。 UNIX中调用exit通知操作系统进程终止。

进程的层次结构

进程只有以一个父进程,但可以有零个、一个、两个、或多个子进程。

进程状态

尽管每个进程是一个独立的实体,有自己的程序计数器和内部状态。 进程有三个状态:

  1. 运行中(该时刻程序实际在用CPU)
  2. 就绪态(可运行,但因为其他进程正在运行而暂时停止)
  3. 阻塞态(除非某种外部事件发生,否则进程不能运行) 操作系统的底层是调度程序,在它上面有许多进程,进程的状态由调度程序控制

进程的实现

操作系统维护着进程表,每一个进程表项是进程控制块。进程控制块包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过。

多道程序设计模型

假设进程是独立的,CPU利用率为1减p的n次方(p为一个进程等待I/O操作的时间与其停留在内存中时间的比,n为多道程序设计的道数) 进程是独立的假设是不成立的,更精准的模型应该用排队论模型。