操作系统中最核心的概念是进程,是对正在运行程序的一个抽象。
1.进程
每个控制逻辑流都是一个进程,由内核来调度与维护;因为进程有着独立的虚拟地址空间,想要和其他进程流通信,控制流必须使用某种显式的进程间通信机制IPC。
对于单核CPU而言,在某一个瞬间,CPU只能运行一个进程,多进程并发是CPU在进程间不断切换产生并行错觉,即实现伪并行。一个进程就是一个正在执行程序的实例。
由于CPU在各进程之间来回快速切换,每个进程执行其运算的速度是不确定的。而且当同一进程再次运行时,其运算速度通常也不可再现。所以,在对进程编程时不能对时序做任何想当然的假设。
进程和程序间的区别很微妙,程序只是进程的组成部分之一。一个进程是某种类型的一个活动,其有程序、输入、输出以及状态。单个处理器可以被若干进程共享。
值得注意的是:如果一个程序运行了两遍,则算做两个进程。因为操作系统能够使这两个进程共享代码,只有一个副本放在内存中。
1.1 进程的创建
4种主要事件会导致进程的创建:
1)系统初始化。
2)正在运行的程序执行了创建进程的系统调用。
3)用户请求创建一个新进程。
4)一个批处理作业的初始化。
从技术上看,新进程都是由于一个已存在的进程执行了一个用于创建进程的系统调用而创建。这个系统调用通知操作系统创建一个新进程,并且直接或者间接地指定在该进程中运行的程序。
进程之间特别是父进程和子进程之间有各自不同的地址空间。如果其中某个进程在其地址空间中修改了一个字,这个修改对其他进程而言是不可见的。在UNIX中,不可写的内存区域是可以共享的,可写的内存区域是不可以共享的(子进程通过写时复制的方式共享父进程的所有内存)。但是,对于一个新创建的进程而言,有可能共享其创建者的其他资源,如打开的文件等。在Windows中,父进程与子进程的地址空间从一开始就不同。
对于父子进程间的共享状态信息,进程有一个非常清晰的模型:共享文件表,但是不共享用户地址空间。进程拥有独立的地址空间既是优点也是缺陷。优点是:不会产生由于虚拟内存覆盖产生的错误;缺点是:独立的地址空间使得进程共享状态信息变得更加困难。为了共享信息,进程间通信机制开销很高。
1.2 进程的终止
进程终止的一般情形:
1)正常退出;
2)出错退出;
3)严重错误(非自愿);
4)被其他进程杀死(非自愿);
1.3 进程的状态
进程运行的三状种态:
1)运行态(实际占用CPU);
2)就绪态(可运行,由于其他进程正在运行而暂时停止);
3)阻塞态(除非某种外部事件发生,否则进程不能运行);
1.4 进程的实现
为了实现进程模型,操作系统维护着一个结构数组,即进程表。每个进程占用一个进程表项(进程控制块);该表项包含了进程状态的各种重要信息。
1.5 多道程序设计模型
采用多道程序设计可以提高CPU的利用率;
利用率公式如下:
从完全精确的角度考虑,由于进程不是独立的,更精确的模型应该用排队论构建。
网友评论