进程
1.进程模型:在进程模型中,计算机上所有可运行的软件,通常也包括操作系统(开机后操作系统会启动很多自己的进程的),被组织成若干顺序进程,简称进程。一个进程就是一个正在执行程序的实例,包括程序计数器,寄存器和变量的当前值。
2.进程状态:
3.CPU的利用率:CPU利用率=1-pn(pn代表p的n次方,p为进程等待I/O操作的时间与其停留在内存中的时间比,n表示内存中同时又n个进程。p的定义限定了p在内存中或者p是一个进程且此时p未获得CPU,所以pn就表示CPU空转(进程都在等待I/O)的概率)。
4.竞争条件:两个或多个进程读写某些共享数据,最后的结果取决于进程运行的精确时序,称为竞争条件。这导致了结果的不确定性,最终得不到想要的结果。避免竞争条件,关键是要找出某种途径来阻止多个进程同时读写共享的数据,即进程间需要互斥,也就是以某种手段确保当一个进程在使用一个共享变量或文件时,其他进程不能做同样的操作。对共享内存进行访问的程序片段称作临界区(域),避免竞争条件也就是使两个进程不可能同时处于临界区中。
5.忙等待:连续测试一个变量直到某个值出现为止,称为忙等待。
6.信号量:信号量是为解决生产者-消费者问题而引入的一个用于累计唤醒次数的整型变量。取值可以为0(表示没有保存下来的唤醒操作)或者为正值(表示有一个或多个唤醒操作)。信号量有两种操作:down(检查值后若值大于0则将其减1,若为0进程将睡眠进入阻塞状态)和up(对信号量的值增1),检查信号量数值,修改变量值以及可能发生的睡眠或唤醒操作均为一个单一的,不可分割的原子操作(即要么都不间断的执行,要么都不执行,不会因为某个进程而阻塞)。实现互斥需要三个信号量:一个称为full,用来记录充满的缓冲槽数目;一个称为empty,记录空的缓冲槽总数;一个称为mutex,用来确保生产者和消费者不会同时访问缓冲区。full的初值为0,empty的初值为缓冲区中槽的数目,mutex初值为1。供两个或多个进程使用的信号量,其初值为1,保证同时只有一个进程可以进入临界区,称作二元信号量。如果每个进程在进入临界区前都执行一个down操作,并在刚刚推出时执行一个up操作,就能够实现互斥。信号量实现同步时full和empty用来保证某种事件的顺序发生或不发生,保证当缓冲区满的时候生产者停止运行,以及当缓冲区空的时候消费者停止运行。
7.管程:一个管程是一个由过程,变量及数据结构等组成的一个集合,它们组成一个特殊的模块或软件包。管程的特性是任一时刻管程中只能有一个活跃进程,这一特性使管程能有效的完成互斥。当一个进程调用管程过程时,该过程中的前几条指令将检查在管程中是否有其他的活跃进程。如果有,调用进程将被挂起,直到另一个进程离开管程将其唤醒,如果没有活跃进程在使用管程,则该调用过程可以进入。
8.消息传递:也用于进程通信,有两条原语send和receive,send向一个指定的目标发送一条信息,receive从一个给定的源(或者任意源)接收一条信息。如果没有消息可用,则接收者可能被阻塞,直到一条消息到达,或者,带着一个错误码立即返回。
9.屏障:屏障用于进程组的同步机制中,当一个进程到达屏障时,它就被屏障阻拦,知道所有进程都到达该屏障为止。
10.调度:调度为了在两个或更多的处于就绪状态的进程中选择进入运行状态的进程。调度算法分为抢占式和非抢占式。在批处理系统中适合应用非抢占式算法(算法有先来先服务,最短作业优先,最短剩余时间优先),在交互式系统中适合应用抢占式算法(算法有轮转调度,优先级调度,多级队列,最短进程优先,保证调度,彩票调度,公平分享调度)。调度算法有两个共同目标,一是公平,即给每个进程公平的CPU份额,二是保持同的所有部分尽可能忙碌。