进程
进程本质上是正在执行的一个程序。进程基本上是容纳运行一个程序所需要的所有信息的容器。 进程的作用:在许多应用中同时发生着多种活动,其中某些活动随着时间的推移会被阻塞,通过将这些应用程序分解成可以准并行运行的多个顺序进程,程序设计模型会变得更简单。我们不必考虑中断,定时器和上下文切换。
进程模型
在进程模型中,计算机上所有运行的软件,通常也包括操作系统,被组织成若干个顺序进程,简称进程。包括程序计数器、寄存器和变量的当前值。 一个进程是某种类型的一个活动,他有程序、输入、输出及其状态。
进程创建
4种主要导致进程创建的事件:
- 系统初始化。
- 正在运行的程序执行创建进程的系统调用。
- 用户请求创建一个新进程
- 一个批处理作业的初始化 在UNIX系统中,只有一个系统调用可以用来创建新的进程:fork。这个系统调用会创建一个与调用进程相同的副本。子进程接着执行execve或一个类似的系统调用,一修改其内存映射并运行一个新程序。 在UNIX系统中,进程创建后,父进程和子进程有各自的地址空间。内存通过写时复制共享。
进程终止
4种主要导致进程终止的事件
- 正常退出(自愿的)。
- 出错退出(自愿的)。
- 严重错误(非自愿)。
- 被其他进程杀死(非自愿)。 UNIX中调用exit通知操作系统进程终止。
进程的层次结构
进程只有以一个父进程,但可以有零个、一个、两个、或多个子进程。
进程状态
尽管每个进程是一个独立的实体,有自己的程序计数器和内部状态。 进程有三个状态:
- 运行中(该时刻程序实际在用CPU)
- 就绪态(可运行,但因为其他进程正在运行而暂时停止)
- 阻塞态(除非某种外部事件发生,否则进程不能运行) 操作系统的底层是调度程序,在它上面有许多进程,进程的状态由调度程序控制
进程的实现
操作系统维护着进程表,每一个进程表项是进程控制块。进程控制块包括程序计数器、堆栈指针、内存分配状况、所打开文件的状态、账号和调度信息,以及其他在进程由运行态转换到就绪态或阻塞态时必须保存的信息,从而保证该进程随后能再次启动,就像从未被中断过。
多道程序设计模型
假设进程是独立的,CPU利用率为1减p的n次方(p为一个进程等待I/O操作的时间与其停留在内存中时间的比,n为多道程序设计的道数) 进程是独立的假设是不成立的,更精准的模型应该用排队论模型。