操作系统-概念复习

操作系统的基本概念

操作系统是计算机系统中最基本的系统软件。

操作系统的基本特征包括并发、共享、虚拟和异步。并发是指两个或者多个事件在同一时间间隔内发生;共享指多个并发进程共同使用系统内的资源;虚拟包括虚拟处理器、虚拟内存和虚拟外设,指物理设备到逻辑设备的过程;异步指多个进程之间的执行并不是顺序的,可能是互相交错的,操作系统必须保证在同样的条件下进程多次运行的结果相同。

并发和共享是操作系统两个最基本的特征。

操作系统是计算机资源的管理者:包括处理器管理、内存管理、文件管理、设备管理;操作系统是用户和计算机硬件系统之间的接口:一类是通过终端输入的命令接口(联机接口和脱机接口),一类是由一组系统调用(也称广义指令)构成的程序接口;操作系统实现了对计算机资源的扩充。

单道批处理系统:系统对作业的处理是成批进行的,但内存中始终只保持一道作业。自动性、顺序性、单道性。资源利用率低。

多道批处理系统:内存中允许保持多个作业并交替运行。多道、宏观上并行、微观上串行。资源利用率高。用户响应时间长,不具备人机交互能力。

分时操作系统:按时间片依次运行每个内存中的作业。同时性、交互性、独立性、及时性。具备很好的人机交互能力,不能够对某些特殊任务在规定的极短时间内做出处理(导弹制导、在线交易)。

实时操作系统:某个动作必须在规定时间内完成而不能有轻微违反称为硬实时系统,反之称为软实时系统。及时性、可靠性。

个人计算机操作系统:比如 Linux 和 Windows。

指令被划分为特权指令和非特权指令,CPU 的运行模式被划分为内核态和用户态。操作系统内核工作在内核态。在实际操作系统中,从用户态进入内核态的唯一途径是中断或异常。

中断也称外中断,是指来自 CPU 执行指令外部的事件。异常也称内中断,是来自 CPU 执行指令内部的,包括溢出、缺页、越界和陷入指令(trap)。

外中断分为可屏蔽中断和不可屏蔽中断;异常分为故障,自陷和终止。

系统调用是操作系统提供给用户的一些子功能,必须运行在内核态,包括进程管理、进程通信、内存管理、文件管理、设备管理。

如果程序的运行从用户态跳转到核心态,会用到访管指令。访管指令不是特权指令。

分层法:把操作系统分为若干层次。便于系统的调试和验证、容易扩充和维护。合理定义各个层次比较困难,效率较差。

模块化:把操作系统划分为有一定独立性的模块及其子模块。提高了操作系统的正确性和可维护性、增强了操作系统的可适应性、加速了开发过程。模块间接口缺少标准、各模块设计者齐头并进。

宏内核:将系统的主要功能模块作为一个紧密联系的整体运行在内核态,目前主流操作系统都是宏内核。

微内核:只把最基本的功能保留在内核。微内核-服务器模式。只有微内核运行在内核态。机制和策略分离:微内核通常具有进程管理(进程优先级队列属于机制放在内核,进程调度则属于策略放在服务器)、低级存储器管理(页表、地址转换属于机制,调页算法属于策略)、中断处理(对中断的响应放在内核,中断后运行的程序放在服务器)。扩展性和灵活性、安全性和可靠性、可移植性。性能问题。

操作系统的引导(启动)过程:1. 激活CPU读取 ROM 中的 boot 程序,开始执行 BIOS 的指令。 2. 启动 BIOS 后开始硬件自检。 3. 硬件自检后 BIOS 读取 Boot Sequence,启动第一个存储设备的 MBR。 4. 加载 MBR 到内存。 5. 扫描 MBR 包含的硬盘分区表,并加载活动分区(含有操作系统的分区)。 6. 加载分区引导记录 PBR,寻找并激活活动分区中的操作系统引导程序。 7. 加载活动分区中的启动管理器。 8. 加载操作系统。

第一类虚拟机:虚拟机在裸机上运行,向上提供若干虚拟机。

第二类虚拟机:运行在宿主操作系统上,向上提供客户操作系统,比如 VMWare。

进程

进程控制块 PCB 是进程存在的唯一标志。

一个进程从运行态变成阻塞态是主动的行为,但是从阻塞态到就绪态是被动的,需要其他进程的协助(唤醒)。

进程控制块 PCB:进程描述信息、进程控制和管理信息、资源分配信息、处理机相关信息。PCB 的组织方式有链接方式和索引方式。

进程的创建:1. 为新进程分配一个 pid,申请一个空白 PCB。 2. 为进程分配除了 CPU 以外的资源。 3. 初始化 PCB。 4. 把进程放入就绪队列。

进程的终止:1. 根据 pid 检索出对应的 PCB。 2. 如果对应进程在运行,停止该进程及其子孙进程。 3. 回收进程分配的所有资源。 4. 回收 PCB 资源。

共享存储:在内存中划分一段共享空间,多个进程通过对共享空间的读写完成通信。

消息传递:1. 直接通信:发送进程直接把消息发送给接收进程,并把消息挂载到接收进程的消息缓冲区。2. 间接通信:发送进程把消息发送给信箱,接收进程从信箱获取消息。

管道:管道是一种特殊的文件(pipe),用于连接一对读写进程。管道可以理解成共享存储的优化。管道是半双工的,如果想要同时接发消息,需要定义两个管道。

线程是一种轻量级线程。线程自己只拥有一点运行时必需的资源。线程可以与其他线程共享进程拥有的全部资源。进程只作为除了 CPU 之外的系统资源的分配单元,线程则是 CPU 的分配单元,是调度的独立单位。

线程控制块 TCB:1. 线程标识符。 2. 一组寄存器(程序计数器、状态寄存器、通用寄存器)。 3.线程状态。 4. 优先级。 5. 专有存储区。 6. 堆栈指针。TCB 的内容是不共享的。

用户级线程:线程的管理全部在用户空间中完成,内核意识不到线程的存在。应用程序被设计成一个多线程的程序。对于用户级线程的程序,由于内核不知道线程,所以调度仍然是以进程为单位(内核的进程此时时用户程序的线程,100 个线程的进程 B 比 1 个线程的进程 A 要多分配 CPU)。节省切换态开销,调度算法是进程专用的,与操作平台无关。阻塞问题,不能发挥多处理机优势。

内核级线程:线程管理的所有工作在内核中进行。没有阻塞问题。能发挥多处理机优势。切换核心态开销大。

组合方式:用户级线程和内核级线程的组合。

线程库是编程语言为程序员提供的管理线程的 API 集合。POSIX Pthreads、Windows API、Java。

高级调度:从外存把作业调度进内存。

中级调度:把内存中暂时不能运行的进程调度到外存。

低级调度:内存内的作业调度。频率很高。

CPU 利用率 = CPU 有效工作时间 / (CPU 有效工作时间 + CPU 空闲时间)

吞吐量 = 单位时间内 CPU 完成作业数量

周转时间 = 完成作业的时间 - 提交作业的时间

带权周转时间 = 周转时间 / 作业实际运行时间

响应时间 = 首次响应时间 - 提交时间

不能进行作业的调度:1. 在中断处理的过程中。 2. 在操作系统内核临界区中。 3. 在需要完全屏蔽中断的原子操作中。

先来先服务调度算法 FCFS:非抢占的。有利于 CPU 繁忙型作业,不利于 I/O 繁忙型作业。

短作业优先调度算法 SJF:选择估计运行时间最短的作业。非抢占的。不利于长作业,未考虑作业的紧迫程度,不一定能实现。

优先级调度算法:抢占/非抢占,静态优先级(在进程创建的时候就确定了)/动态优先级(根据进程情况动态调整)。系统进程 > 用户进程,I/O 型进程 > 计算型进程。

高响应比调度算法:响应比 = (等待时间 + 要求服务的时间)/ 要求服务时间

时间片轮转调度算法:抢占。时间片过大就退化为 FCFS。

多级队列调度算法:不同的队列可以是不同优先级,队列内部也可以是不同优先级;队列之间的调度算法和队列内的调度算法可以不同。

多级反馈队列调度算法:设置多个就绪队列,每个队列的时间片大小不同,优先级越高的队列时间片越小,每个队列内部采用 FCFS 调度,每次从优先级最高的队列中取出进程,如果在时间片内没有完成,那么就把这个进程插入到低一级的队列中,以此类推。当进程最后被降到 n 级队列时不在下降,此时等价于时间片轮转算法。抢占式的,如果有新进程进入高等级队列,立刻挂起当前进程。

一次仅允许一个进程使用的资源是临界资源。在每个进程中,访问临界资源的代码是临界区。

一个好的操作系统内的互斥机制应该满足:1. 空闲让进。 2. 忙则等待。 3. 优先等待。 4. 让权等待。

软件方法:单标志法(turn,必须交替执行)、双标志法先检查(flag,会同时进入临界区)、双标志法后检查(flag,会死锁)、Peterson's Algorithm。理解软件方法对 P V 操作有帮助。

硬件方法:中断屏蔽、TestAndSet 方法、Swap 方法

同步问题参考操作系统-同步问题分析

在设计算法时有个原则:不在临界区内操作那些不属于临界资源的数据。

死锁产生的原因:系统资源的竞争、进程推进顺序非法

死锁产生的必要条件:1. 互斥资源。 2. 请求并保持。 3. 不剥夺。 4. 循环等待。

死锁预防:破坏死锁产生的必要条件。1. 互斥资源不好破坏。 2. 使用预先静态分配一次性分配所有所需资源。 3. 允许剥夺资源。 4. 按顺序(编号递增)请求资源。

死锁避免:避免操作系统进入不安全状态。不安全状态是死锁状态的必要条件。

死锁的检测和解除:允许死锁发生,检测后消除死锁。

银行家算法 = 试探分配 + 安全性检查

死锁定理:系统状态为死锁当且仅当资源分配图不可简化。

内存管理

把用户源程序变为可在内存中执行的程序需要:编译、链接、装入。内存管理主要讨论程序的装入问题。

绝对装入:在编译时就知道程序将要驻留在内存的某个位置,编译器产生绝对地址的目标代码。只适用于单道程序环境。

可重定位装入:多道程序环境下,在装入时对目标程序中的指令和数据地址进行修改。

动态运行时装入:把地址转换推迟到程序段真正运行时再执行。有利于程序段的共享。

覆盖:把活跃部分放在固定区,其余部分按调用顺序依次放在覆盖区。已经成为历史。

交换:中级调度,对内存和外存中的进程进行调入调出。现在仍在使用。

单一连续分配:在用户区内存中只有一道作业。

固定分区分配:把用户内存空间划分为多个若干固定大小区域。需要覆盖技术,会造成内部碎片。

动态分区分配:首次适应算法(内存的低地址区域会出现很多的无法利用的小空闲区),循环首次适应算法(在内存空间的尾部产生碎片),最佳适应算法(会产生最多的外部碎片),最差适应算法(很快导致没有可用的大空闲块)。

伙伴系统:这里的伙伴系统是一种动态分区分配方法,和 Linux 中管理物理页框的伙伴系统有一些差别。

以上的所有分配方法都是连续存放的,分页机制和分段机制则是非连续存放的。分页机制本身又分为基本分页和请求分页。基本分页机制中,属于某个进程的所有页一次性被装入内存;在请求分页中,只有当发生缺页错误(异常中断)时才会在中断处理中调入某个页面。

局部性原理:空间局部性和时间局部性。

虚拟内存的“虚拟”指这种机制提供的一个虚拟的比实际物理容量大得多的内存。

虚拟内存的实现建立在离散分配(非连续)的内存管理方式的基础上,不是说连续的分配方式不能够支持虚拟内存的实现,而是连续分配方式带来的碎片问题会造成极大浪费,不合理。

虚拟内存的实现方式:请求分页、请求分段、请求段页式。

页表项:页号 | 物理块号 | 状态位/有效位 | 访问次数 | 修改位/脏位 | 外存地址

每个进程在逻辑上拥有由地址结构决定的整个逻辑地址空间,在虚拟内存机制中实际上还要为每个进程分配一定数量的物理页框,即内存分配策略:固定分配局部替换策略(平均分配、按比例分配、优先级分配)、可变分配全局替换、可变分配局部置换(如果某个进程频繁缺页中断,那么就多分配一点直到缺页率趋于适当程度;如果很长时间不发生缺页中断,尝试减少分配而不引起缺页率剧烈波动)。

请求分页中的外存分为文件区(用于存放文件)、对换区/交换区(用于存放交换页面)。文件区采取离散分配方式,交换区采取连续分配方式(为了提高I/O效率)。

最佳置换算法 OPT:置换未来最长时间内不被访问的页面。

先进先出置换算法 FIFO。

最近最久未使用算法 LRU:置换最长时间没有使用过的页面。

两次机会算法/时钟置换算法 CLOCK:1. 简单的 CLOCK 算法:为每个页框分配一个访问位,当页框内页面被访问的时候访问位置 1,所有页面被组织成一个循环队列,从替换指针开始,当有一页被替换时,检查其访问位,如果是 1,那么置 0,指针向后,否则把该页替换,指针向后。 2. 改进型 CLOCK 算法:每个页框都有一个元组,(访问位,修改位),替换过程中 00 > 01 > 10 > 11。

频繁的页面替换称为抖动/颠簸。

工作集是区间 [t - Δ + 1, t] 内使用的页号。Δ 是工作集窗口大小。

文件管理

文件控制块 FCB 是用来存取文件需要的各种信息的数据结构。

文件描述信息单独形成一个称为索引节点 inode 的数据结构,文件目录中的每个目录项仅由文件名和指向该文件 inode 的指针构成。

磁盘索引节点指存放在磁盘上的 inode。每个文件有一个唯一的磁盘索引结点。内存索引节点存放在内存中,当一个文件被打开时,要把其磁盘索引节点复制到内存。

在文件使用之前需要通过系统调用 open 显式地打开它。

系统打开文件表和进程打开文件表。系统打开文件表为每个条目(文件)关联一个打开计数器。

一旦完成 FCB 在磁盘上的定位,系统不再使用文件名。打开文件表的索引称为文件描述符/文件句柄,一旦文件被打开,所有文件操作都可以通过打开文件表进行。

image

每个打开文件具有关联信息:文件指针(系统跟踪的上次读写位置)、文件打开计数、文件磁盘位置、访问权限。

文件保护通过口令保护、加密保护和访问控制完成。

操作系统为每个文件和目录维护一个访问控制列表 ACL 用来实现根据用户身份的访问控制。

文件的逻辑结构包括:无结构文件(流式文件)、有结构文件。

顺序文件:对记录进行批量操作时效率最高,随机存取效率较低。

索引文件:建立一张索引表。

索引顺序文件:对于 N 条记录的顺序文件,平均查找是 N/2 次;对于索引顺序文件,平均查找是 根号N 次。

直接文件/散列文件:Hash 值决定物理地址。

文件的物理结构包括:连续分配、连接分配、索引分配。

连续分配:文件在磁盘上占有一组连续的块。目录中记录文件的开始地址和文件长度。实现简单,存取速度快。文件长度不好增加,反复增删文件后会产生外部碎片。

image

链接分配:隐式链接:目录项中含有文件的第一块和最后一块。只适合顺序访问。显式链接:在文件分配表中记录所有的盘块对应的下一块。

image

image

索引分配:为每个文件分配一个索引块记录该文件数据块对应的块号。

image

混合索引分配:10 个直接地址项、1 个一次间接地址、1 个两次间接地址。

image

单级目录结构:查找速度慢,不允许同名,不利于共享。

二级目录结构:支持多用户的访问控制。

树形目录结构和无环图目录结构:方便实现文件共享,为每个共享结点设置一个计数器。

硬链接:两个用户的目录项直接链接到同一个索引结点 inode。当某个用户想要删除文件时,为了避免悬垂指针,只能删除目录项并把文件计数器减一。

image

软链接/符号链接:系统创建一个特殊的 LINK 类型文件,在 LINK 文件中只包含对应共享文件的文件名。这样当文件创建者/拥有者删除文件时,不会有悬垂指针问题。

外存空闲空间/空闲磁盘块的管理。

空闲表法:为所有空闲区建立一张空闲盘块表。

空闲链表法:1. 空闲盘块链。 2. 空闲盘区链。空闲表法和空闲链表法都不适用于大型文件系统。

位示图法:使用二进制位标识盘块的使用情况。

成组链接法:用来存放空闲盘块号的盘块称为成组链块。成组链块的最后一项指向下一个成组链块,其余是指向空闲盘块的指针。盘块分配和盘块回收时都要修改它。

image

I/O 管理/外设管理

字符设备:以字符为单位。速度慢,不可寻址。

块设备:以数据块为单位。速度块,可寻址。

I/O 接口,也称设备控制器,位于 CPU 和设备之间。

设备控制器与 CPU 的接口:数据线、地址线和控制线。

设备控制器和设备的接口。

I/O 逻辑实现对设备的控制,通过一组控制线与 CPU 交互,对 CPU 的 I/O 信号进行译码,控制设备。

I/O 直接控制方式:程序直接控制方式(忙等待),DMA 方式(一对一),通道方式(一对多)。

I/O 软件层次结构从上到下依次是用户软件(实现与用户交互的通用接口)、设备独立性软件(实现用户程序和驱动的统一接口,把系统调用解析成不同的指令交给驱动程序)、设备驱动程序(具体实现指令)、中断处理程序(保存现场,转入对应的中断处理)、硬件。

单缓冲、双缓冲、循环缓冲和缓冲池。

假脱机技术 SPOOLING/脱机输入输出技术:以共享打印机为例,当用户请求打印输出时,SPOOLING 同意打印,但是不立即执行打印动作,而是把要打印的内容送到磁盘上的输出井中,为该进程申请一张请求打印表挂到假脱机文件队列上。当轮到执行该任务时,才把要打印的数据从输出井中取出到内存的输出缓冲区中进行打印。

posted @ 2024-12-21 09:35  sysss  阅读(173)  评论(0)    收藏  举报