【OS】进程与线程初步

操作系统OS.

  • 操作系统(operating system,OS)是控制和管理计算机系统硬件和软件资源、合理地组织计算机工作流程以及方便用户使用计算机系统的程序的集合。

计算机系统.

  • 计算机系统可以分为4个组件:硬件操作系统应用程序用户
  • 硬件Hardware】如CPU、内存、I/O设备,为系统提供基本的计算资源。
  • 应用程序】如字处理程序、电子制表软件、编译器、网络浏览器,规定了用户为解决计算问题而使用这些资源的方式。
  • OS】操作系统控制硬件,并且协调各个用户应用程序的硬件使用。

裸机.

  • 计算机系统只有硬件系统和软件系统,是还没有配置软件的机器。

计算机系统资源.

  • CPU时间
  • 内存空间
  • 文件存储空间
  • I/O设备

OSの目标.

  • 管理和控制系统资源,实现系统资源的有效利用和共享【有效性
  • 合理组织计算机工作流程,改善系统性能【有效性
  • 提供用户接口,方便用户使用计算机【方便性
  • 能够扩展新的功能【可扩充性】
  • 遵循世界标准规范,能够彼此兼容【开放性】

OSの功能.

  • 存储器管理——内存分配、内存保护、地址映射、内存扩充
  • 文件管理——文件存储空间的管理、目录管理、文件的读/写管理和保护
  • 处理机管理——进程控制、进程同步、进程通信、调度
  • 设备管理——缓冲管理、设备分配、设备处理
  • 操作计算机与用户之间的接口——用户接口、程序接口
  • 新功能——多媒体、系统安全、网络功能

OSの特征.

  • 并发】并发性是指两个或多个事件在同一时间间隔内发生,区别于并行性(两个或多个事件在同一时刻发生)
  • 共享】资源复用,系统中的资源可供内存中多个并发执行的进程共同使用,共享的方式有互斥共享和同时访问
  • 异步】指进程以人们无法预知的速度向前推进。进程的同步机制:保障作业的多次运行都能获得相同结果
  • 虚拟】通过某种技术将一个物理实体变为逻辑上的若干个对应物
  • 并发与共享是最基本的特征,它们又是互为存在的条件,是导致不确定性的根本原因
  • 虚拟与异步是重要特征,虚拟技术为共享提供了更好的条件

内核.

  • 操作系统是一直运行在计算机上的程序,通常称为内核(kernel)
  • 除了内核以外,还有两类程序:系统程序应用程序,前者是与系统运行有关的程序,但不是内核的一部分;后者是与系统运行无关的所有其他程序。
  • 现代OS设计采用层次结构,往往将一些与硬件紧密相关的模块或运行频率较高的模块设置在第一层软件中,称为OS的内核。

内核基本功能.

  • 【支撑功能】包括中断处理、时钟管理、原语操作(即操作中的所有动作不可分割)
  • 【管理功能】包括进程管理(调度创建同步等)、存储器管理、设备管理

引导程序.

  • 当计算机开始运行时,它需要运行一个引导程序(一般位于计算机的固件上,例如ROM或EEPROM),该程序初始化系统的各个组件,从CPU寄存器、设备控制器到内存内容。引导程序必须知道如何加载OS并执行OS,为了完成这一任务,引导程序必须定位OS内核并将其加载到内存。
  • 一旦内核kernel加到内存并执行,它就开始为系统与用户提供服务。除内核外,系统程序也提供一些服务,它们也在计算机启动时加到内存成为系统进程(或系统后台程序)。这个过程完成后,系统就完全启动了,等待事件的发生。

事件.

  • 事件的发生通常由硬件或软件的**中断(interrupt)**来通知。
  • 硬件可以经由系统总线发送信号到CPU,以触发中断。
  • 软件可以通过执行系统调用System Call(一种特别的操作),以触发中断。

CPU中断.

  • 当CPU被中断时,它停止正在做的事,并立即转到固定的位置继续执行,该固定位置通常包含中断服务程序的开始地址。
  • 中断服务程序开始执行,执行完后,CPU返回重新执行被中断的任务。
  • 当中央处理器正在处理内部数据时,外界发生了紧急情况,要求CPU暂停当前的工作转去处理这个紧急事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。实现这一功能的部件称为中断系统,申请CPU中断的请求源称为中断源。

设备控制器.

  • 通用计算机系统由一个CPU和多个设备控制器组成,它们通过共同总线连接在一起。每个设备控制器管理某一特定类型的设备,维护一定量的本地缓冲存储和一组特定用途的寄存器。
  • 一个设备控制器负责在所控制的外围设备和本地缓冲存储之间进行数据传递。

设备驱动程序.

  • OS为每个设备控制器提供一个设备驱动程序,负责设备控制器,并且为OS的其他部分提供统一的设备访问接口。
  • 在开始I/O时,设备驱动程序加载设备控制器的某些寄存器;同时设备控制器检查这些寄存器的内容以决定采取什么样的操作。设备控制器开始从外围设备向本地缓冲存储传输数据,一旦完成了数据传输,设备控制器就会通过中断来通知设备驱动程序【操作已完成】,然后设备驱动程序返回控制到OS。
  • 这样的I/O中断驱动适合于移动少量的数据,对于大量数据,DMA直接内存访问更加适合。

DMA直接内存访问.

  • 设备控制器可以在本地缓冲存储和内存之间传输整块整块的数据,而这个过程无需CPU的干预。每一块产生一个中断,以告知设备驱动程序【操作已完成】
  • 设备控制器执行这些操作时,CPU可以进行其他的工作。

通道.

  • 与门用于负责输入输出的硬件装置(简单的输入输出处理机,IOP),实现了I/O操作与CPU并行工作。

多道程序设计.

  • OS希望在内存中同时保存多个任务,使得CPU总有一个可以执行的作业,从而提高CPU的利用率。
  • 由于内存容量有限,所以当中并不能放下所有的作业,因此这些作业首先保存在磁盘的作业池Job Pool中。
  • 内存中的作业集合是作业池中作业集合的一个子集,OS可以从内存的作业集合中选择执行一个作业,姑且称其为A. 如果A在中途需要等待某个任务,例如I/O操作的完成,那么CPU就会切换到另一个作业B上进行处理。这就实现了CPU总在处理一个任务,而没有空闲时间。
  • 单道程序设计VS多道程序设计
  • 特点:多道性、无序性、调度性

多道程序优缺点.

  • 优点:资源利用率高、系统吞吐量大
  • 缺点:平均周转时间长、无交互能力

分时系统与实时系统.

  • 分时系统】多路性、独立性、交互性、及时性
  • 实时系统】多路性、独立性、交互性、及时性、可靠性

OS的执行.

  • 现代OS是由中断驱动的,倘若没有进程需要执行,没有I/O设备需要服务,而且没有用户需要响应,那么OS就会静静地等待某个事件的发生。
  • 事件由中断或陷阱引起,后者是指由软件生成的中断,具体的情况或者是源于出错(除数为0、无效存储访问),或者是源于用户程序的特定请求(执行OS的某个服务)。
  • 中断服务程序处理中断,对于每种中断,OS有对应的代码段进行处理。

双重模式.

  • 出于确保OS正确运行的目的,我们必须区分OS代码和用户代码的执行,至少需要两种计算机系统的单独运行模式:用户模式-1内核模式-0,仅需要一个二进制位-模式位即可表示。
  • 当计算机系统执行用户应用时,它处于用户模式;然而当用户应用程序通过系统调用,请求操作系统服务时,计算机系统就必须从用户模式切换到内核模式,以满足其请求。
  • 计算机系统引导时,会从内核模式开始,OS紧接着加载,然后开始在用户模式下执行用户应用程序。
  • 一旦发生中断或陷进出现,硬件就会从用户模式切换到内核模式。
  • 总结:每当操作系统能够控制计算机时,计算机系统就处于内核模式;在OS将控制权交给用户应用程序之前,计算机系统会切换到用户模式。

命令解释程序.

  • 命令解释程序的主要功能是,获取并执行用户指定的下一条命令,例如创建、删除、列出、打印、复制、执行等。这些命令的实现方法有两种。
  • 方法一】命令解释程序本身包含代码以执行这些命令。例如一个删除文件的命令可以让命令解释程序跳转到相应的代码段,设置参数并执行相应的系统调用。对于该方法而言,所能提供的命令数量决定了命令解释程序的大小,因为每个命令都需要有对应的实现代码。
  • 方法二】通过系统实现大多数的命令,命令解释程序无需理解命令的含义,只需要通过命令确定一个文件,将其加载到内存并执行即可。例如UNIX中的删除文件命令rm fuck txt就会查找名为 r m rm rm 的文件,将该文件加载到内存,并且用参数fuck.txt来执行,与rm命令相关的功能完全是由文件 r m rm rm 决定的。这也意味着修改、添加功能很方便,并且与命令解释程序无关。

进程.

  • 指一个具有一定独立功能的可并发执行程序在一个数据结合上的运行过程,是动态的。
  • 动态性】进程最基本的特征,表明进程是一次运行过程,有它的生命周期。
  • 并发性】可以并发执行,引入进程的目的是为了使其进程实体能够与其他的进程实体并发执行。
  • 独立性】进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。
  • 制约性】进程由于对资源的争用而相互制约。
  • 异步性】进程按照各自独立的、不可预知的速度向前推进。
  • 进程的结构特征:进程=程序+数据+PCB(进程控制模块Process Control Block)

进程图.

  • 本质上是一棵有向树,用于表示进程的家族关系,边( P i , P j P_i,P_j Pi,Pj)表示进程 P i P_i Pi创建了进程 P j P_j Pj.
  • 需要和下面的前驱图区别开:①两种图表示的含义不同;②执行时处理了不同,前驱图强调顺序关系,而进程图强调进程间的父子关系,执行时存在并发执行的情况。

前驱图.

  • 用于表示进程顺序执行的DAG,若存在边( P i , P_i, Pi, P j P_j Pj),则意味着仅当 P i P_i Pi完成之后才能执行 P j . P_j. Pj.
    在这里插入图片描述

程序顺序执行时的特征.

  • 【顺序性】CPU严格按照程序规定的顺序执行
  • 【封闭性】程序运行时独占全机资源,并且资源的状态只有本程序能够改变
  • 【可再现性】只要程序执行环境和初始条件相同,重复执行时的结果都将相同

程序并发执行时的特征.

  • 【间断性】
  • 【不封闭性】程序的执行环境受到其他程序的影响
  • 【不可再现性】由于失去了封闭性,执行结果与并发程序的执行速度有关,导致其失去可再现性

进程与程序.

  • 进程是程序在一个数据集合上的一次运行过程,是一个动态实体;而程序是一个指令的集合,是静态实体
  • 进程具有生命周期,具有创建、执行和撤销的过程,而程序一旦创建,则可以永远存在
  • 进程与程序之间不存在一一对应的关系,不同的进程可以对应相同的程序,一个进程中还能同时调用多个程序
  • 进程实体是一个能够独立运行的基本单位,可以独立获得资源和独立调度;而程序不能作为独立的单位运行

进程状态.

  • 【new】进程刚被创建,尚未进入就绪队列
  • 【running】进程正在执行
  • 【waiting】进程正在等待某个事件(例如I/O操作完成、收到信号)
  • 【ready】进程已经就绪,等待获得CPU
  • 【terminated】进程正常/异常结束,移除就绪队列,但尚未撤销

在这里插入图片描述

  • 【running】【ready】【waiting】是进程的三个基本状态

创建进程の事件.

  • 分时系统中的用户登录
  • 作业调度
  • 提供服务(系统中随时会创建各种服务进程)
  • 应用请求(有些进程执行时会根据需要创建子进程)

创建进程的原语Create().

  • 申请空白PCB
  • 为新进程分配资源
  • 初始化PCB
  • 将新进程插入到就绪队列

终止进程の事件.

  • 正常结束
  • 异常结束,包括越界错误、特权指令错误、算术运算错误等
  • 外界干预,包括操作员或OS干预、父进程干预

终止进程的原语Destroy().

  • 根据即将终止进程的标识符,找到对应的PCB
  • 若该进程正在执行,终止该进程
  • 若该进程具有子孙进程,则终止其所有子孙
  • 回收所有资源,归还给父进程或OS
  • 移除对应的PCB

挂起/解挂状态.

原因.

  • 【用户需要】中间结果与预期不符
  • 【OS需要】系统功能故障、系统负荷过重
  • 【父进程请求】修改或协调子进程

变化.

  • 引入挂起之后,产生变化的状态是【就绪ready】和【阻塞waiting】,它们被挂起之后,分别变为【静止就绪】和【静止阻塞】,出于区分,原状态被称为【活动就绪】和【活动阻塞】

在这里插入图片描述

PCB.

主要内容.

  • 【进程标识信息】包括进程本身的信息以及进程父亲的信息
  • 【处理机状态信息】中断现场保留区
  • 【进程调度信息】包括状态、优先级、入主存时间、已执行时间
  • 【进程控制信息】包括但不限于程序、数据的外存/内存地址

组织方式.

  • 【线性方式】系统中所有的PCB都组织在一张线性表中
  • 【链接方式】将相同状态的PCB通过指针链接成一个队列
  • 【索引方式】根据所有进程状态的不同,建立几张索引表,例如就绪索引表阻塞索引表

进程通信.

  • 进程通信机制IPC(Inter-Process Communication)使得进程之间能够相互交换数据和信息

通信类型.

共享存储器系统.

  • 包括共享数据结构共享存储区
  • 前者信息交换的格式、类型一定,并且进程间的通信由程序员完成,效率较低;
  • 后者允许进程随时向系统申请一块存储区,并指定该分区的关键字,用于进程通信。

消息传递系统.

  • 利用计算机系统提供的通信原语,以消息或报文为单位进行信息交换,包括直接通信和间接通信

直接通信.

  • 发送者进程直接将消息发送给接收者进程,原语操作为Send()和Receive()

间接通信.

  • 进程之间通过某种共享的数据结构(称为信箱)进行通信,原语操作有:信箱的创建、撤销以及Send()、Receive()
  • 信箱分为三类:私用信箱、共用信箱和共享信箱

管道.

  • 是一个共享文件,用于连接写进程和读进程,也成为Pipe文件

线程与进程.

引入进程の原因.

  • 为了使程序能够并发执行,提高系统效率和资源利用率

引入线程の原因.

  • 减少程序并发执行的时空开销,使得并发度更好
  • 引入线程之前,进程是拥有资源的基本单位,也是可独立调度的基本单位,这导致系统需要在进程创建、切换时付出较大的时空开销,限制了并发程度的提高

线程の定义.

  • 作为进程中的一个实体,是能够被系统独立调度和分派的基本单位

引入线程の优点.

  • 提高了响应度
  • 资源共享程度高,因为线程默认会共享所属进程的内存和其他资源
  • 经济实惠,因为创建和切换线程的系统开销小
  • 多线程更好地发挥了多CPU系统的优势

总结.

  • 【关于调度】线程取代引入前的进程概念,成为了调度和分派的基本单位,同一进程内部的线程切换不会引起进程切换
  • 【并发性】线程与进程都可以并发执行
  • 【拥有资源】进程还是持有资源的基本单位,进程内的线程会共享进程的资源,但自己并不持有资源
  • 【独立性】同一进程内部的多个线程的独立性,要比不同进程的独立性低很多,因为线程会共享进程的资源
  • 【开销】创建和切换线程的开销远比进程小,更容易实现通信和同步,这也是引入进程的初衷
  • 【支持多CPU系统】进程只能被分配到一个CPU上执行,但同一进程内部的多个线程可以分配到多个CPU上并行执行

线程の类型.

内核支持线程KST.

  • 由内核管理,内核中为每一个KST都设置了一个线程控制块TCB,借此来感知和控制线程

用户级线程ULT.

  • 该类线程的创建和切换可以完全由用户完成,无需经过系统调用。实际上,系统也并没有建立该线程的TCB,并不知道这类线程的存在

对比.

  • 【调度与切换速度】ULT无需通过中断进入内核模式,于用户模式下即可调度和切换,相较KST速度快
  • 【发生系统调用】ULT发生系统调用时,整个进程都会阻塞;相比之下,KST仅阻塞该线程自身
  • 【执行时间】ULT以进程为单位分配CPU时间,而KST以线程为单位分配CPU时间

线程の状态及转换.

线程の3个基本状态.

  • 就绪
  • 运行
  • 阻塞

线程の5种基本操作.

  • 【派生】进程内部,由该进程自身或其他线程派生出新的线程,放入就绪队列
  • 【调度】根据某种调度算法,选择一个线程分配CPU时间,开始执行
  • 【阻塞】线程因为等待某个事件的发生而被阻塞,发生阻塞后,寄存器上下文、程序计数器、堆栈指针都将被保存
  • 【激活】线程等待的事件发生后,线程被激活,进入就绪队列
  • 【结束】线程执行完毕后被结束,其寄存去上下文和堆栈指针都将被释放

多线程模型.

多对一模型.

在这里插入图片描述

  • 用户级线程ULT均映射到同一个内核支持线程KST上
  • 优点是线程管理是由线程库在用户空间进行的,减少了系统调用,效率较高
  • 缺点是当某个线程需要访问内核时,会导致整个进程的阻塞,并且同一时刻只有一个线程能够访问内核,所以无法发挥多CPU系统的优势

一对一模型.

在这里插入图片描述

  • 一个ULT映射到一个KST上
  • 当一个ULT因为需要访问内核而阻塞时,另一个ULT能够继续执行,可以发挥多CPU系统的优势
  • 缺点在于需要为每一个ULT创建一个KST,系统开销较大,并且整个系统的线程数量也受限

多对多模型.

在这里插入图片描述

  • 多个用户线程映射到数量相等或更少的多个内核线程上
  • 结合了多对一和一对一模型的优点,可以创建任意数量的用户线程,相应内核线程可在多处理器系统上并发执行;当某个线程执行阻塞系统调用时,内核能调度另一线程执行

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108495869