1. 进程与线程
1.1 进程
进程控制块(Process Control Block,PCB):使参与并发执行的每个程序(含数据)都能够独立运行,在操作系统中必须为之配置一个专门的数据结构,这个数据结构就叫PCB。
由程序段、相关的数据段和PCB构成了进程实体,简称进程。
定义:进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立(最小)单位。
进程特征:
- 动态性:进程的实质是进程实体的执行过程,动态性表现在“由创建而产生,由调度而执行,由撤销而消亡。”;
- 并发性:指多个进程实体同存于内存中,能在一段时间内同时运行。没有PCB的程序是不能参与并发执行的;
- 独立性:指进程实体是一个能独立运行、独立获取资源和独立接受调度的基本单位;
- 异步性:指进程是按异步方式运行的。
进程状态:进程一般处于以下3个基本状态之一,并且为了满足PCB对数据及操作的完整性要求以及增强管理的灵活性,有增加了两种常见状态(4和5)
- 就绪(Ready)状态:已经分配到除CPU之外的所有必要资源;
- 执行(Running)状态:已经获得CPU,正在执行;
- 阻塞(Block)状态:正在执行的进程无法继续执行的状态。
- 创建:1)申请一个空白PCB,并填写用于控制和管理进程的信息;2)分配运行时所需资源;3)转入就绪状态并插入就绪队列中;
- 终止:1)等待OS进行善后处理;2)将PCB清零,将PCB返回给OS。
1.2 线程
线程运行的三个状态:就绪、执行、阻塞,与进程一样。
线程的实现方式:
- 内核支持线程KST(Kernel Supported Threads)
- 用户及线程ULT(User Level Threads)
- 组合方式KST/ULT
1.3 进程线程比较
- 调度的基本单位。进程是作为分配资源的基本单位;线程是独立调度、独立运行的基本单位;
- 并发性。进程可以并发,线程也可以并发执行;
- 拥有资源。进程拥有资源,并作为系统中拥有资源的一个基本单位;线程不拥有系统资源,只有保证运行时必不可少的资源,还可以多个线程共享该进程所拥有的资源;
- 独立性。同进程中的不同线程之间的独立性要比不同进程之间的独立性低;
- 系统开销。进程创建或撤销时的资源开销比线程打;
- 支持多处理机系统。
2. 调度与死锁
2.1 调度
处理机调度的层次:
- 高级调度(High Level Scheduling),又称长程调度、作业调度,调度对象是作业;
- 低级调度(Low Level Scheduling),又称短程调度、进程调度,调度对象是进程(或内核级线程)
- 中级调度(Intermediate Scheduling),又称内存调度,引入的目的是提高内存利用率和系统吞吐量。
调度算法:
- 先来先服务(first-com first-served, FCFS)调度算法:系统按照作业或是进程到达的先后次序进行调度,或者说优先考虑在系统中等待时间最长的作业,而不管作业所需要执行时间的长短。
- 短作业优先(short job first, SJF)调度算法:以作业的运行时间长短计算优先级,作业越短,优先级越高,越先执行。长作业可能永远执行不了。
- 优先级调度算法(priority-scheduling algorithm, PSA):基于作业的紧迫程度,由外部赋予作业的优先级,然后根据优先级进行调度。
- 高响应比优先调度算法(Highest Response Ratio Next, HRRN):引入动态优先级,计算优先级进行调度。优先权=RP=(等待时间+要求服务时间=响应时间)/要求服务时间,RP为响应比。
- 轮转调度算法:基于时间片的轮转调度算法,即将所有的就绪进程按照FCFS策略排成一个就绪队列,然后每个进程执行一定时间,即每个进程执行一个时间片。
- 多队列调度算法
- 多级反馈队列调度算法
调度方式:
- 非抢占式调度方式
- 抢占式调度方式
2.2 死锁
定义:进程组中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,称该组进程是死锁的。
进程产生的必要条件:
- 互斥条件:资源排他性使用,即一段时间内,某资源智能被一个进程占用;
- 请求和保持条件:进程已经拥有了一个资源,但又提出新的起源请求;
- 不可抢占条件:已经保持的资源不会被抢占,只能在使用完成后自己释放;
- 循环等待条件:进程——资源的循环链等待。
处理死锁方法:
- 预防:通过破坏产生条件中的一个或几个
- 避免:将系统的状态分为安全状态和不安全状态,安全时可以避免发生死锁,不安全时可能进入死锁状态,因此就是确保系统始终处于安全状态;利用银行家算法避免死锁
- 检测:利用资源分配图进行检测
- 解除:人工或相应算法
参考与《计算机操作系统》(第4版)