操作系统(第三章作业、进程、线程、调度)
一、作业
1. 基本概念
-
作业:
·用户在一次应用业务处理(计算、打印、发邮件等)过程中,要求计算机系统所做的工作
·作业由 程序、数据、作业说明书 组成
-
作业步:
·作业由不同顺序相连的作业步组成。
·作业步是在一个作业的处理过程中,计算机所做的相对独立的工作,形成中间结果文件 -
作业流:一次由一批作业进入系统,并在OS控制下,各作业依次进行处理
2. 典型作业步
作业 & 进程:
- 作业是用户向计算机提交任务的任务实体,进程则是完成用户任务的执行实体,是系统申请分配资源的基本单位。(作业布置任务,进程完成任务)
- 作业在没有进入执行状态时,被存入外存的后备作业队列等待;进程一旦被创建,总有相应部分在内存中
- 一个作业可由多个进程组成,且必须至少由一个进程组成
- 作业的概念主要用于批处理系统;进程的概念用于几乎所有的多道系统
3. 批处理系统的作业管理
4. 作业控制块(JCB)
- JCB 是作业说明书的动态描述
- JCB 是作业在批处理系统中存在的唯一标志
- OS 根据 JCB了解作业的情况,同时利用JCB控制作业的运行
5. SPOOLing 系统工作原理
- 一种用于提高计算机系统中输入输出(I/O)操作效率的技术
外围设备是指计算机系统中除处理机、内存之外的其他设备,它们通过输入/输出(I/O)接口与处理机进行数据交换。
外围设备可以分为输入设备(如键盘、鼠标)和输出设备(如显示器、打印机)。此外,还有存储设备(如硬盘驱动器、固态硬盘)。
6. 批处理作业的状态及转换
二、进程
1. 进程概念
- 程序:是静态的,就是存放在磁盘里的可执行文件,就是一系列的指令集合
(1)程序的顺序执行特征:
·顺序性:每一操作必须在下一个操作开始之前结束
·封闭性:程序运行时独占全机资源
·结果的确定性:程序一旦开始执行,执行结果不受外界影响
·结果不可再现性:程序执行环境与初始条件相同,当程序重复执行,无论从头到尾还是走走停停,结果相同
(2)程序并发执行特征:
·间断性:程序并发执行,资源共享,相互制约导致并发程序具有“执行 – 暂停 – 执行”这种间断的活动规律
·失去封闭性:每个程序不再独占资源
·不可再现性:程序并发时,由于失去了封闭性,导致其又失去了不可再现性
多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,导致其又失去了不可再现性,由此,决定了通常的程序是不能参与并发执行的,否则,程序的运行也就失去了意义。为了能使程序并发执行,并且可以对并发执行的程序加以描述和控制,人们引入了“进程”的概念。
Q:
(1)多道程序如何提供服务(动态控制)?
(2)并发程序之间如何正确传递消息?
(3)对 CPU 如何调度,使每个用户公平使用 CPU?(CPU是一个只可调度,不可分配的资源)
- 进程:是动态的,是程序的一次执行过程
- 同一个程序多次执行会对应多个进程
2. 进程的组成
?操作系统怎样区分各个进程
- 当进程被创建,操作系统会为该进程分配一个唯一的、不重复的“身份号” – PID(进程ID)
- PID 每次打开都会重新分配,即使是打开同一个应用程序
3. 进程的特征
4. 进程的状态与转换
运行态 -> 阻塞态 eg:
(1)磁盘 I/O 操作
(2)网络请求:在等待响应期间,该进程将处于阻塞状态,直到收到回复。
5. 进程的控制
6. 进程通信
- 进程间通信(IPC)是指两个进程之间产生数据交互
- 为什么进程通信需要操作系统支持?
(1)共享存储
- 基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。
- 基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式
(2)消息传递
-
进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的**“发送消息/接收消息”**两个原语进行数据交换。
-
直接通信方式:消息发送进程要指明接收进程的 ID
-
间接通信方式:通过“信箱”间接地通信。因此又称“信箱通信方式”
(3)管道通信
- 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
- 各进程互斥访问管道(由操作系统实现)
- 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程
- 管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程
- 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux的方案)。
三、线程
1. 什么是线程,为什么要引入线程?
进程是程序的一次执行。但这些功能显然不可能是由一个程序顺序处理就能实现的
· 可以把线程理解为“轻量级进程”。
·线程是一个基本的 CPU 执行单元,也是程序执行流的最小单位
·引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
·引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)
2. 引入线程机制,有什么变化?
3. 线程的属性
4. 线程的实现方式
(1)用户级线程(ULT)
Q:
(1)线程的管理工作谁来完成?
应用程序通过线程库来完成
(2)线程切换是否需要 CPU 变态?
在用户态下就可以完成
(3)操作系统是否能意识到用户级线程的存在?
只知道进程的存在,不知道线程存在
(2)内核级线程(KLT)
Q:
(1)线程的管理工作谁来完成?
操作系统来完成
(2)线程切换是否需要 CPU 变态?
需要从用户态转换为内核态
(3)操作系统是否能意识到用户级线程的存在?
yes
5. 多线程模型
- 在支持内核级线程的系统中,根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型
(1)一对一模型
(2)多对一模型
(3)多对多模型
Tips:
·用户级线程是“代码逻辑”的载体
·内核级线程是“运行机会”的载体(内核级线程才是处理机分配的单位)
6. 线程的状态与转换
7. 线程的组织与控制
四、处理机调度
1. 调度
调度的实质是一种资源分配
2. 三个层次的调度
3. 进程调度
(1)进程调度的时机
(2)切换与过程
- “狭义的调度”:从就绪队列中选一个要运行的进程(包括刚刚暂停的进程 or 另一个进程)
- 切换:一个进程让出处理机,另一个进程占用处理机
- 广义的进程调度:包含选择一个进程和进程切换两个步骤
- 进程切换:
(1)对原来运行进程各种数据的保存
(2)对新的进程各种数据的恢复
(3)进程调度方式
- 非剥夺调度方式(非抢占):只能由当前运行的进程主动放弃 CPU
- 剥夺调度方式(抢占):可由操作系统剥夺当前进程的 CPU 使用权
4. 调度器、闲逛进程
- 调度器
- 闲逛进程:调度程序永远的备胎,没有其他就绪进程,运行闲逛程序进程
· 特性:
(1)优先级最低
(2)可以是0地址指令,占一个完整的指令周期
(3)能耗低
5. 调度算法的评价指标
6. 调度算法
- 多级队列调度算法