1、计算机操作系统,回顾,2,进程与线程,第,章,本章目标,掌握进程的概念,掌握进程调度的原理,掌握进程通信机制,了解线程的概念,什么是进程,什么是进程,进程是一个可并发执行的具有独立功能的程序关于某个数据集合的一次执行过程,也是操作系统进行资源分配和保护的基本单位。简单的说:程序的一次执行就是一个进程。,进程的特性,一个程序可以派生多个进程。 多个不同程序运行时,也会有多个相对应进程与其对应。 进程是动态的,有始有终,有生命周期,有进程状态变化。,进程与程序的区别,程序是“静止”、无生命的,进程是“活动”的。 程序可以脱离机器长期保存,而进程是执行着的程序。 程序不具有并发特征,不占系统资源,进
2、程则相反,并受到其他进程的制约和影响。 一个程序可对应多个进程。,进程的三种基本状态,运行状态就绪状态等待状态,进程状态的变迁,进程调度的概念,进程调度也称为处理机调度,它协调和控制各进程对CPU的使用。相应的进程调度程序可叫分配程序或低级调度程序。,进程调度算法,先来先服务,只考虑进程进入就绪队列的先后,而不考虑它的下一个CPU周期的长短及其他因素。,进程就绪队列,进程就绪队列,先来先服务举例,设P1占CPU时间为24ns,P2为3ns,P3为3ns。 则执行情况如下所示:,最短周期优先法,将周期短的进程放在前面,长的放在后面。,其他算法,优先级法:队列中优先级最高的进程投入运行,而不管CP
3、U周期的长短和其他因素。 轮转法:按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各进程机会均等的调度方法。 多队列反馈法:把就绪进程按优先级排成多个队列,同队列的进程具有相同的时间片。高优先级队列的时间片比低优先级队列的小。,死锁,进程通信,共享存储原理图,进程控制块,进程控制块(PCB)是描述进程名字、状态、程序段与数据段的数据结构。,线程的概念,线程是进程的一个实体,被系统独立调度和分配。除寄存器和栈等,本身基本不拥有系统资源。一个线程可以创建和撤销另一个线程; 同一进程中的多个线程之间可以并发执行; 线程同样有就绪、阻塞和执行三种基本状态。,线程与进程的比较,
4、线程是调度和分配的基本单位,而进程是资源拥有的基本单位; 进程间可并发执行,进程中的线程亦可并发执行; 进程的调度与切换都是由操作系统内核完成,而线程则既可由操作系统内核完成,也可由用户程序进行。,Linux进程的属性,进程ID; 父进程和父进程的ID; 用户ID(UID)和所归属的组(GID); 进程状态:分为运行R、休眠S、僵尸Z; 进程执行的优先级; 进程所连接的终端名。,Linux进程管理工具,Ps:监视进程工具 ;Pgrep:通过程序的名字来查询进程的工具 ;kill:终止进程 ;top监视系统任务的工具 。,CPU调度实例,实例说明,功能是模拟CPU的调度,调度策略为基于动态优先级
5、的调度策略。实例是使用C语言实现,可以在多种编译工具上进行调试(比如vc6.0,turbo c等)。,实例目的,强调编写代码规范; 加深理解操作系统的CPU调度策略; 掌握分析方法:流程图,伪代码,N-S; 掌握用c语言开发项目的思路; 掌握测试方法; 学会书写相关文档。,模块设计,void main():CPU调度主函数 void jobSchedule():进程调度 void initJobs():初始化进程控制块列表 void OSRun():模拟操作系统的运行 PCB * createJob():进程创建 void showJobinfo(PCB *job):显示进程信息 void d
6、oJob(PCB *job):运行指定的进程 int random(int imaxvalue):生成随机整数,CPU调度流程图,进程调试功能模块的流程图,进程调度功能模块的N-S图,进程调度功能模块的伪代码2-1,void jobSchedule()int i;# if DEBUGprintf(“now step into jobSchedule function n”);# endifCURPCB = null;for(遍历进程列表)if(进程列表项不为空)释放进行所占空间;进程列表项置为空;continue; CURPCB指向进程;转下一页 ,进程调度功能模块的伪代码2-2,void jobSchedule() if(CURPCB不为空)for(遍历系统进程列表)if(进程列表项不为空)CURPCB指向当前遍历到的进程;elseSYS_RUN_FLAG = 0; ,功能模块测试,测试方式1:黑盒子测试 手工构造进程列表,输出被选中的进程信息测试方式2:白盒子测试 用vc6.0 工具,设置断点,逐步跟踪,观察变量,条件判断语句的流程等。,总结,习题,作业,