PCB(程序控制块)
PCB本质为一个结构体(eg:Linux中的PCB):
struct task_struct{
...
unsigned short uid; // 用户标识
int pid; // 进程标识
int processor;//标识用户正在使用的CPU,以支持对称多处理机方式
...
volatile long state; // 标识进程的状态
long prority; // 表示进程的优先级
unsighed long rt_prority;//表示实时进程的优先级,对于普通进程无效
long counter//进程动态优先级计数器,用于进程轮转调度算法
unsigned long flags;
unsigned long policy;//进程调度策略
...
struct task_struct *next_task, *prev_task;
struct task_struct *next_run,*prev_run;
struct task_struct *p_opptr,*p_pptr,*p_cptr,*pysptr,*p_ptr;
...
};
就绪(Ready)
状态:当进程已分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。执行(Running)
状态:进程已获得CPU,其程序正在执行。单处理机系统中,只有一个进程处于执行状态,多处理机系统中,则有多个进程处于执行状态。阻塞(Block)
状态:正在执行的进程由于发生某事件而暂时无法继续执行时,便放弃处理机而处于暂停状态,把这种暂停状态称为阻塞状态,有时也称为等待状态。根据阻塞原因,系统中设置多个阻塞队列。创建
状态:如果进程所需资源尚不能得到满足,如无足够的内存空间,创建工作将无法完成,进程不能被调度,此时的进程状态为创建状态。终止
状态:一个进程到达了自然结束点,或者出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止状态。原语是由若干条指令组成的,用于完成一定功能的一个过程。是“原子操作”,即一个操作中的所有动作要么全做,要么全不做,换言之,是一个不可分割的基本单位,在执行过程中不允许被中断。
外界干预并非指在本进程运行中出现了异常事件,而是指进程因外界的请求而终止运行。
sleep()
进入休眠wakeup()
,将等待该事件的进程唤醒。suspend()
将指定进程挂起或处于阻塞状态的进程挂起。active()
将指定进程激活。active()
将指定进程激活: 时机:假如采用的是抢占调度策略,则每当有新进程进入就绪队列时,都应检查是否要进行重新调度。
创建、终止(自己)、挂起(自己)、激活、阻塞、唤醒都可能会产生新的调度。
进程同步机制的主要任务,是对多个相关进程在执行次序上进行协调,使并发执行的诸进程之间能按照一定的规则(或时序)共享系统资源,并能很好的相互合作,从而使程序的执行具有可再现性。