计算机操作系统笔记

news/2025/9/29 21:00:00/文章来源:https://www.cnblogs.com/Nakaliiiiiiii/p/19119515
计算机操作系统笔记

第一章:操作系统概述
一、操作系统的概念

  • 操作系统(Operating System,OS)是指控制和管理整个计算机系统 硬件和软件 资源,并合理地组织调度计算机的工作和资源的分配;以提供给用户和其他软件更加方便的接口和环境 ;它是计算机系统中最基本的系统软件 。
  • 概念中所提到的分别是:
    1. 负责管理协调硬件、软件等计算机资源的工作
    2. 为上层用户、应用程序提供简单易用的服务
    3. 是一种系统软件

二、操作系统的功能和目标

功能简记:处(处理机管理)存(存储器管理)备(设备管理)文(文件管理)用(用户接口)

1. 作为系统资源的管理者

  • 需要提供的功能有:
    1. 处理机(CPU)管理:例如程序运行的进程
    2. 存储器(存储)管理:例如程序运行时的数据
    3. 文件管理:例如文件存放
    4. 设备管理:例如键盘鼠标摄像头

2. 向上层提供服务

  • 可以理解为:操作系统把一些难以理解的硬件功能封装成简单易用的服务,使用户能更方便地使用计算机,用户无需关心底层硬件的原理,只需要对操作系统发出命令即可。
  • 提供的功能:
    1. 图形化界面(GUI):用户可以使用形象的图形界面进行操作,而不需要记忆复杂的命令、参数。
    2. 用户接口:命令接口、程序接口
  • 在提供的功能中,GUI 和 命令接口用户可以直接使用;程序接口只能通过程序间接使用。

3. 对硬件的拓展

  • 操作系统需要实现对硬件机器的拓展。
  • 没有任何软件支持的计算机称为裸机。
  • 经过操作系统的包装,裸机便以虚拟机的形式呈现给用户。与裸机相比,虚拟机更易于理解和使用。通常把覆盖了软件的机器称为扩充机器,也称之为虚拟机。

三、操作系统的四个特征

  • 四个特征分别是:并发性、共享性、虚拟性、异步性。其中:
    • 并发性和共享性是 最基本的特征,且 互为存在条件
    • 没有并发和共享,就谈不上虚拟和异步

1. 并发性

  • 并发:指两个或多个事件在同一时间间隔内发生。这些事件宏观上是同时发生的,但微观上是交替发生的。

  • 另一个概念——并行:指两个或多个事件在同一时刻同时发生。

  • 所以操作系统的并发性,是指计算机系统中 “同时” 运行着多个程序,这些程序宏观上看是同时运行着的,而微观上看是交替运行的。

  • 操作系统就是伴随着 “多道程序技术” 而出现的。因此,操作系统和程序并发是一起诞生的。

  • 需要注意⚠️⚠️⚠️重要

    • 单核CPU同一时刻只能执行一个程序,各个程序只能并发地执行
    • 多核CPU同一时刻可以同时执行多个程序,多个程序可以并行地执行
      如果一个四核CPU需要 “同时” 运行四个以上的程序(核处理不过来),那么并发性依然是必不可少的,因此并发性是操作系统一个最基本的特性。

2. 共享性

  • 共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
  • 两种资源共享方式:
    • 互斥共享方式:系统中的某些资源,虽然可以提供给多个进程使用,但一个时间段内只允许一个进程访问该资源。
    • 同时共享方式:系统中的某些资源,允许一个时间段内由多个进程 “同时” 访问该资源。
  • 所谓的 “同时” 往往是宏观上的,而在微观上,这些进程可能是交替地对该资源进行访问(即分时共享)
  • 并发和共享的关系‼️:互为存在条件。
    • 并发性,指计算机系统中 “同时” 存在着多个运行着的程序。
    • 共享性,指系统中的资源可供内存中多个并发执行的进程共同使用。
    • 如果失去并发性,则系统中只有一个程序正在运行,则共享性失去存在的意义;
    • 如果失去共享性,则多个进程不能同时访问硬盘资源,就无法实现并发。

3. 虚拟性

  • 虚拟是指把一个物理上的实体变成若干个逻辑上的对应物。物理实体是实际存在的,而逻辑上对应物是用户感受到的。
  • 比如日常使用计算机,一个程序需要放入内存并给它分配CPU才能执行
    • 虚拟存储器技术——空分复用技术:实际只有4GB的内存,在用户看来似乎远远大于4GB
    • 虚拟处理器技术——时分复用技术:实际只有一个单核CPU,在用户看来似乎有多个CPU在同时运行。
    • 上面的有个印象即可,后面会说。
  • 如果失去并发性,则一个时间段内系统只需运行一道程序,那么就失去了实现虚拟性的意义。因此,没有并发性,就谈不上虚拟性。

4. 异步性

  • 异步是指,在多道程序环境下,允许多个程序并发执行,但由于资源有限(进程会争取使用系统资源),进程的执行不是一贯到底的,而是走走停停。
  • 以不可预知的速度向前推进,就是进程的异步性。
  • 如果失去了并发性,即系统只能串行地运行各个程序,那么每个程序的执行会一贯到底。因此,只有系统拥有并发性,才有可能导致异步性。

四、操作系统的发展与分类

1. 手工操作阶段

  • 主要缺点:用户独占全机、人机速度矛盾导致资源利用率极低。
  • 人机操作和机器速度之间的矛盾
  • CPU和IO设备之间速度不匹配的矛盾

2. 单道批处理系统

  • 为了解决人机矛盾和CPU与IO设备之间速度不匹配的矛盾,出现了单道批处理系统。
  • 单道批处理系统,引入 脱机输入/输出技术(用外围机+磁带完成),并由监督程序负责控制作业的输入、输出。
  • 主要优点:缓解了一定程度的人机速度矛盾,资源利用率有所提升。
  • 主要缺点:内存中仅能有一道程序运行,只有该程序运行结束之后才能调入下一道程序。CPU有大量的时间是在空闲等待 I/O 完成,资源利用率依然很低。

3. 多道批处理系统

  • 为了进一步提高计算机系统的利用率,出现了多道程序设计的思想。把批处理系统和多道程序系统相结合,就形成了多道批处理系统。
  • 多道程序设计思想:在内存中同时存放若干道用户作业,这些作业交替地运行。
  • 主要优点:多道程序并发执行,共享计算机资源。资源利用率大幅提升,CPU和其他资源更能保持“忙碌”状态,系统吞吐量增大。
  • 主要缺点:用户响应时间长,没有人机交互功能(无法调试程序/无法在程序运行过程中输入一些参数)。

4. 分时操作系统

  • 在多道批处理系统中,作业运行时用户无法干预,交互能力很弱,由此出现了分时系统。
  • 分时操作系统:计算机以时间片为单位轮流为各个用户/作业服务,各个用户可通过终端与计算机进行交互。
  • 主要优点:用户请求可以被及时响应,解决了人机交互问题。允许多个用户同时使用一台计算机,并且用户对计算机的操作相互独立,感受不到别人的存在。(例如 UNIX)
  • 主要缺点:不能优先处理一些紧急任务。操作系统对各个用户/作业都是完全公平的,循环地为每个用户/作业服务一个时间片,不区分任务的紧急性。

5. 实时操作系统

  • 主要特点:及时性、可靠性。
  • 主要优点:能够优先响应一些紧急任务,某些紧急任务不需要时间片排队。
  • 在实时操作系统的控制下,计算机系统接收到外部信号后及时进行处理,并且要在严格的时限内处理完事件。

6. 其他操作系统
网络操作系统(Windows NT):伴随着计算机网络的发展而诞生的,能把网络中各个计算机有机地结合起来,实现数据传送等功能,实现网络中各种资源的共享(如文件共享)和各台计算机之间的通信。
分布式操作系统:主要特点是分布性和并行性。系统中的各台计算机地位相同,任何工作都可以分布在这些计算机上,由他们并行、协同完成这个任务。
个人计算机操作系统:如 Windows XP、Mac OS,方便个人使用。

五、操作系统的运行机制

程序运行的过程实际上是CPU执行一条一条(二进制)机器指令的过程。
指令:是处理器(CPU)能识别、执行的最基本命令。

1. 两类程序

  • 程序可以分为应用程序和内核程序:
    • 应用程序:普通程序员写的大多是应用程序
    • 内核程序:很多内核程序组成了 “操作系统内核”,或简称 ”内核“。内核是操作系统最重要最核心的部分,也是最接近硬件的部分。
  • 操作系统的功能未必都在内核中。因此:操作系统 > 内核。

2. 两类指令

  • 指令可以分为特权指令和非特权指令:
    • 特权指令:只允许 “管理者” (内核)使用,影响重大。
    • 非特权指令:应用程序只能使用非特权指令,如加法指令。
  • CPU在设计和生产的时候就划分了特权指令和非特权指令,因此CPU执行一条指令前就能判断出其类型。

3. 两种处理器状态

  • CPU有两种状态:内核态和用户态:
    • 内核态:也称为 核心态、管态。处于内核态时,说明此时正在运行的是内核程序,此时可以执行特权指令
    • 用户态:也称为目态。处于用户态时,说明此时正在运行的是应用程序,此时只能执行非特权指令。
  • CPU中有一个寄存器叫 程序状态字寄存器(PSW),其中有个二进制位,1表示“内核态”,0表示“用户态”

4. 内核态和用户态的切换

  • 刚开机时,CPU为 内核态,操作系统内核程序先上CPU运行
  • 内核态转用户态:执行一条特权指令——修改PSW的标志位为用户态,这个动作意味着操作系统将主动让出CPU使用权。
  • 用户态转内核态:由“中断”引发,硬件自动完成变态过程,触发终端信号意味着操作系统将强行夺回CPU的使用权。
    • CPU检测到中断信号后,会立即变为核心态;
    • 停止运行当前的应用程序,转而运行处理终端信号的内核程序;
    • 处理完引发中断的事件后,再把CPU使用权交给别的应用程序。
    • 但凡需要操作系统介入的地方,都会触发终端信号。

六、中断和异常

1. 中断的作用

  • 中断是让操作系统内核夺回CPU使用权的唯一途径
  • 使CPU从用户态转为内核态
  • 如果没有中断机制,那么一旦应用程序上CPU运行,CPU就会一直运行这个应用程序。

2. 中断的类型

  • 内中断:与当前执行的指令有关,中断信号来源于CPU内部

    • 常被称为 异常、例外。

    • 陷入(trap):应用程序 主动 将CPU控制权还给操作系统内核,会执行陷入指令,该指令会引发一个中断信号。

    • 故障(fault):由错误条件引起的,可能被内核程序修复。修复后 会归还 CPU使用权。

    • 终止(abort):由致命错误引起,内核程序无法修复该错误。不会归还 CPU使用权。若当前执行的指令是非法的(用户态执行特权指令、除数为0),则会引发一个中断信号。

    • 检查中断信号:CPU在执行指令时会检查是否有异常发生。

  • 外中断:与当前执行的指令无关,中断信号来源于CPU外部

    • 常被称为 中断(狭义)
    • 时钟中断:实现多道程序并发,时钟部件每隔一个时间片会给CPU发送一个时钟中断信号。
    • I/O中断:当 IO 任务完成时,向CPU发送中断信号。
    • 检查中断信号:每一条指令执行结束后,CPU都会例行检查是否有外中断信号需要处理

3. 中断机制的基本原理

  • 不同的中断信号,需要用不同的中断处理程序来处理。
  • 当CPU检测到中断信号后,会根据中断信号的类型去查询 中断向量表,以此来找到相应的中断处理程序在内存中的存放位置。
  • 中断处理程序一定是内核程序,需要运行在内核态。

第二章 进程管理

2.1 程序执行
2.1.1 程序顺序执行的特征

  1. 顺序性:指处理机严格地按照程序所规定的顺序执行,即每一操作必须在下一个操作开始之前结束。
  2. 封闭性:即程序运行时独占全机资源,资源的状态(除初始状态外)只有本程序才能改变它,程序一旦开始执行,其执行结果不受外界因素影响。
  3. 可再现性:指只要程序执行时的环境和初始条件相同,当程序重复执行时,不论它是从头到尾不停顿地执行,还是“走走停停”地执行,都可获得相同的结果。

2.1.2 程序并行执行的特征
1.间断性:程序在并发执行时,由于它们共享系统资源,以及为完成同一项任务而相互合作,致使在这些并发执行的程序之间形成了相互制约的关系。
2.失去封闭性:当系统中存在着多个可以并发执行的程序时,系统中的各种资源将为它们所共享,致使其中任一程序在运行时,其他环境都必然会受到其他程序的影响。
3.不可再现性:程序在并发执行时,由于失去了封闭性,也将导致其又失去可再现性。

程序在并发执行时,由于失去了封闭性,其计算结果必将与并发程序的执行速度有关,从而使程序的执行失去了可再现性。换言之,程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。

2.2 进程与线程
2.2.1 进程的概念和特征
在多道程序环境下,程序的执行属于并发执行,此时它们将失去其封闭性,并具有间断性,以及其运行结果不可再现性的特征,所以,通常的程序是不能参与并发执行的。为了能使程序并发执行,并对并发执行的程序加以描述和控制,引入了“进程”的概念。引入进程的目的是为了使其进程实体能和其他进程实体并发执行,实现操作系统的并发性和共享性(最基本的两个特征)。

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。它不只是程序的代码本身,还包括当前的活动,通过程序计数器的值和处理寄存器的内容来表示。

1. 程序和进程的区别:

程序:是静态的,就是个存放在磁盘里的可执行文件。
进程:是动态的,是程序的一次执行过程。
同一个程序多次执行会对应多个进程。

2. 进程的组成——PCB、程序段、数据段

为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(PCB)。当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的“身份证号”—— PID(Process ID,进程ID)。操作系统区分各个进程就是通过PID以及进程所属用户ID(UID)来区分的。所以操作系统要记录PID、UID,还要记录给进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O设备、正在使用哪些文件),还要记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况等)。这些信息都被保存在PCB中。操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。操作系统就是利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。PCB是进程存在的唯一标志。
image

由程序段、相关的数据段和PCB三部分便构成了进程实体(又称进程映像)。
image
image

由上可知,PCB是给操作系统用的,程序段和数据段才是给进程自己用的。所谓创建进程,实质上是创建进程映像中的PCB,而撤销进程,实质上是撤销进程的PCB。注意:进程映像是静态的,进程则是动态的。

从不同角度,进程可以有不同的定义,比较典型的定义有:

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

引入进程实体后,我们可以把传统操作系统中的进程定义为:“进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。”

要注意这里说的系统资源是指处理机、存储器和其他设备服务于某个进程的“时间”,例如把处理机资源理解为处理机的时间片才是准确的。因为进程是这些资源分配和调度的独立单位,即“时间片”分配的独立单位,这就决定了进程一定是一个动态的、过程性的概念。

3. 进程的特征
进程是由多道程序的并发执行而引出的,和程序是两个截然不同的概念。它拥有以下特征:

  • 动态性:进程是程序的一次执行,它有着创建、活动、暂停、终止等过程,具有一定的生命周期,是动态地产生、变化和消亡的。动态性是进程最基本的特征。
  • 并发性:指多个进程实体同时存于内存中,能在一段时间内运行。并发性是进程的重要特征,同时也是操作系统的重要特征。引入进程的目的就是是程序能与其他进程的程序并发执行,以提高资源利用率。
  • 独立性:指进程实体是一个能独立运行、独立获得资源和独立接受调度的基本单位。凡未建立PCB的程序,都不能作为一个独立的单位参与运行。
  • 异步性:由于进程的相互制约,使得进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进。异步性会导致执行结果的不可再现性,所以在操作系统中必须配置相应的=进程同步机制。
  • 结构性:每个进程都配置一个PCB对其进行描述。

2.2.2 进程的状态与转换
1. 进程的三种基本状态
由于多个进程在并发执行时共享系统资源,致使它们在运行过程中呈现间断性的运行规律,所以进程在其生命周期内可能具有多种状态。一般而言,每个进程至少应处于以下三种基本状态之一:

  1. 就绪态。进程获得了除处理机外的一切所需资源,一旦得到处理机,便可立即运行。系统中处于就绪状态的进程可能有多个,通常将它们排成一个队列,称为就绪队列。(其他资源✅ CPU❌)
  2. 执行态。进程正在处理机上运行。在单处理机环境下,每个时刻最多只有一个进程处于运行态。而在多处理机系统中,则有多个进程处于执行状态。(其他资源✅ CPU✅)
  3. 阻塞态。又称等待态或封锁态。指正在执行的进程由于发生某事件(如I/O请求、申请缓冲区失败等)暂时无法继续执行时的状态,亦即进程的执行受到阻塞。此时引起进程调度,OS把处理机分配给另一个就绪进程,而让受阻进程处于暂停状态,这种暂停状态称为阻塞态。通常系统将处于阻塞态的进程也排成一个队列,称该队列为阻塞队列。实际上,在较大的系统中,为了减少队列操作的开销,提高系统效率,根据阻塞原因的不同,会设置多个阻塞队列。(其他资源❌ CPU❌)
    image

注意:区别就绪态和阻塞态。就绪态是指进程仅缺少处理机,只要获得处理机资源就立即运行;而阻塞态是指进程需要其他资源(除了处理机)或等待某一事件。之所以把处理机和其他资源划分开,是因为在分时系统的时间片轮转机制中,每个进程分到的时间片是若干毫秒。也就是说,进程得到处理机的时间很短且非常频繁,进程在运行过程中实际上是频繁地转换到就绪态的;而其他资源(如外设)的使用和分配或某一事件的发生(如I/O操作的完成)对应的时间相对来说很长,进程转换到等待态的次数也相对较少。

2. 创建状态和终止状态
为了满足进程控制块(PCB)对数据及操作的完整性要求以及增强管理的灵活性,通常在系统中又引入了两种常见的状态。

  1. 创建态。进程正在被创建,尚未转到就绪态。创建进程通常需要多个步骤:首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息;然后又系统为该进程分配运行时所必需的资源;最后把该进程转入就绪态。
    2.** 结束态**。进程正从系统中消失,可能是进程正常结束或其他原因中断退出运行。进程需要结束运行时,系统首先必须将该进程置为结束态,然后进一步处理资源释放和回收等。
    进程PCB中,会有一个变量 state 来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态…为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。

进程五种状态的转换如下图:
image

image

image

进程PCB中,会有一个变量 state 来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态…为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。

3. 挂起操作和进程状态的转换
在许多系统中,进程除了就绪、执行和阻塞三种最基本的状态外,为了系统和用户观察和分析进程的需要,还引入了一个对进程的重要操作——挂起操作。当该操作作用于某个进程时,该进程将被挂起,意味着此时该进程处于静止状态。如果进程正在执行,它将暂停执行。若原本处于就绪状态,则该进程此时暂不接受调度。与挂起操作对应的操作是激活操作。

  • 正在执行的进程挂起后,暂停执行。

  • 就绪状态的进程挂起后不接受调度。

  • 阻塞进程挂起后不能直接转换为就绪(需先激活)。

  • 挂起操作的引入是基于系统和用户的如下需要:

    1. 终端用户的需要。当终端用户在自己的程序运行期间发现有可疑问题,希望暂停自己的程序的运行,使之停止下来,以便用户研究其执行情况或对程序进行修改。
    2. 父进程请求。有时父进程希望挂起自己的某个子进程,以便考查和修改该子进程,或者协调各子进程间的活动。
    3. 负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。
    4. 操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。
  • 挂起和阻塞态的区别:

    • 挂起:由系统或程序发出,移至辅存中去。(释放CPU,可能释放内存,移到外存去)
    • 阻塞态:在抢占资源中得不到资源,被动的挂起在内存,等待某种资源或信号量将它唤醒。(释放CPU,不释放内存)

加入挂起和阻塞态后的进程状态图:
image

  • 其中,创建→活动就绪:在当前系统的性能和内存的容量均允许的情况下,完成对进程创建的必要操作后,相应的系统进程将进程的状态转换为活动就绪状态。

  • 创建→静止就绪:考虑到系统当前资源状况和性能的要求,不分配给新建进程所需资源,主要是内存,相应的系统将进程状态转为静止就绪状态,被安置在外存,不参与调度,此时进程创建工作尚未完成。

4. 进程管理中的数据结构
在计算机系统中,对于每个资源和每个进程都设置了一个数据结构,用于表征某实体,我们称之为资源信息表或进程信息表,其中包含了资源或进程的标识、描述、状态等信息以及一批指针。OS管理的这些数据结构一般分为以下四类:内存表、设备表、文件表和用于进程管理的进程表,通常进程表又被称为进程控制块PCB。

PCB作为进程实体的一部分,记录了操作系统所需的,用于描述进程的当前情况以及管理进程运行的全部信息,是操作系统中最重要的记录型数据结构。它使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。

PCB的具体作用:

  1. 作为独立运行基本单位的标志。PCB已成为进程存在于系统中的唯一标志。
  2. 能实现间断性运行方式。在多道程序环境下,程序是采用停停走走间断性的运行方式运行的。当进程因阻塞而暂停运行时,它必须保留自己运行时的CPU现场信息,再次被调度运行时,还需要恢复其CPU现场信息。在有了PCB后,系统就可将CPU现场信息保存在被中断进程的PCB中,供该进程再次被调度执行时恢复CPU现场时使用。
  3. 提供进程管理所需信息。
  4. 提供进程调度所需信息。
  5. 实现了其他进程的同步通信。

PCB中的信息:

  1. 进程标识符。进程标识符用于唯一地标识一个进程。其中包括外部标识符(创建者提供)和内部标识符(OS设置)。
  2. 处理机状态。也称为处理机的上下文。主要由处理机中各种寄存器中的内容组成,包括通用寄存器、指令计数器、程序状态字PSW、用户栈指针等。
  3. 进程调度信息。包括进程状态、进程优先级、事件和进程调度所需的其他信息。
  4. 进程控制信息。包括程序和数据的地址、进程同步和通信机制、资源清单和链接指针。

5. 进程的组织方式

  • 线性方式。即将系统中所有的PCB都组织在一张线性表中,将该表的首地址存放在内存的一个专用区域中。该方法实现简单、开销小,但每次查找时的需要扫描整张表,因此适合数目不多的系统。
    image

  • 链接方式。即把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列。
    image
    image

  • 索引方式。即系统根据所有进程状态的不同,建立几张索引表。
    image
    image


2.2.3 进程控制
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,用原语来实现进程控制。原语的特点是执行期间不允许中断,它是一个不可分割的基本单位。

简化理解:进程控制就是要实现进程状态转换。

原语的执行具有原子性,即执行过程只能一气呵成,期间不允许被中断。
image
image

可以用“关中断指令”和“开中断指令”这两个特权指令实现原子性。
image

正常情况:CPU每执行完一条指令都会例行检查是否有中断信号需要处理,如果有,则暂停运行当前这段程序,转而执行相应的中断处理程序。

CPU执行了关中断指令之后,就不再例行检查中断信号,直到执行开中断指令之后才会恢复检查,才会去执行关中断期间的外部中断程序。这样,关中断、开中断之间的这些指令序列就是不可被中断的,这就实现了“原子性”。以下都是进程控制相关的原语:

1. 进程的创建
允许一个进程创建另一个进程,此时创建者称为父进程,被创建的进程称为子进程。子进程可以继承父进程所拥有的资源。当子进程被撤销时,应将其从父进程那里获得的资源归还给父进程。此外,在撤销父进程时,必须同时撤销其所有的子进程。进程的创建以及引起进程创建的事件如下图所示:
image

进程创建完成后会进入就绪队列。
设备分配是通过在系统中设置相应的数据结构实现的,不需要创建进程,这是操作系统中I/O核心子系统的内容。

2. 进程的终止
image

注意是,先对其所占有的资源执行回收操作,然后再撤销PCB。

3. 进程的阻塞和唤醒
image

进程阻塞是进程自身的一种主动行为(挂起是被动的),也因此只有处于核心态的进程(拥有CPU),才可能将其转为阻塞态。阻塞原语(Block原语)和唤醒原语(Wakeup原语)是一对作用恰好相反的原语,必须成对使用。

4. 进程切换
对于通常的进程而言,其创建、撤销及要求由系统设备完成的I/O操作,都是利用系统调用而进入内核,再由内核中的相应处理程序予以完成的。进程切换同样是在内核的支持下实现的,因此可以说,任何进程都是在操作系统内核的支持下运行的,是与内核紧密相关的。进程切换是指处理机从一个进程的运行转到另一个进程上运行。
image

注意,进程切换与处理机模式切换是不同的。处理机模式切换时,处理机逻辑上可能还在同一进程中运行。若进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核时所保存的CPU现场,而无须改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变。

运行环境信息称为进程的上下文;处理机状态信息称为处理机的上下文。

无论哪个进程控制原语,要做的无非三类事情:

  1. 更新PCB中的信息(修改进程状态,保存/恢复运行环境)
  2. 将PCB插入合适的队列
  3. 分配/回收资源
    image

image

2.2.4 进程的组织
进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位。它由以下三部分组成,其中最核心的是进程控制块(PCB)。

1. 进程控制块
进程创建时,操作系统为它新建一个PCB,该结构之后常驻内存,任意时刻都可以存取,并在进程结束时删除。PCB是进程实体的一部分,也是进程存在的唯一标志。

进程执行时,系统通过其PCB了解进程的现行状态信息,以便对其进行控制和管理;进程结束时,系统收回其PCB,该进程随之消亡。操作系统通过PCB表来管理和控制进程。

在进程的整个生命期中,系统总是通过PCB对进程进行控制的,亦即系统唯有通过进程的PCB才能感知到该进程的存在。

2. 程序段
程序段就是能被进程调度程序调度到CPU执行的程序代码段。注意:程序可被多个进程共享,即多个进程可以运行同一个程序。

3.数据段
一个进程的数据段,可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间或最终结果。

2.2.5 进程的通信
进程通信是指进程之间的信息交换。进程通信需要操作系统支持,因为进程是分配系统资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立。
image

为了保证安全,一个进程不能直接访问另一个进程的地址空间。

PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方式方法主要有以下三类。

1. 共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。
image

注:通过“增加页表项/段表项”即可将同一片共享内存区映射到各个进程的地址空间中(第三章内容)。用户进程空间一般都是独立的,进程运行期间一般不能访问其他进程的空间,要想让两个用户进程共享空间,必须通过特殊的系统调用实现,而进程内的现场是自然共享进程空间的。

为避免出错,各个进程对共享空间的访问应该是互斥的。各个进程可使用操作系统内核提供的同步互斥工具(如P、V操作)。操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。

基于数据结构的共享
image

比如共享空间里只能放一个长度为10的数组。这种共享方式仅适用于传递相对少量的数据,速度慢、限制多,是一种低级通信方式。

基于存储区的共享
image

操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。

2. 消息传递(最广泛的使用方式)

进程间的数据交换以格式化的消息(Message)为单位(不同环境下,消息格式不同)。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方式实现进程通信。

在计算机网络中,消息又称为报文;在微内核与服务器之间的通信也都是采用了消息传递机制。

基于消息传递的通信方式属于高级通信方式,因其实现方式的不同,可进一步分为两类:
image

1.直接通信方式(点名道姓的消息传递)
发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
image

注:由于PCB是保存在操作系统内核中,所以消息队列也是在内核中。
2.****间接通信方式(以“信箱”作为中间实体进行消息传递)
发送进程把消息发送到某个中间实体,接收进程从中间实体取得消息。这种中间实体一般称为信箱,这种通信方式又称信箱通信方式。该通信方式广泛应用于计算机网络中,相应的通信系统称为电子邮件系统。
image

3. 管道通信
image

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道。
  2. 各进程要互斥地访问管道(由操作系统实现)。
  3. 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  4. 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  5. 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。对此,通常有两种解决方案:①一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案);②允许有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读数据(Linux 的方案)。
  6. 向管道(共享文件)提供输入的发送进程(即写进程),以字节流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程)则从管道中接收(读)数据。为了协调双方的通信,管道机制必须提供三方面的协调能力:互斥、同步、确定对方的存在。
  7. 写进程往管道写数据,即便管道没被写满,只要管道没空,读进程就可以从管道读数据。读进程从管道读数据,即便管道没被读空,只要管道没满,写进程就可以往管道写数据。
  8. 从管道读取数据是一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写更多的数据,管道只能采用半双工通信,即某一时刻只能单向传输,要实现父子进程双方互动通信,需要定义两个管道。
  9. 管道的底层数据结构是一个循环队列。
    在这里插入图片描述

2.2.6 线程概念和多线程模型
1. 线程的引入
还没引入进程之前,系统中各个程序只能串行执行。
image

image
如果说,在OS中引入进程的目的是为了使多个程序能并发执行,以提高资源利用率和系统吞吐量,那么,在OS中引入线程,则是为了减少程序在并发执行时所付出的时空开销,使OS具有更好的并发性,增加了并发度。

2. 线程的基本概念
线程最直接的理解就是“轻量级进程”(LWP),它是一个基本的CPU执行单元,也是程序执行流的最小单元,由线程ID、程序计数器、寄存器集合和堆栈组成。线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。

一个线程可以创建和撤销另一个线程,同个进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。

引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件等可以并发执行)。引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。线程则作为处理机的分配单元。

3. 线程与进程的比较

  • 调度:在传统的OS中,进程是资源分配、调度的基本单位。引入线程后,进程是资源分配的基本单位,线程是调度的基本单位。在同一进程中,线程的切换不会引起进程切换。在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换。
  • 拥有资源:不论是传统操作系统回收设有线程的操作系统,进程都是拥有资源的基本单位,而线程不拥有系统资源(只有一点必不可少的资源),但线程可以访问其隶属进程的系统资源。
  • 并发性:在传统的OS中,只有进程间并发。在引入线程后,各线程间也能并发,提升了并发度。
  • 系统开销:传统的进程间并发时,需要切换进程的运行环境,系统开销很大。而线程间并发时,如果是同一进程内的线程切换,则不需要切换进程环境,系统开销小。

4. 线程的属性
多线程操作系统把线程作为独立运行(或调度)的基本单位,此时的进程已不再是一个基本的可执行实体,但它仍具有与执行相关的状态。所谓进程处于“执行”状态,实际上是指该进程中的某线程正在执行。线程的主要属性如下:

  1. 线程是处理机调度的单位
  2. 多CPU计算机中,各个线程可占用不同的CPU
  3. 每个线程都有一个线程ID、线程控制块(TCB)
  4. 线程也有就绪、阻塞、运行三种基本状态
  5. 线程几乎不拥有系统资源
  6. 同一进程的不同线程间共享进程的资源
  7. 由于共享内存地址空间,线程没有自己独立的地址空间,同一进程中的线程间通信甚至无需系统干预,可以直接通过它们共享的存储空间进行通信
  8. 同一进程中的线程切换,不会引起进程切换
  9. 切换同进程内的线程,系统开销很小
  10. 切换进程,系统开销较大

5. 线程的实现方式
线程的实现可以分为两类:用户级线程(User-Level Thread,ULT)和内核级线程(Kernel-Level Thread,KLT)。内核级线程又称内核支持的线程。(按切换时是否依赖内核进行区分)

1.用户级线程(ULT)
历史背景:早期的操作系统(如:早期Unix)只支持进程,不支持线程。当时的“线程”是由线程库实现的。

在用户级线程中,有关线程管理(线程的创建、撤销和切换等)的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序可以通过使用线程库设计成多线程程序。在用户级线程的系统中,其调度仍是以进程为单位。
image

image

很多编程语言提供了强大的线程库,可以实现线程的创建、销毁、调度等功能。

  • 用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)。
  • 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
  • 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。“用户级线程”就是“从用户视角看能看到的线程”。
  • 优缺点
    • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。用户级线程的实现与OS无关,因为对于线程管理的代码是属于用户程序的一部分,所有的应用程序都可以对之进行共享。因此,用户级线程甚至可以在不支持线程机制的操作系统平台上实现。
    • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行,因为内核每次分配给一个进程的仅有一个CPU,因此,进程中仅有一个线程能执行,在该线程放弃CPU1之前,其他线程只能等待。

内核级线程(KLT,又称“内核支持的线程”)

在内核级线程中,线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。内核为基础及其内部的每个线程维护上下文信息,调度也在内核基于线程架构的基础上完成,调度是以线程为单位。
image

  • 内核级线程的管理工作由操作系统内核完成。
  • 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
  • 操作系统会为每个内核级线程建立相应的TCB(Thread Control Block,线程控制块),通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”。
  • 优缺点
    • 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
    • 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态(用户进程的线程在用户态运行,而线程调度和管理在内核实现的),因此线程管理的成本高,开销大。

总结:不论是进程还是线程,都必须直接或间接地取得内核的支持。由于内核支持线程可以直接利用系统调用为它服务,故线程的控制相当简单;而用户级线程必须借助于某种形式的中间系统的帮助才能取得内核的服务,故在对线程的控制上要稍微复杂些。

6. 多线程模型
在支持内核级线程的系统中,根据用户级线程和内核级线程的映射关系,可以划分为几种多线程模型。

1.一对一模型
image

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

  • 优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。

  • 缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大。

2.多对一模型
image

  • 即多个用户级线程映射到一个内核级线程。这些用户线程一般属于一个进程,运行在该进程的用户空间,对这些线程的调度和管理也是在该进程的用户空间中完成。仅当用户线程需要访问内核时,才将其映射到一个内核控制线程上,但每次只允许一个线程进行映射。

  • 优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高。

  • 缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。

  • 重点重点重点:

  • 操作系统只“看得见”内核级线程,因此只有内核级线程才是处理机分配的单位。

3.多对多模型
image

n 用户及线程映射到 m 个内核级线程(n >= m)。每个用户进程对应 m 个内核级线程。

克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

可以这么理解:

  • 用户级线程是“代码逻辑”的载体。
  • 内核级线程是“运行机会”的载体。
  • 内核级线程才是处理机分配的单位。例如:多核CPU环境下,上面这个进程最多能被分配两个核。一段“代码逻辑”只有获得了“运行机会”才能被CPU执行。内核级线程中可以运行任意一个有映射关系的用户级线程代码,只有两个内核级线程中正在运行的代码逻辑都阻塞时,这个进程才会阻塞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/922246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大型网站开发工具北京 外贸网站

活动介绍: 「数据仓库技术交流群」已经正式启动每日SQL打卡,帮助大家扎实基础,努力工作之余,别忘了自我提升。另有超多CSDN 周边礼物相送。 欢迎报名和邀请小伙伴参与,一个人可能走得很快,但一群人会走得很…

wordpress 网站打开速度慢郑州做网站服务器

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 文章目录 一 、Linux中的用户1.1 Linux用户分类1.2 用户转换1.3 指令提权 二、Linux权限管…

做好的网站php网站文件下载怎么做

Backpropagation计算过程举例 初始权重(initialize weights)是随机产生的(如-1~1之间) 初始化可以选择均值为0,方差为1/n_in的正态分布,n_in为输入的实例个数,Python中可使用np.random.normal函数来初始化权重: np.random.normal…

受欢迎的网站建设教程企业文化怎么写

ViewPager控件允许页面在水平方向左右滑动,就像翻书、翻报纸,Android提供了已经分装好的控件。对于ViewPager来说,一个页面就是一个项(相当于ListView的一个列表项),许多页面组成ViewPager的页面项。 List…

网站建设亿金手指花总12自动更新的网站建设

前言 小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第四次作业。 文章目录 前言1.图像去畸变2.双目视差的使用3.矩阵微分4.高斯牛顿法的曲线拟合实验 1.图像去畸变 现实⽣活中的图像总存在畸变。原则上来说,针孔透…

获得网站源文件小清新网站源码

一、Mybaits的优点: 1、基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任 何影响,SQL 写在 XML里,解除 sql与程序代码的耦合,便于统一管理;提供 XML 标签,支持…

凡科网站空间慢专做蓝领招聘网站有哪些

python中numpy矩阵运算操作大全(非常全) //2019.07.10晚python矩阵运算大全1、矩阵的输出形式:对于任何一个矩阵,python输出的模板是:import numpy as np #引入numpy模块np1np.array([[1,2,3],[1,3,4],[1,6,2]...]) #数…

AtCoder AGC073 A 题解

题目链接:https://atcoder.jp/contests/agc073/tasks/agc073_a 参考出题人题解 首先理解题意可以破圆为链,直接枚举肯定会超时,考虑将转化成期望,对于某一段黑色区域,当某区域包含一段弧时,我们给每个端点加上 \…

网站flash制作教程收录平台

FreeRTOS-事件标志组 一、事件标志组简介二、事件标志组API函数三、事件标志组实验 一、事件标志组简介 事件标志位:用一个位来表示事件是否发生,裸机中的中断标志位等等事件标志组:是一组事件标志位的集合,简单认为就是一个整数…

怎么开个人网站阿里云 wordpress 响应时间

Redis 实现分布式Session 登录 借助 Redis 对 Session 信息进行统一的存储和管理,这样无论请求发送到哪台服务器,服务器都会去同一个 Redis 获取相关的 Session 信息,这样就解决了分布式系统下 Session 存储的问题。 【发送短信】校验手机号…

什么浏览器好用可以看任何网站android开发wordpress

「Author:Runsen」当初学Python的时候,把一些标准库和第三方开源库学的七零八落,不成系统,正好趁这个机会来系统的整理一下,先从Python常用的标准库os开始吧。osOS模块简单的来说它是一个Python的系统编程的操作模块&a…

童装网站建设目标网站建设公司做销售前景好不好

文章目录 前言一、抽象类和接口对比二、举例说明三种情况1.接口实现类接口 2.抽象类实现类抽象类实现类(子类) 3.抽象类实现接口接口抽象类三个实现类 总结 前言 抽象类和接口其实都是抽象的一种,那么他俩有何异同呢? 抽象类实现接口的意义何在? 一、抽象类和接口对比 接口…

wordpress下载网站西安哪里可以做公司网站

实时监控: 可视化大屏可以实时监控通讯网络的运行状态和性能指标。通过可视化展示网络的拓扑结构、设备状态、带宽利用率、延迟等数据,运维人员可以及时发现和解决网络故障,保障通讯网络的稳定性和可靠性。 故障诊断与分析: 可视…

山西企业网站建设手机app制作网站

真格这周是学习使用了不少,功能算是很不错,但在做的时候也发现了一个问题: 数据缺失:我在做回测,要求获取每天的delta值,并从中筛选条件值时,报错,显示无数据。不得不使用pass,影响我的回测连贯性。 现在开始讲下,我做的几个功能函数: 算起来,挺烦的,就是各种细节…

本地网站服务器搭建360网站建设基本情况

1 Ansible 介绍 Ansible是一个配置管理系统configuration management system, python 语言是运维人员必须会的语言, ansible 是一个基于python 开发的(集合了众多运维工具 puppet、cfengine、chef、func、fabric的优点)自动化运维工具, 其功能实现基于ss…

雄安免费网站建设公司智能建站代理

目录 问题描述 解决方案 方案1: 方案2: 结果示意图 问题描述 做UI的时候,我们很多时候需要给绘制一个圆角边框,初识Qt绘制的童鞋,可能绘制出来的圆角边框很是锯齿,而且粗细不均匀,如下图&…

郑州网站建设兄长好晋城客运东站网站开发

获取源码或者论文请私信博主 演示视频: 基于微信小程序的中医体质辨识文体活动的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java s…

郑州网站排名公司微信营销的方式有哪些

摘录自:PendingIntent详解 如何判断两个PendingIntent对等: 两个PendingIntent对等是指它们的operation一样, 且其它们的Intent的action, data, categories, components和flags都一样。但是它们的Intent的Extra可以不一样。 主要常量 FLAG_CANCEL_CUR…

Monsters And Spells

题目大意 给定一个长度为 \(n\) 的序列 \(a\),你需要构造一个序列 \(b\) 满足:\(b_0 = 0\) 对于任意一个 \(1 < i < n\),\(b_i \ge a_i\) 对于任意一个 \(1 < i < n\),\(b_i\) 为 \(0\),\(1\) 或 \(b…