理解进程与线程|青训营笔记(四)

107 阅读7分钟

1.进程与线程:

进程是资源分配的基本单位,由程序段、数据、PCB构成;进程间通过共享存储、消息传递、管道通信进行通信;进程的地址空间之间互相独立;进程切换时涉及当前CPU环境的保存及新进程CPU环境设置,开销较大。

线程是CPU调度的基本单位,由线程id、寄存器集合和堆栈组成;线程可访问所属进程的全部资源;同进程线程通信直接读写进程数据段、不同进程的线程通信属于进程间通信;线程切换只需要保存和设置少量寄存器内容,开销很小。

2.线程的实现方式:用户级、内核级线程

用户级线程由应用程序通过线程库实现,线程管理工作(包括线程切换)由应用程序负责,线程切换可在用户态下完成。OS调度时以进程为单位。

内核级线程管理由OS内核完成,线程调度、切换由内核负责。OS调度的基本单位为内核级线程。

有些系统同时支持用户级和内核级线程,二者可组合:n个用户级映射到m个内核级线程。但内核级线程是处理机分配的单位。

用户线程中内核以进程为单位分配CPU,同一时刻进程只一个线程能执行,若线程阻塞,同进程所有线程被阻塞,无法利用多处理器系统的优点;多处理器系统及内核级线程下,内核能够同时调度进程的多个线程并行执行,一个线程阻塞,可调度其他线程运行,但同进程中线程切换时,需要从用户态转向内核态,开销大。

3.进程状态及控制:就绪态、阻塞态、运行态、创建态、终止态。

进程创建:申请空白PCB、为进程分配资源、初始化PCB、进程插入就绪队列;

进程终止:根据进程标识符检索PCB并读进程状态、对执行的进程进行终止并将处理器分配给其他进程、若有子进程则终止它、释放进程全部资源、将PCB从队列删除。

进程阻塞:由运行态转变,进程通过调用阻塞原语block来阻塞自己,是自身的主动行为,因此只有处于运行态进程才可转为阻塞态。

进程唤醒:由完成相关事件的进程(非被阻塞进程)调用wakeup原语唤醒阻塞进程至就绪态,是被动完成的,只能通过别的进程或OS唤醒。

4.处理机调度:作业调度、内存调度、进程调度

作业调度从外存中的作业后备队列中调度作业建立进程进入内存;

由于内存空间限制,会触发多次内存调度激活挂起队列中的进程,从外存向内存调度;

进程调度从内存进程就绪队列中选择作业分配给CPU进行处理,最为频繁。

4.1.进程调度时机:

进程主动放弃处理机:正常终止、发生异常终止、主动请求阻塞

进程被动放弃处理机:紧急任务、时间片用完、高优先级进程进入

4.2进程调度方式:

非抢占式:只允许进程主动放弃,适用早期批处理系统。

抢占式:更重要或紧迫进程会强制暂停当前进程,将处理机分配给新进程。可通过时钟中断实现时间片轮转,适用于分时OS、实时OS。

5.进程调度的优先级:

静态优先级:进程运行前确定,之后一直不变;

动态优先级:进程运行过程中根据情况动态调整优先级。

系统进程>用户进程  前台进程>后台进程  I/O进程>计算性进程

6.禁止处理机调度的情况:

①处理中断时。中断逻辑上不属于进程,过程复杂且与硬件相关,不应被剥夺处理机资源

②原子操作时。原子操作要屏蔽中断,更不应进行进程调度与切换

③进程进入OS内核程序临界区。进入该区,需要独占式访问共享数据,理论上要加锁防止其他进程并行,解锁前不可切换进程。

临界资源:临界资源指同时间段内只允许一个进程使用的资源,进程需互斥访问。

临界区:指进程中访问临界资源的代码,访问时临界区会上锁。

内核程序临界区用来访问OS内核中的数据结构或数据,由于内核临界资源不尽快释放会影响OS内核的其他管理工作,因此访问时不可进行进程切换调度,进程退出临界区后才可以;普通临界资源类似I/O设备等,访问时速度很慢,会阻塞其他请求该资源的进程,直到该进程结束才可在等待队列唤醒等待的进程,该区可以进行调度切换。

发生上述操作时,应置系统请求调度标志,操作结束后进行相应调度与切换。

 

7.调度算法

FCFS先来先服务:利于长作业不利于短作业,利于CPU繁忙型不利于I/O繁忙型。

SJF短作业优先:非抢占式,长作业不利,平均等待、周转时间最少。

SRTN最短剩余时间:抢占式SJF。

高响应比优先:Rp=(等待时间+要求服务时间)/ 要求服务时间。利于短作业,长作业等待时间久后优先级变高。

优先级调度:分动静优先级

时间片轮转:设定时间片,队首进程运行完时间片后放入队尾,下个队首进程运行。时间偏大系统开销小但交互性差、时间片小利于短作业但系统开销大。

多级反馈队列调度(适用于分时OS进程调度)

设多个就绪队列,优先级1~n递减,越高的时间片越小。

i级队列进程未完成,放至i+1级末尾,n级队列采用时间片轮转。

新进程进入,放入1级末尾等待调度。

 

8.进程同步与互斥

临界资源:每次只允许一个进程使用的资源。必须互斥访问,访问的代码称临界区,访问过程代码由进入区+临界区+退出区+剩余区 组成。

进程同步:为直接制约关系。指为完成某任务,需要协调进程间的工作次序而等待、传递信息所产生的制约关系。

进程互斥:为间接制约关系。进程A访问临界资源时B必须等待。临界资源互斥访问的原则:空闲让进、忙则等待、有限等待、让权等待。

8.1互斥的实现方法

硬件实现:中断屏蔽方法、硬件指令方法。

软件实现:

单标志法:turn标志自己能否进入临界区。进程交替进入,违背空闲让进。

双标志先检查:各进程都有flag标志。进程非交替进入,可能同时进入,无法互斥访问,违背忙则等待。

双标志后检查:先上锁再检查。确保进程互斥访问,但可能都无法进入临界区,违背空闲让进、有限等待,产生饥饿。

Peterson算法:单标志turn+双标志flag结合,进程互相谦让,先谦让先进入。违背让权等待,暂无法进入临界区的进程依然会占用处理机。

8.2信号量机制

记录型信号量semaphore{value资源数、process *L等待资源的进程}  

请求资源P:-1; 释放资源V:+1

S.value初值表示资源数;S.value<0表示无可用资源,其绝对值表示阻塞进程数。