- 概念:控制和管理整个计算机系统的硬件和软件资源
- 合理地组织调度计算机的工作和资源的分配,提供给用户和其他软件方便的接口和环境,它是计算机系统中最基本的系统软件。
- 功能:处理机管理、内存管理、文件系统、设备管理
- 特征
- 并发(宏观上是同时发生的,但微观上是交替发生的)
- 共享:共享即资源共享,是指系统中的资源可供内存中多个并发执行的进程共同使用。
- 互斥共享方式
- 同时共享方式
- 虚拟:虚拟是指把一个物理上的实体变为若干个逻辑上的对应物。
- 异步:在多道程序环境下,允许多个程序并发执行,但由于资源有限,进程的执行不是一贯到底的,而是走走停停,以不可预知的速度向前推进,这就是进程的异步性。
- 并发和共享是操作系统两个最基本的特征,两者之间互为存在的条件
- 处理机,也称为*处理单元(CPU),是计算机的核心组件,负责执行程序指令并进行数据处理。
- 包含:算术逻辑单元(ALU)和控制单元(CU)
- 向上层提供
- 命令接口
- 联机命令接口:即交互式命令接口,适用于分时或实时系统。
- 脱机命令接口:即批处理命令接口,适用于批处理系统
- 程序接口
- 程序接口由一组系统调用(也称广义指令)组成。
- 系统调用命令又称广义指令。
- GUl:图形化用户接口(Graphical User Interface)
- 用户可以使用形象的图形界面进行操作,而不再需要记忆复杂的命令、参数。
- 用户态和内核态
- 用户态:CPU处于用户态,此时CPU只能执行非特权指令。一般是用户自编程序
- 非特权指令:允许用户直接使用的指令,它不能直接访问系统中的软硬件资源。
- 内核态:CPU处于核心态,此时CPU可以执行特权指令,切换到用户态的指令也是特权指令。一般是操作系统内核程序。
- 特权指令:不允许用户直接使用的指令,如/O指令、置中断指令,存取用于内存保护的寄存器、送程序状态字到程序状态字寄存器等的指令。
- 用户态与内核态的相互切换
- 内核态---->用户态:通过执行特权指令(如修改程序状态字PSW),操作系统可以切换到用户态,允许用户程序运行。
- 用户态---->内核态:用户程序通过系统调用或访管指令(如int指令)请求操作系统服务,产生中断事件,系统从用户态切换到内核态,以便执行相关服务。
- 现代操作系统是靠中断驱动的软件
- 中断和异常
- 中断
- 由外部设备或硬件发出的信号,通知CPU需要处理的事件。
- 让操作系统内核强行夺回CPU的控制权。
- 使CPU从用户态变为内核态。
- 通过改变屏蔽字可以实现多重中断,从而使得中断处理更加灵活。
- 异常
- 异常是由程序内部事件引发的,通常是由错误或特定条件(如非法指令、除零错误、访问违规)引起的。
- 有故障、自陷、终止(硬件中断,CPU无法继续执行)
- 故障异常和自陷异常属于软件中断(程序性异常),终止异常和外部中断属于硬件中断。
- 异常不能被屏蔽,一旦出现,就应立即处理。
- Trap:通常与系统调用或自陷相关,返回的是第 i+1 条指令。
- Fault:与执行过程中出现的错误相关,通常会尝试重新执行第 i 条指令。
- 对中断和异常的具体处理过程由操作系统(和驱动程序)完成。
- 系统调用
- 系统调用是用户程序与操作系统内核之间的接口,用于请求操作系统提供的服务。
- 它允许用户程序安全地访问硬件资源和执行特权操作。
- 分类
- 设备管理
- 文件管理
- 进程控制
- 内存管理
- 涉及步骤
- 触发系统调用
- 参数传递
- 执行内核服务
- 返回结果
- 操作系统引导过程
1.加电自检(POST):计算机启动时,BIOS(基本输入输出系统)会进行硬件自检,确保所有硬件设备正常工作。
2.加载引导程序:完成自检后,BIOS会查找并加载启动设备(如硬盘、SSD)上的引导程序,通常是引导扇区(Boot Sector)中的引导扇区代码。
MBR(主引导记录)、PBR(分区引导记录)
BIOS从启动设备的第一个扇区(MBR)加载代码,MBR负责识别活动分区。
MBR代码找到活动分区后,加载该分区的第一个扇区(PBR),PBR包含了加载操作系统的具体代码。
3.引导加载程序:引导程序会加载操作系统内核到内存中。它可能会提供一个菜单,允许用户选择不同的操作系统或内核配置。
4.内核初始化:操作系统内核被加载后,开始初始化系统资源,包括内存管理、进程管理和设备驱动加载等。
5.启动系统进程:内核完成初始化后,创建系统进程(如init或systemd),并开始用户空间的初始化,最终启动用户界面。
- 操作系统最终被加载到 RAM 中。
- 虚拟机
- 使用虚拟化技术,将一台物理机器虚拟化为多台虚拟机器(Virtual Machine,VM),每个虚拟机器都可以独立运行一个操作系统。
- 分类
- 第一类虚拟机程序
- 第一类虚拟机管理程序就像一个操作系统,因为它是唯一一个运行在最高特权级的程序。
- 这些虚拟机是裸机硬件的精确复制品。
- 直接运行在硬件之上,能直接控制和分配物理资源
- 虚拟内核态:虚拟机作为用户态的一个进程运行,不允许执行敏感指令。然而,虚拟机上的操作系统认为自己运行在内核态(实际上不是),称为虚拟内核态。
- 第二类虚拟机程序
- 它是一个依赖于Windows、Linux等操作系统分配和调度资源的程序,很像一个普通的进程。如VMware Workstation。
- 运行在底层硬件上的操作系统称为宿主操作系统。
- 运行在虚拟机管理程序上的操作系统称为客户操作系统。
- 第一类虚拟机程序
一、进程控制
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
- 作业:用户向计算机提交的一项任务,是静态的,它通常是一个批处理程序或一个后台程序。
- 进程实体的组成
- 程序控制块PCB
- PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建PCB,当进程结束时,会回收其PCB。
- 进程标识符PID:唯一的、不重复
- 用户UID:
- 进程控制和管理信息
- 资源分配清单
- 处理机相关信息
- 程序段(指令序列)
- 数据段:运行过程中产生的各种数据
PCB 存于内存的内核区,注意内存的内核区和 OS 的内核态的区别,内核程序运行在内核态。
PCB 是给操作系统用的,程序段和数据段是给进程自己用的。
引入进程实体的概念后,可把进程定义为是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
- 进程的状态与切换
- 进程的控制就是实现进程状态的切换,通过原语实现。
- 低级通信方式:PV操作。高级通信方式:共享存储、消息传递、管道通信。
- 线程和多线程
- 线程可理解为轻量级进程,它是一个基本的CPU执行单元,也是程序执行流的最小单位。
- 引入进程的目的是更好地使多道程序并发执行,提高资源利用率和系统吞吐量
- 线程是处理机调度的单位
- 线程也有就绪、阻塞、运行三种基本状态
- 实现方式
- 用户级线程,用户级线程对操作系统透明。线程切换可以在用户态下即可完成
- 内核级线程,内核级线程的管理工作由操作系统内核完成。
- 当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。
- 多线程模型
- 一对一模型:一个用户级线程映射到一个内核级线程
- 多对一模型:多个用户级线程映射到一个内核级线程。且一个进程只被分配一个内核级线程。
- 多对多模型:n用户及线程映射到m个内核级线程(n>=m)。每个用户进程对应m个内核级线程。
- 克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程。
- 用户程序启动时,通常仅有一个称为“初始化线程”的线程正在执行,其主要功能是用于创建新线程。
- 线程创建函数执行完后,将返回一个线程标识符。
- 三层调度
- 高级调度(作业调度)
- 中级调度(内存调度),频率中等,挂起态→就绪态,阻塞挂起→阻塞态
- 低级调度(进程调度),进程调度是最基本的,不可或缺。频率最高,就绪态→运行态
- 调度算法
- 先来先服务(FCFS)
- 短作业优先(SJF),饥饿现象
- 高响应比优先(HRRN)
- 时间片轮转调度算法(RR)
- 优先级调度算法,可能导致饥饿
- 系统进程优先级高于用户进程
- 前台进程优先级高于后台进程
- 操作系统更偏好I/O型进程(或称I/O繁忙型进程)
- 临界区互斥的基本方法
- 软件实现方法
- 单标志法------>不遵循“空闲让进”
- 双标志先检查法------>不遵循"忙则等待
- 双标志后检查法------>不遵循“空闲让进、有限等待”
- Peterson算法------>不遵循“让权等待”
- 硬件实现方法
- 中断屏蔽方法
- 硬件指令法:TS指令,Swap指令
- 互斥锁
- 信号量
- 死锁: 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”。
产生必要条件: 互斥资源、不可剥夺、请求和保持、循环等待
处理策略- 死锁预防。设置某些限制条件,破坏产生死锁的4个必要条件中的一个或几个。
- 避免死锁。在资源的动态分配过程中,用某种方法防止系统进入不安全状态。
- 银行家算法:: 在分配资源前,预先判断这次分配是否会导致系统进入不安全状态
- 死锁的检测及解除。无须采取任何限制性措施,允许进程在运行过程中发生死锁。通过系统的检测机构及时地检测出死锁的发生,然后采取某种措施解除死锁。
三、内存管理
-
负责高效、安全地分配、跟踪和回收计算机内存资源。
-
主要功能
- 内存空间的分配与回收
- 内存空间的扩充
- OS 利用虚拟内存技术或自动覆盖技术使得系统运行很大的程序,从逻辑上扩充内存。
- 地址转换
- 逻辑地址到物理地址的转换
- 内存保护
- 保证各进程在各自存储空间内运行,互不干扰。
- 在CPU中设置一对上、下限寄存器,存放用户作业在主存中的下限和上限地址,每当CPU要访问一个地址时,分别和两个寄存器的值相比,判断有无越界。
- 采用重定位寄存器(又称基地址寄存器)和界地址寄存器(又称限长寄存器)来实现这种保护。
-
连续分配管理方式:单一连续分配、固定分区分配、动态分区分配
- 固定分区会产生内部碎片,动态分区会产生外部碎片
-
基本分页存储管理
- 把主存空间划分为大小相等且固定的块,块相对较小,作为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。
-
基本分段式存储管理
- 分页管理方式是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能。分页通过硬件机制实现,对用户完全透明。
-
虚拟内存管理
- 局部性原理
- 时间局部性:程序中的某条指令一且执行,不久后该指令可能再次执行
- 空间局部性:一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问
- 硬件支持
- 一定容量的内存和外存。
- 页表机制(或段表机制),作为主要的数据结构。
- 中断机构,当用户程序要访问的部分尚未调入内存时,则产生中断。
- 地址变换机构,逻辑地址到物理地址的变换。
- 页面置换算法
- 访问的页面不在内存中而需将其调入,但内存已无空闲空间时,就需要从内存中调出一页程序或数据,送入磁盘的对换区,选择调出页面的算法就称为页面置换算法。
- 局部性原理
-
涉及硬件
- 内存管理单元MMU
- 硬盘驱动器或固态硬盘
- 处理器中的寄存器
- cache(L1,L2,L3)
四、文件管理
- 文件是以计算机硬盘为载体的存储在计算机上的信息集合,在用户进行的输入、输出中,以文件位基本单位。
- 文件控制块
- 文件控制块(FCB)是用来存放控制文件需要的各种信息的数据结构,以实现“按名存取"
- 文件的基本操作
- 打开文件表
- 创建文件(create系统调用)
- 删除文件(delete系统调用)
- 读文件(read系统调用)
- 写文件(write系统调用)
- 打开文件(open系统调用)
- 打开文件时并不会把文件数据直接读入内存。
- 关闭文件(close系统调用)
----------------还有很多
五、IO设备管理
- I/O设备是将数据输入到计算机中,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。
- I/O接口(设备控制器)位于CPU与设备之间,它既要与CPU通信,又要与设备通信,还要具有按CPU发来的命令去控制设备工作的功能。
- I/O端口(具体的硬件地址)
- I/O端口是指设备控制器中可被CPU直接访问的寄存器,主要有以下三类寄存器
- 数据寄存器:实现CPU和外设之间的数据缓冲。
- 状态寄存器:获取执行结果和设备的状态信息,以让CPU知道是否准备好。
- 控制寄存器:由CPU写入,以便启动命令或更改设备模式。
- 独立编址:只有操作系统使用特殊的I/O指令才能访问端口。
- 统一编址:又称内存映射I/O,每个端口被分配唯一的内存地址。
- I/O控制方式
- 程序直接控制方式:计算机从外部设备读取的每个字,CPU需要对外设状态进行循环检查,直到确定该字已经在I/O控制器的数据寄存器中。
- 中断驱动方式:允许I/O设备主动打断CPU的运行并请求服务,从而"解放” CPU
- DMA方式:在I/O设备和内存之间开辟直接的数据交换通路,彻底“解放”CPU。
- 层次式结构的I/O软件:
- 用户层软件
- 实现了与用户交互的接口
- 用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务
- 设备独立性软件
- 设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。
- 设备驱动程序
- 与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
- 中断处理程序
- 当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。
- 硬件
- 应用程序I/O接口
- 字符设备接口
- 字符设备是指数据的存取和传输是以字符为单位的设备,如键盘、打印机等。基本特征是传输速率较低、不可寻址,并且在输入输出时通常采用中断驱动方式。
- 块设备接口
- 块设备是指数据的存取和传输是以数据块为单位的设备,典型的块设备是磁盘。基本特征是传输速率较高、可寻址。磁盘设备的I/O常采用DMA方式。
- 网络设备接口
- 许多操作系统提供的网络I/O接口为网络套接字接口,套接字接口的系统调用使应用程序创建的本地套接字连接到远程应用程序创建的套接字,通过此连接发送和接收数据。
- 阻塞/非阻塞I/O
- 阻塞I/O:当用户进程调用I/O操作时,进程就被阻塞,需要等待I/O操作完成,进程才被唤醒继续执行。
- 非阻塞I/O:用户进程调用I/O操作时,不阻塞该进程,该I/O调用返回一个错误返回值,通常,进程需要通过轮询的方式来查询I/O操作是否完成。