操作系统之进程线程篇
进程
概念:运行中的程序称为进程。
状态:进程的活动期间最少具备3种基本状态,即运行状态、就绪状态、阻塞状态。
图中各个状态的意义:
运行状态:该时刻进程占用CPU
就绪状态:可以运行,但因为其他进程正在运行而暂停
阻塞状态:该进程正在等待某一事件发生而暂时停止运行,这时即使给它CPU资源,它也无法运行
当然进程还拥有2种基本状态:创建状态和结束状态
创建状态:进程被创建时的状态
结束状态:进程从系统中消失时的状态
另外,进程还有一种状态叫挂起状态,它表示进程没有占用物理内存空间,这和阻塞状态不一样,阻塞状态是等待某个事件的返回。
操作系统用什么来描述进程?
使用进程控制块(PCB)来描述进程。PCB是进程存在的唯一标识,也就是说一个进程存在,必然会有一个PCB,进程消失了,PCB随之消失。
PCB包括什么信息?
进程描述信息:
进程标识符:标识各个进程,每个进程都有一个并且唯一的标识符。
用户标识符:进程所归属的用户。
进程控制和管理信息:
进程当前状态:如创建、就绪、运行等状态。
进程优先级:进程抢占CPU的优先级。
资源分配清单:
有关虚拟地址空间的信息,所打开文件的列表和所使用的I/O设备信息。
CPU相关信息:
CPU中各个寄存器的值,当进程被切换时,CPU的状态信息都会被保存在相应的PCB中,以便进程重新执行时,能从断点处继续执行。(进程的上下文切换)
线程
概念:线程是进程当中的一条执行流程。
优点:
1.一个进程中可以同时存在多个线程。
2.各个线程之间可以并发执行。
3.各个线程之间可以共享地址空间和文件等资源。
缺点:
当进程中的一个线程崩溃,这个进程中的所有线程都会崩溃。
线程的实现方式:
1.用户线程:在用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来完成线程的管理。
2.内核线程:在内核中实现的线程,是由内核管理的线程。
3.轻量级线程:在内核中来支持用户线程。
进程与线程的比较:
1.进程是资源分配的单位,而线程是CPU调度的单位。
2.进程拥有一个完整的资源平台,而线程只独享必不可少的资源,如寄存器和栈。
3.线程同样拥有就绪、阻塞、执行三种基本状态,同样具有状态之间的转换关系。
4.线程能减少并发执行的时间和空间开销。
调度算法
1.先来先服务算法(FCFS)
每次从就绪队列选择最先进入队列的进程,然后一直运行,直到退出或者阻塞,才会继续从就绪队列中选择第一个进程继续运行。
特点:对长作业有利,不利于短作业。
2.最短作业优先调度算法(SJF)
优先选择运行时间最短的进程来运行。
特点:对短作业有利,不利于长作业(极端情况下,长作业不会被运行)。
3.高响应比优先调度算法(HRRN)
每次进行进程调度时,先计算响应比优先级,然后运行响应比优先级最高的进程。
根据这个公式:
如果两个进程等待的时间相同,要求服务时间越短,优先级越高,短作业容易被选中。
如果两个进程要求服务时间相同,等待时间越长,响应比越高,长作业容易被选中。
4.时间片轮转算法(RR)
最简单、最公平且使用最广的算法就是时间片轮转算法。每个进程被分配一个时间片,即允许该进程在该时间段中运行。
时间片的长度是一个很关键的点:
如果时间片过长可能引起短作业进程的响应时间变长。过短会导致频繁的切换进程,CPU效率降低。所以时间片的设为20ms~50ms