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.实时式:满足截止时间;可预测性;