进程|操作系统

一、进程的概念

1.进程的定义

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

进程的定义:

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

2.进程组成

在这里插入图片描述
在这里插入图片描述

3.进程的组织

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

4.进程的特征

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

二.进程的状态和转换

1.三种基本状态

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

2.另外两种状态

1)创建状态

2)结束状态

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

3.进程状态的转换

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

三、进程控制

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

1.用原语实现进程控制

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

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

进程控制相关的原语

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

四、进程通信

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

1.共享存储

两个进程对共享空间的访问必须是互斥的(互斥通过操作系统提供的工具实现(P、V))。
操作系统负责提供共享空间和同步互斥工具。

1)基于数据结构的共享

低级通信

2)基于存储区的共享

高级通信

2.消息传递

格式化消息

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

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

1)直接通信方式

消息直接挂到接收进程的消息缓冲队列上。

2)间接通信方式

消息要先发送到中间的实体(信箱)。

3.管道通信

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

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

五、线程概念

1.为什么要引入线程

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

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

2.线程的CPU

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

3.线程的实现方式

1)用户级线程(User-Level Thread)

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

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

2)内核级线程(Kernel-Level Thread KLT)

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

3)两者组合的方式

操作系统只能感知内核级线程,因此只有内核级线程才是处理机分配的单位。

4)多线程模型

多对一

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

优点缺点
用户级线程的切换在用户空间即可以完成,不需要切换到核心态,线程管理的系统开销小,效率高当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高,多个线程不能再多核处理机上并发执行
一对一

一个用户级线程映射到一个内核级线程,每个用户进程有与用户级线程同样数量的内核级线程。

优点缺点
当一个线程被阻塞后,别的线程还可以继续执行,并发能力强,多线程可在多核处理机上并行执行一个用户进程会占多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理成本高,开销大
多对多

六、处理机调度

1.调度基本概念

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

2.调度的三个层次

1)高级调度(作业调度)

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

2)中级调度(内存调度)

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

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

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

3)低级调度(进程调度)

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

七、调度算法评价指标

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

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

调度算法

1.先来先服务

算法特点
先来先服务对长作业有利,对短作业没利

考虑的是等待时间,等待时间越久优先级越高。

2.短作业优先

算法特点
短作业优先对长作业没利,对短作业有利,可能产生饥饿现象

要求服务的时间越短,优先级越高
每次调度时选择当前已经到达,且运行时间最短的作业/进程

3.高响应比优先

上述两种算法的权衡折中

在这里插入图片描述

4.时间片轮转

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

5.优先级调度算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.多级反馈队列调度

在这里插入图片描述
在这里插入图片描述

  • 18
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值