进程


进程

文章来源:(16条消息) 进程|操作系统_资资的博客-CSDN博客

一、进程的概念

1.1进程的定义

程序:指令序列
进程:程序段、数据段、PCB三部分组成了进程实体(进程映像)。
PCB是进程存在的唯一标志。

进程的定义:

  • 进程是程序的一次动态执行。
  • 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
  • 进程是具有独立功能的程序在其数据集合上运行的过程,他是系统调度和资源分配的一个独立单位。

1.2进程组成

1.3进程的组织

进程组织方式 描述
链式方式 按照进程的状态将PCB分为多个队列,操作系统持有指向各个队列的指针
索引方式 根据进程的状态不同,建立几张索引表,操作系统持有指向各个索引表的指针

1.4进程的特征

  • 动态性
  • 并发性
  • 独立性
  • 异步性

二.进程的状态和转换

2.1三种基本状态

状态 概念
就绪 已经具备运行条件,但是由于没有空闲CPU,而暂时不能运行
运行 占有CPU,正在CPU上运行
阻塞 等待某一事件的发生,暂时不能运行

2.2另外两种状态

	1)创建状态
	2)结束状态
状态 概念
创建 进程正在被创建,操作系统为进程分配资源,初始化PCB
结束 进程正在从系统中撤销,操作系统会回收进程拥有的资源,撤销PCB

2.3进程状态的转换

运行->阻塞:一种进程自身做出的主动行为(进程用“系统调用”的方式申请某种系统资源,或者请求等待某个事件的发生)
阻塞->就绪:不是进程自身能控制的,是一种被动行为

三、进程控制

进程控制的主要功能就是对系统中的所有进程实施有效的管理,它具有创建进程、撤销已有进程、实现进程状态转换的功能。

3.1用原语实现进程控制

原语:执行期间不允许中断,只能一气呵成
(原语采用“关中断”和“开中断指令”实现)

关中断和开中断的权限非常大,只允许在核心态下执行的特权指令

进程控制相关的原语

  • 更新PCB中的信息
    1. 所有的进程控制原语都一定会修改进程状态标志
    2. 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    3. 某进程开始运行前必然要恢复其运行环境
  • 将PCB插入合适队列
  • 分配/回收资源

四、进程通信

进程通信:进程之间信息交换
进程是分配系统资源的单位,因此各个进程拥有的地址空间相互独立

4.1共享存储

两个进程对共享空间的访问必须是互斥的(互斥通过操作系统提供的工具实现(P、V))。
操作系统负责提供共享空间和同步互斥工具。
  • 1)基于数据结构的共享
    低级通信

  • 2)基于存储区的共享
    高级通信

4.2消息传递

格式化消息

消息头 消息体
发送进程 ID、接收进程 ID、消息类型、消息长度等格式化信息 消息内容

进程间交换的数据以格式化消息(Message)为单位。进程通过操作系统提供的“发送消息原语/接收进程原语”两个原语进行数据交换。

  • 1)直接通信方式
    消息直接挂到接收进程的消息缓冲队列上。

  • 2)间接通信方式
    消息要先发送到中间的实体(信箱)。

4.3.管道通信

“管道”是指用于连接读写进程的一个共享文件,又名pipe文件。它其实就是在内存中开辟一个固定大小的缓冲区。

管道只能采用“半双工通信”,某一时间段内只能实现单向传输。如果需要实现双向同时通信,则需要设置两个管道。
各个进程要互斥的访问管道。
数据以字符流的形式写入管道,当管道写满时,写进程的write()被阻塞。
如果没有写满,不允许读;如果没读空,就不允许写。
读进程只能有一个

五、线程概念

5.1为什么要引入线程

有的进程可能需要“同时”做很多事情,而传统的进程只能串行地执行一系列程序。为此,引入“线程”来增加并发度。

传统进程 引入线程
进程是程序执行流的最小单位 线程是程序执行流的最小单位
只能进程间并发 线程间也能并发
进程并发,需要切换进程的运行环境,系统开销很大 如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小

5.2.线程的CPU

  1. 线程是处理机调度的单位
  2. 多CPU计算机中,各个线程可占用不同的CPU
  3. 线程也有三种基本状态
  4. 同一进程的不同线程共享进程的资源
  5. 同一进程的线程通信无需操作系统的干预,由于共享内存地址空间
  6. 同一进程中的线程切换,不会引起进程切换
  7. 不同进程中的线程切换,会引起进程切换
  8. 切换同一进程中的线程,系统开销小
  9. 切换进程,系统开销较大

5.3线程的实现方式

  • 1)用户级线程(User-Level Thread)
    用户级线程由应用程序通过线程实现,所有的线程管理工作都有应用程序负责。
    用户及线程中,线程的切换可以在用户态下完成,无需操作系统干预。

在用户看来,是有多个线程,但是在操作系统内核看来,并意识不到线程的存在,调度还是以进程为单位。

  • 2)内核级线程(Kernel-Level Thread KLT)
    内核线程的管理工作由操作系统完成,线程调度、线程切换等工作也是由内核负责,因此内核级线程的切换必须要在核心态下才能完成。

  • 3)两者组合的方式
    操作系统只能感知内核级线程,因此只有内核级线程才是处理机分配的单位。

  • 4)多线程模型
    多对一
    多个用户级线程映射到一个内核级线程,每个用户进程只对应一个内核级线程。

优点 缺点
用户级线程的切换在用户空间即可以完成,不需要切换到核心态,线程管理的系统开销小,效率高 当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高,多个线程不能再多核处理机上并发执行
一对一
一个用户级线程映射到一个内核级线程,每个用户进程有与用户级线程同样数量的内核级线程。
优点 缺点
当一个线程被阻塞后,别的线程还可以继续执行,并发能力强,多线程可在多核处理机上并行执行 一个用户进程会占多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理成本高,开销大
多对多

六、处理机调度

6.1调度基本概念

在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行的处理各个进程。
处理机调度:从就绪队列中按照一定的算法选择一个进程,将处理机分配给他运行,以实现进程的并发执行

6.2调度的三个层次

1)高级调度(作业调度)
高级调度(作业调度)是按一定原则从外存上处于后备队列中的作业中选择一个(或多个)作业,给他们分配内存等必要资源,并建立相应的进程(建立PCB),使他们获得竞争处理机的权力。

2)中级调度(内存调度)
引入了虚拟存储技术后,可将暂时不能用的进程调至外存等待,等他重新具备了运行条件且内存又稍微有空时,再重新调入内存。

暂时调到外存等待的进程状态为挂起状态,PCB并不会一起调到外存(操作系统还需要管理),而是会常驻内存,PCB会记录进程数据在外存中存放的位置,进程状态等信息。
操作系统通过内存中的PCB来保持对各个进程的监控、管理。被挂起进程的PCB会被放到挂起队列中。

中级调度(内存调度):就是要决定哪个处于挂起状态的进程要重新调入内存。
一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。

3)低级调度(进程调度)
低级调度(进程调度),其主要任务就是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给他。
进程调度是操作系统中的一种最基本的调度,在一般的操作系统中都必须配置进程调度。

七、调度算法评价指标

-CPU利用率(忙碌的时间/总时间)

系统吞吐量(单位时间内完成的作业,总共完成作业/总共花销时间)
周转时间(作业被提交给系统开始,到作业完成为止这段时间的间隔)
在后备队列的等待时间+在就绪队列的等待进程调度时间+CPU执行时间+等待I/O操作完成的时间
周转时间=作业完成时间-作业提交时间
带权周转时间=作业周转时间/作业实际运行时间
响应时间:用户提交请求到首次产生响应所用的时间
调度算法

1.先来先服务

算法 特点
先来先服务 对长作业有利,对短作业没利
考虑的是等待时间,等待时间越久优先级越高。

2.短作业优先

算法 特点
短作业优先 对长作业没利,对短作业有利,可能产生饥饿现象
要求服务的时间越短,优先级越高
每次调度时选择当前已经到达,且运行时间最短的作业/进程

3.高响应比优先

上述两种算法的权衡折中

4.时间片轮转

时间片太大 时间片太小
沦为FCFS,响应时间过长 频繁的切换开销太大

5.优先级调度算法

6.多级反馈队列调度


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM