现代操作系统 第2章 进程与线程

2.1 进程

进程:正在执行的程序的实例;

进程退出原因:

1.正常退出;

2.出错退出;(自愿异常处理)

3.严重错误;(内存溢出或引用不当、除0、非法指令)

4.被杀死;

进程层次结构:

1.Windows没有层次概念;

2.进程和其所有子女组成进程组;

进程三态:

1.运行态;(占用CPU)

2.就绪态;(可运行,等待调度)

3.阻塞态;(等待外部事件)

进程表(进程控制块):

关键字段:

1.进程管理字段:寄存器、计数器、状态字、ID等;

2.存储管理:堆栈指针、数据段、正文段;

3.文件管理:根目录、工作目录;

中断:

中断发生时,将数据压入堆栈,装载中断向量,设置新的堆栈;

多道程序设计:

IO与CPU占用时间比为p,n个进程时,CPU利用率为=1-p^n;

2.2 线程

每个进程有一个地址空间和控制线程;

将应用程序分解为可以并行运行的顺序线程;

特点与使用原因:

1.多个并行实体共享同一个地址空间和数据;

2.比线程轻量级,更快的创建和撤销;

3.对于大量计算和IO的应用,多线程可以加快速度;

线程模型:

进程:把相关资源集中(地址、变量),易于管理;

线程:被调度的实体,有程序计数器,保存当前工作变量,还有寄存器、堆栈;

线程引入问题:

1.fork是否复制线程;

2.共享文件冲突;

线程实现:

1.用户空间实现

需要独立维护专用的线程表;

切换快;调度算法可定制;较好的扩展性;

缺点:任何的阻塞系统调用会阻塞其他的线程;还有页面故障也会阻塞;靠让出CPU来让别的线程获得调度;

2.内核线程

创建和撤销的代价大;以系统调用的形式实现;

2.3 进程间通信

解决问题:

1.信息传递给另一个进程;

2.关键活动不交叉;

3.执行顺序;

临界区:

定义:多个进程共享的程序段;

互斥:不能多个进程同时使用共享内存或文件;

实现互斥的方案:

1.屏蔽中断,CPU不会切换;

2.锁变量;

3.严格轮换,自旋锁;

4.peterson;

睡眠:

信号量:

解决生产者消费者问题;互斥与同步;需要计数功能;

互斥量:

不需要计数功能;两态,信号量的简化版本;

条件变量:

通常与互斥量一起使用;

管程:

任何时刻只有一个活跃进程;第二个进程被挂起;

消息传递:

屏障:

用于进程组而不是双进程的生产者消费者模型;

每个阶段结尾安放屏障,知道所有进程达到屏障;

2.4 调度

定义:选择下一个要运行的程序;

合理的调度算法能提升性能和用户满意度;

进程切换的代价:用户态切换到内核态;保存当前进程的状态;运行调度算法;装载新进程;

进程分类:IO密集型和CPU密集型;(随着CPU性能提高,越多的进程倾向于IO密集型)

何时调度:

1.创建进行;

2.进程结束;

3.进程阻塞;

3.IO中断发生;

调度算法定义:

非抢占式:直到进程运行到阻塞或主动让出CPU才调度别的进程;

抢占式:进程运行某个固定时间段的最大值;

分类:

1.批处理:吞吐量(每小时完成的作业量)、周转时间、CPU利用率;

具体算法:

1.先来先服务。简单易实现,同时运行IO和CPU密集型程序时效率低;

2.最短作业优先;

3.最短剩余时间优先;

2.交互式:响应时间;均衡;

具体算法:

1.轮转(RR)。时间片;进程切换过多,CPU效率低;

2.优先级调度;

3.多级队列;

4.最短进程优先;

3.实时式:满足截止时间;可预测性;

猜你喜欢

转载自blog.csdn.net/shhchen/article/details/88555292