大纲
进程:
故事:
城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人家让你休息就休息,让你工作就工作,毕竟摊位不多,每个人都要占这个摊位来工作,城里要工作的人多着去了。
所以城管为了公平起见,它使用一种策略(调度)方式,给每个人一个固定的工作时间(时间片),时间到了就会通知你去休息而换另外一个人上场工作。
另外,在休息时候你也不能偷懒,要记住工作到哪了,不然下次到你工作了,你忘记工作到哪了,那还怎么继续?
有的人,可能还进入了县城(线程)工作,这里相对轻松一些,在休息的时候,要记住的东西相对较少,而且还能共享城里的资源。
例如我们的windows系统
程序和进程的联系
进程是动态的,程序是静态的,程序是有序代码的集合;进程是程序的执行,进程有核心态 /用户态
中断保存 刚才的进程信息,切换下一个进程
进程的特点(动态,并行并发,独立,制约)
首先,并发和并行
动态性: 可动态创建结束进程
独立性:每个进程都不收影响
制约性:因访问共享进程同步产生制约
进程控制块
控制信息
pcb的组织方式:
链表的删除和插入效率大
索引代价较高
进程的生命周期管理
进程创建 :首先操作系统要创建第一个进程,此进程在创建其他新的进程
进程变成阻塞态是由自身来发起的
02 终止进程
进程可以有 3 种终止方式:正常结束、异常结束以及外界干预(信号 kill
掉)。
当子进程被终止时,其在父进程处继承的资源应当还给父进程。而当父进程被终止时,该父进程的子进程就变为孤儿进程,会被 1 号进程收养,并由 1 号进程对它们完成状态收集工作。
终止进程的过程如下:
-
查找需要终止的进程的 PCB;
-
如果处于执行状态,则立即终止该进程的执行,然后将 CPU 资源分配给其他进程;
-
如果其还有子进程,则应将该进程的子进程交给 1 号进程接管;
-
将该进程所拥有的全部资源都归还给操作系统;
-
将其从 PCB 所在队列中删除;
03 阻塞进程
当进程需要等待某一事件完成时,它可以调用阻塞语句把自己阻塞等待。而一旦被阻塞等待,它只能由另一个进程唤醒。
阻塞进程的过程如下:
-
找到将要被阻塞进程标识号对应的 PCB;
-
如果该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行;
-
将该 PCB 插入到阻塞队列中去;
04 唤醒进程
进程由「运行」转变为「阻塞」状态是由于进程必须等待某一事件的完成,所以处于阻塞状态的进程是绝对不可能叫醒自己的。
如果某进程正在等待 I/O 事件,需由别的进程发消息给它,则只有当该进程所期待的事件出现时,才由发现者进程用唤醒语句叫醒它。
唤醒进程的过程如下:
-
在该事件的阻塞队列中找到相应进程的 PCB;
-
将其从阻塞队列中移出,并置其状态为就绪状态;
-
把该 PCB 插入到就绪队列中,等待调度程序调度;
进程的阻塞和唤醒是一对功能相反的语句,如果某个进程调用了阻塞语句,则必有一个与之对应的唤醒语句。
进程挂起:
pcb有就绪对列,也有阻塞队列。