1、什么是进程?
操作系统最核心的概念就是进程,进程就是对一个正在运行的程序的抽象。在单核CPU中同一时刻只能有一个进程在运行,这种情况下的并行是伪并行,只是CPU在多个进程之间快速的切换造成并行的假象,这种快速的切换就称作多道程序设计。当然在多核心CPU中,能够实现真正的硬件并行。
2、进程的模型
在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序的进程,进程就是一个正在执行的程序的实例,包括程序计数器,寄存器以及变量的当前值。一个进程是某种类型的活动,其有程序,输入,输出和状态,进程之间的切换是由调度算法来实现的。要注意的是一个程序执行两次也就产生了两个进程。 虽然每个进程都有其程序计数器,但真正的物理程序计数器只有一个,在切换到某个进程时,操作系统会将当前进程的程序计数器装载到实际的物理程序计数器中,而当该进程执行结束或者暂停时,此时物理程序计数器内容就被保存到该进程的程序计数器中了。
注意:CPU在进程间快速切换,每个进程的执行时间是不确定的,对进程进行编程时不能对进程的时序做确定的假设!
3、创建进程
下面四种情况下会创建进程:
1、系统初始化;
2、执行了正在运行的进程所调用的进程创建系统调用;
3、用户请求创建进程;
4、一个批处理作业初始化;
进程可以分为:前台进程和后台进程,前台进程就是用于交互的,后台进程一般和用户没有特定的关系,实现某些专用功能,停留在后台处理电子邮件,Web网页,新闻,打印之类的活动的进程成为守护进程。
UNIX和Windwos中如何创建进程?
在UNIX中只要fork系统调用创建进程,这时系统调用会创建一个与调用进程相同的副本,父进程与子进程有相同的存储映像,同样的环境字符串和同样的打开文件,然后子进程执行sort。在Windows中调用CreateProcess即创建进程,也负责将正确的程序装入进程。
注意:在UNIX中子进程的初始地址空间是父进程的一个副本,但是是两个不同的地址空间,所以此时新创建的进程可以使用父进程的资源。在Windwos中从一开始父进程的地址空间和子进程的地址空间就是不同的。
4、终止进程
进程终止发生的条件:
1、正常退出;
2、出错退出;
3、严重错误;
4、被其他进程杀死;
一般进程最好是完成其工作,然后正常退出,正常退出能够保该进程的资源正常释放。UNIX中调用exit,在Windows中调用ExitProcess能够实现自愿退出,而杀死进程在UNIX中调kill,Windows中调用TerminateProcess来实现。
5、进程的层次结构
在UNIX中进程和其所有的子女以及后裔共同组成一个进程组。比如用户从键盘发出一个信号,信号送给当前与键盘相关的进程组中的所有成员,成员自己决定对信号的操作。但是在Windows中没有进程层次的概念,进程都是平等的,在创建进程的时候,父进程得到子进程的句柄,该句柄可以用来控制子进程, 但是父进程有权将这个句柄交由其他的进程。
6、进程的状态
进程有三种状态:运行状态,就绪状态,阻塞状态。
各个状态之前的转化方式如下:
7、进程的实现
为了实现进程模型,操作系统维护一张表格,或者成为一个结构数组,称为进程表。每一个进程占用一个进程表项目,该表项包含了进程状态的重要信息。包括程序计数器,堆栈指针,内存分配状况,打开文件状况,账号和调度信息,以及从运行状态,切换到就绪状态或者阻塞状态必须保存的信息,这样在重新获得CPU时间片能够继续执行,好像从未中断过一样。
8、多道程序设计模型
多道程序设计模型可以提高CPU的利用率。
备注:什么是批处理作业?
批处理系统,又名批处理操作系统。批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统。批处理操作系统分为单道批处理系统和多道批处理系统。批处理操作系统不具有交互性,它是为了提高CPU的利用率而提出的一种操作系统。这里就要涉及批处理调度问题,批处理作业调度问题要求对于给定的 n 个作业,制定最佳作业调度方案,使其完成时间和达到最小。