为了便于查找,系统把所有的PCB用适当的方式组织起来,一般有以下三种形式
(1)线性方式
(2)链接方式
(3)索引方式
优点:管理简单,不需要额外的开销,容易实现。
缺点:限定了最大进程数目;降低调度效率,挑选一个适合运行的PCB须对表项扫描,平均要花费查半个PCB表长的时间;不适合频繁进程调度。
早期的UNIX系统就是采用这种方式。
>就绪队列
>阻塞队列:根据不同的阻塞原因组织成多个阻塞队列
等待磁盘I/0队列
管理方便,PCB进程数目不受限制,使用灵活,检索速度和内存使用效率可以提高
动态分配内存的算法比较复杂;队列的操作(如挂链,摘链)也花费时间
用索引表记载进程的PCB地址
相同状态的进程在同一索引表中;
不同状态的,分别设置各自的PCB索引表
索引方式是线性表方式的改进,克服了线性表的缺点,检索速度快
通常须采用多张索引表,增加所占内存空间;加大管理难度
进程图(进程家族图)--Process Graph
(1)系统初始化:当开机引导OS时,会创建许多进程
(2)派生新进程:应用进程利用系统调用创建一个或多个进程,使新进程以并发方式完成特定任务,
(3)用户请求:为完成用户提出的某些请求
(4)调度新作业:批处理系统中为每个提交的作业创建相应的进程
PCB是进程存在的唯一标识,所以创建一个进程的主要任务是为其建立一个PCB。
使用创建原语创建进程的过程
UNIX/Linux中的fork()系统调用实现进程创建功能。
(1)正常终止
(2)异常终止
(3)外部干扰:进程应外界的请求而终止运行
处于运行状态的进程,在其运行过程中期待某一事件发生,当被等待的事件还没有发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态。
当某进程期待的事件已经到来时,唤醒进程
处于阻塞状态的进程不能唤醒自己,必须由它的合作进程用唤醒原语唤醒它。
唤醒原语执行过程如下:
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!