操作系统原理

写在前面的话

这份文档主要是用来应付信安的操作系统原理课程,为考前一天能够速通设计。

本文档的所有图片和文字来自b站拯救者课程、教学PPT、某位热心同学的资料整理和Chatgpt,感激不尽!

温馨提示:水平有限,有许多疏漏之处,文档还有许多没有涉及到的细节点(以后不知道会不会补?),敬请谅解。

划的重点

这重点是24年的哦(⊙o⊙),请以自己的老师所划重点为准~~

概述

操作系统的特征

接口

操作系统为用户提供命令接口和程序接口(系统调用)。命令接口就是用户从终端输入的命令,可以是一条命令(联机命令接口),也开始是一组命令(脱机命令接口,类似批处理程序);程序接口就是被应用程序调用的东西,相当于应用程序让操作系统为自己提供的服务。

SPOOLING技术

通过将输入/输出数据存储到磁盘或其他存储设备中,然后按需进行处理,以使输入/输出设备与主处理器并行运行。

为什么说它是一种缓冲技术?从该技术上如何体现操作系统的虚拟性?

答:因为它使用了临时存储来存储数据,以允许输入/输出设备与处理器并行工作。当输入/输出设备的数据传输速度与处理器处理速度不匹配时,SPOOLING技术可以缓冲数据,以使它们在适当的时候被处理。

它的虚拟性体现在当有多个进程使用一个设备时,每个进程都认为自己独占了这个设备。在物理上只有一个设备,在逻辑上虚拟出多个设备。

该技术和内存缓冲技术、脱机技术间的区别在?

答:内存缓冲技术是一种通过使用内存中的缓冲区来暂时存储数据以优化系统性能的技术。内存缓冲技术主要用于优化数据访问和处理过程,提高系统的响应速度和性能。内存缓冲技术是将数据暂时存储在内存中,以便快速访问和处理。

脱机技术是一种将某些处理任务从主处理器中脱机处理的技术,以减轻主处理器的工作负荷。脱机任务可以在后台或并行处理器上执行,而不会影响主处理器的性能。脱机技术主要用于提高系统吞吐量和处理能力,相当于脱机就是把这个任务独立在主系统以外运行来释放主系统资源。

中断技术

中断技术是计算机系统中一种用于处理外部事件或异步事件的机制。当外部设备发生某个事件(如输入/输出操作完成、时钟信号等)或者某个程序达到某个条件时,中断技术能够暂停当前程序的执行,转而处理这个事件或条件,然后返回到原来的程序继续执行。

中断技术的主要目的是使计算机系统能够及时响应外部事件,提高系统的响应速度和效率。它可以确保在程序执行的过程中,系统能够及时处理外部事件,而无需等待某些操作完成或某些条件发生才能继续执行。

中断和异常之间是什么关系

异常就是这里内中断的3种情况。

DMA技术

DMA技术是一种计算机数据传输方式,可以让外围设备直接和主存储器进行数据交换,而不需CPU的干预。这样可以极大地减轻CPU的负担,提高数据传输效率,加快实时数据处理的速度

DMA技术的工作原理是在DMA控制器的控制下,外围设备可以直接访问主存储器,而不必通过CPU进行数据传递。DMA控制器负责将数据从外围设备中搬运到主存储器中,或反之,从主存储器中搬运数据到外围设备中。

DMA技术主要应用于需要大量数据传输的场景,如磁盘读写、网络数据传输、图形处理等。它可以提高数据传输速度,减少CPU的占用率,提高系统的整体性能。

操作系统分类

多道批处理系统能够充分利用系统资源,系统吞吐量大(CPU和其他资源一直处于忙碌);但是它缺乏人机交互能力,响应时间长,用户不知道系统里到底发生了什么。

分时系统能让一台计算机连接多台终端,人机交互友好,时间片轮询。

实时系统的交互性能不高,但是它不受时间片长度的局限,所以能够及时响应,而不会等到一个时间片结束后才开始下一个;同时对任务响应有时间上的限定。(及时性+可靠性)

现代操作系统的特征

微内核

多线程:多线程是指在同一程序中的多个线程同时执行。每个线程都有自己的执行路径和执行状态,并且可以同时执行不同的任务。多线程可以提高程序的效率和响应速度,可以充分利用多核处理器的优势,也可以实现并发性操作。

对称多处理:对称多处理是指在计算机系统中有多个处理器核心或多个CPU同时工作,并且每个处理器核心都可以执行相同的任务。这种结构可以提高系统的并发性和性能,使得系统可以更好地支持多任务处理和多用户操作。

分布式:分布式是指通过网络连接多台计算机,将它们作为一个整体来工作。分布式系统中的多个计算机之间可以相互通信和协作,共同完成一个任务。分布式系统可以提高系统的可靠性、可扩展性和容错性,可以更灵活地分配资源和处理任务。

面向对象设计:面向对象设计强调将系统划分成多个对象,每个对象负责完成特定的功能,对象之间通过消息传递进行通信和协作。面向对象设计可以提高系统的模块化性、可维护性和扩展性,使得系统更易于理解和调试。

进程管理

定义

进程

PCB+数据段+程序段=进程,PCB是判断进程是否存在的唯一标志。

基本采用链表结构管理所有进程的PCB

进程和程序的区别

进程有哪些特性?

线程

进程内部的执行线索,称为线程,又被称为轻量级进程。

进程:资源分配的基本单位。

线程:调度和执行的基本单位。

线程由哪些部分组成?

一个线程被阻塞后,只代表该线程对应的执行线索暂停,不会必然导致整个进程的阻塞,同进程中的其它线程仍有可能被调度执行。

同进程内的线程是并发执行的(单CPU环境)。

同进程内的线程能够实现一些资源的共享,如全局变量等。

对共享的资源,在访问时需要解决同步或互斥的问题。

引入线程的好处?

处理机调度

实际系统中不一定同时存在这三种调度。高级调度一般只用在批处理系统中;分时系统中一般只有中级和低级调度。

评判调度算法的标准(会算)

调度算法

这部分要考计算大题。

大题-处理机调度算法_哔哩哔哩_bilibili

进程调度_Process _Scheduling_哔哩哔哩_bilibili

【精准空降到 02:06】

要注意的是:周转时间=完成时间-到达时间

​ 带权周转时间=周转时间/服务(运行)时间

​ 平均周转时间=周转时间/进程数;平均带权周转时间同理

​ 等待时间=开始运行的时间-到达的时间

优先级调度算法中如何确定优先级?

进程状态转换

  • 单CPU系统中,处于同一时刻的运行态进程只有一个

  • 就绪状态的进程拥有除了处理机以外的所有资源,拿到处理机就能运行,这些进程以队列形式存在

  • 阻塞态的进程需要等待某资源可用(除了处理机以外),在这种情况下,哪怕处理机空闲,阻塞态的进程也无法运行,阻塞态的进程也以队列形式存在

  • 新建态的作用:便于限制进程数量

    终止态的作用:便于其他应用程序分析统计操作系统的性能。

有时还会存在“挂起态”:

两个挂起状态的好处?

仅一个挂起态时,挂起的进程都是阻塞的,再次调度到内存时,要立即评估其是否已经获得所需资源。两个状态可以仅仅把挂起/就绪进程调度进内存,因为其已经获得了资源,不需再进行评估。

导致挂起的原因?

1、内存不足时,把部分阻塞进程交换到交换区;2、程序调试;3、周期较大的可预期进程、如审计及监控进程;4、父进程由于协调等原因,要求子进程挂起;5、其他OS原因,例如,挂起后台进程、挂起怀疑有问题的程序等。

线程不存在挂起状态,为什么?

进程是面向资源的。挂起和资源最相关。因此,可以说挂起是进程级别的概念。

进程切换与模式切换

进程控制采用哪两种模式?

设置用户模式和内核模式是为了提高操作系统的安全性和稳定性。

首先,用户模式和内核模式的设置可以有效隔离用户程序和核心操作系统,使得用户程序无法直接访问操作系统的关键资源和数据,从而防止用户程序对操作系统造成破坏或滥用。

其次,内核模式具有更高的权限,可以访问操作系统的所有资源和功能,可以对系统进行管理和控制。而用户模式则仅能执行有限的操作,有一定的限制和隔离,从而保护操作系统的核心功能和数据。

最后,用户模式和内核模式的设置可以帮助操作系统进行更好的资源管理和调度,提高系统的性能和效率,避免用户程序对系统资源的占用和浪费。

中断(Int n)发生时,通常会发生进程切换,但并不是必须伴随着进程切换。

进程切换与模式切换间的依赖关系?

发生模式切换并不一定发生进程切换,此时,模式切换的开销比进程切换要小。(大多数操作系统都如此)

发生进程切换时,必然伴随着模式切换,因为,进程切换是核心功能,无法在用户模式下完成。

中断和陷阱间的区别?

外部中断,就是我们通常所说的中断(interrupt)。对于执行的系统来说,这种中断发生完全是”异步”的,根本无法预测到此类中断会在什么时候发生。因此,CPU(或者软件)对于此类外部中断完全是”被动”的。

由软件产生的中断则不同,它是由专设的指令,如Intel X86的”INT n”,在程序中有意地产生,所以是主动的,”同步”的。只要CPU一执行一条int指令,就知道在开始执行下一条指令之前一定要先进入中断服务程序,这种主动的中断我们称之为”陷阱”。

中断和异常有个比较大的共同点就是“不可预知性”,所以是被迫的;而陷阱有“有意为之”的含义。实际上,cpu优先权不能屏蔽陷阱,所以说,实际上陷阱就是一种不可屏蔽中断。

用户级多线程与内核级多线程

  • 用户级线程

内核以进程为单位进行调度,不知道线程的存在。线程的所有状态变化都发生在用户空间中。管理线程的工作由应用程序来完成,操作系统感觉不到进程内部的多执行线索。

进程按操作系统的进程调度方式竞争CPU。进程竞争到CPU后,再按自己的调度方式选择合适的线程运行。进程占有CPU期间,进程可以按既定的调度方式选择新线程运行,被剥夺CPU的线程的执行线程保存的工作由该进程负责。

线程管理工作完全由应用程序员代码实现。为了便于使用,以函数库的形式提供,应用程序员可以通过对函数库的调用实现对线程的管理。

主要优点:

同一进程内的线程切换和调度开销小,不需要模式切换。进程内部的线程调度算法比较灵活,不同的应用程序可以采用不同的线程调度算法。实现独立于操作系统内核,便于维护,也便于在操作系统之间实现移植。

主要缺点:

当线程进行系统调用时,不仅线程被阻塞,而且会引起进程的阻塞,即所有线程都被阻塞。不能把同进程中的多个线程调度到多个处理器上,即内核能够分配给进程的只有一个CPU,进程中只有一个线程能够运行。在多处理器环境下,同进程中多线程并行性差。

  • 内核级线程

所有的线程管理工作全部由操作系统核心完成。操作系统核心为进程中的每个线程维护上下文。操作系统基于线程实现处理器调度,任何进程都至少包含一个线程。

应用程序中不再包含线程管理代码。应用程序员可以通过系统调用接口完成线程的创建和控制。

缺点:

即使同进程内的线程切换也需要进入核心态执行调度算法。(伴随着模式切换)因为用户进程的线程在用户态进行,但是线程管理和切换在内核态完成。

优点:

如果一个线程被阻塞,内核可以调度同进程中的其他线程执行,不会一个线程阻塞其他线程都阻塞。同进程内的线程并行度好,可以分别调度到多个处理器上。

进程同步与互斥

  • 进程互斥

两个或两个以上的进程同时竞争某资源,而该资源在同一时刻只能被一个进程使用。操作系统需要提供一种资源分配机制,来控制为这些进程分配资源的顺序,既保证各进程能够使用资源,又能保证各进程互斥使用资源。

  • 进程同步

两个或两个以上的进程要协作完成一个任务,它们之间就要互相配合,需要在某些动作之间进行同步。一个进程的某些动作需要与协作进程的某些动作之间在时序上要有一定的关系。如果协作进程的某些操作没有完成,那么进程就要在执行路径的某些点上等待这些操作的完成,之后才能继续执行下去。

能不能通过约定时间顺序来解决同步?

由于进程执行速度是不可预测的,不能通过约定时间等待的方式来实现进程间的同步。

互斥与同步之间的关系?

联系:

都是关于并发进程如何共享资源的问题

区别:

互斥:要求各进程互斥地使用资源,当资源空闲时,任何进程都有资格使用该资源。

同步:具有同步关系的进程之间必须按某种依赖关系相互合作,在指定的依赖关系未满足前,即使资源空闲也不允许被使用。

信号量PV机制

这个肯定有大题:

大题-进程的同步和互斥(PV操作)_哔哩哔哩_bilibili

【精准空降到 21:31】

管程

将临界资源和访问临界资源的代码(临界区)组织到同一个数据结构(对象)中。

进程通信方式

  • 共享存储

两通信的进程间存在一块共享空间,两个进程通过对该空间的读写来完成通信。

  • 消息传递

  • 管道通信

死锁

啥是死锁?产生的原因?

死锁:如果在一个进程集合中的每个进程都在等待只能由该集合中的其他一个进程才能引发的事件(释放资源),则称一组进程或系统此时发生了死锁。

原因可能在于:

硬件资源竞争:每个进程都竞争到部分资源,但这部分资源又不能让其继续运行。硬件资源分配不当;软件资源竞争;wait、signal操作不当。

死锁的形成条件

必要条件

互斥使用:(资源)每次只能允许一个进程占有和使用,其它申请该资源的进程被阻塞。

保持并等待 :当进程等待分配给它新的资源时,保持占有已分配的资源。

不可剥夺 :不能强迫回收进程占有的未使用完的资源。

充分条件:

循环等待 ,存在一个闭合的进程─资源链

死锁预防

死锁避免

进程启动时控制:仅在当前所有资源的最大请求加上新启动进程的资源请求都能得到满足时,才允许启动新进程。

资源分配时控制:如果对资源的分配可能会导致死锁,就暂不允许进一步为进程分配资源。——银行家算法

银行家算法会考大题:

银行家算法_Banker’s_Algorithm_哔哩哔哩_bilibili

大题-银行家算法_哔哩哔哩_bilibili

【精准空降到 11:09】

银行家算法与coffman算法间的区别?

银行家算法和Coffman算法都是用于处理资源分配和避免死锁的算法,但它们的应用场景和原理有所不同。

银行家算法:应用场景:主要用于操作系统中的资源分配,特别是在多道程序设计中,用于避免进程因争夺资源而发生死锁。(预防死锁)

原理:银行家算法通过在每次资源请求前检查系统是否能满足进程的请求,以确保资源分配不会导致系统进入不安全状态。它基于资源的最大需求量、当前已分配量和系统剩余可用量来进行判断,只有在资源请求不会导致系统进入不安全状态时才会分配资源。

重点:主要关注资源的分配和保护,以确保系统处于安全状态。

Coffman算法(也称为资源分配图算法):

应用场景:主要用于描述和分析并发系统中的资源分配情况,主要用于检测死锁。

原理:Coffman算法通过建立资源分配图,从而分析系统中资源的占用情况和进程之间的关系,以及资源请求的依赖关系。通过检测资源分配图中是否存在环路来判断系统是否处于死锁状态,从而采取相应的措施来解除死锁。

重点:主要关注死锁的检测和解除,通过分析资源分配图中的结构来确定死锁的存在与否。

总的来说,银行家算法主要用于操作系统中的资源分配,重点在于保证系统安全;而Coffman算法则更多地用于分析系统中的资源分配情况,重点在于死锁的检测和解除。虽然两者都与资源分配和死锁相关,但在具体应用场景和原理上有所不同。

死锁检测和解除

内存管理

前置知识

内存管理的概念和功能

覆盖与交换

  • 覆盖

程序员将一个大程序按程序的逻辑结构划分成若干个程序(或数据)段,将不会同时运行的程序段分在一组内,该组称为覆盖段。同一个覆盖段中多个程序段分配到同一个称为覆盖区的存储区域。

例如上图中,A和B不会同时运行,所以可以放进一个覆盖段中;CDE同理。覆盖区的大小则取决于覆盖段中占空间较大的程序的大小。

操作系统不知道程序的逻辑结构,也不可能自动划分覆盖段,所以需要程序员在设计程序就要规划好各个覆盖段。(不透明)并用约定的描述语言,描述出覆盖段的划分,以及对每个覆盖段,何时执行特定程序段的调入和覆盖。并将该描述脚本按规定的方式提交给操作系统。操作系统按描述脚本的要求,在规定的时间调入合适的程序段到覆盖段。

  • 交换

交换技术用于不同的作业。覆盖技术用于一个作业的内部。

任一时刻,主存中只保留一个完整的用户作业。当该作业的时间片用完或因等待某一事件而不能继续运行时,系统就挑选下一个作业进入主存运行。

为减少交换的数据量,如果新作业的内存需求不大,可只交换出原作业的一部分。

交换技术对应用程序而言是透明的,无需程序员干预

连续分区管理方式

单一连续分配

这种分配方式一次只能加载一个作业。实现简单不需要额外硬件,但是利用率很低。

固定分区分配

如果程序太大,可能装不进分区,就需要采用覆盖技术;程序太小的话主存的利用率也很低。

动态(可变)分区分配

四种算法对比:

这块可能会考大题:

大题-分区分配算法_哔哩哔哩_bilibili

多重分区分配

简单分页

地址结构为:页号+页内偏移量,如果页的大小为 2^n ,则页内偏移量为n位。

这里会涉及逻辑地址到物理地址的转换:

这边也涉及到计算:

精准空降到 00:11

简单分段

段页式

简单分页与简单分段的区别在?

快表

快表相当于就是用来提升寻找某个页表项的命中率的工具,是存储在cache中的。

多级页表

多级页表的具体做法:

把整个页表进行分页,分成一张张小页表,每个小页表的大小与页框相同。对小页表顺序编号,允许小页表分散存放在不连续的页框中。为了进行索引查找,应该为这些小页表建一张页目录表(一级页表),其表项指出小页表(二级页表)所在页框号及相关信息。逻辑地址结构有三部分组成:页目录号、页号和位移。

优点:

可以减少页表占用主存的大小,多级页表将页表分成多个层次,每一层次的页表只包含下一层次页表的指针。这种分层结构使得只有在需要时才分配内存,从而减少了不必要的内存分配。

缺点:

地址转换时,CPU需要多访问多次内存。

反向页表

前几种方法的弱点:页表的大小与虚拟地址空间成正比

反向页表:虚拟地址的页号使用散列函数映射到哈希表中。把n位页号映射到m位帧号(n > m)

反向页表的大小:由物理内存的大小决定

连续分区与多重分区

虚拟内存

局部性原理

啥是虚拟内存

页面替换算法

当页表被装满以后,如何选择淘汰哪些页?

尽量换出那些以后不再使用的页面。在尽可能长的时间内不使用的页面。避免“抖动”:刚换出,又要使用需要再换入。衡量指标:缺页中断次数/总的内存访问次数(缺页中断率)

这部分会有大题:

缺页问题_Page_Fault_哔哩哔哩_bilibili

大题-页面置换算法_哔哩哔哩_bilibili

【精准空降到 01:17】

页面置换策略

文件系统

磁盘

磁盘读写时间

这玩意应该是计组里的计算吧,不知道会不会考

磁盘调度算法

这块没准会有大题:

大题-磁盘调度算法_哔哩哔哩_bilibili

为什么说机械硬盘慢?

因为传统机械硬盘需要寻道和找扇区的时间,相比固态而言。

解决方法如下:

  1. 磁盘高速缓存技术:磁盘高速缓存技术是通过在硬盘和内存之间加入缓存来提高读写速度。当系统需要访问数据时,先将数据存储到缓存中,如果数据已经在缓存中存在,就可以直接从缓存中读取,避免了频繁读取硬盘造成的延迟。这样可以大大提高系统的响应速度和读写性能。
  2. RAID技术:RAID技术是通过多个硬盘组合成一个逻辑卷,实现数据的备份和数据读写的并行操作。对于机械硬盘来说,RAID技术可以将数据分布在多个硬盘上,实现数据的分块读写,从而提高整体的读写速度。同时,RAID技术还可以提供数据冗余和数据备份功能,保证数据的安全性。
  3. 保留部分RAM作为高速文件系统:这种方式是将一部分RAM内存作为高速缓存用于存储频繁访问的文件或数据,当系统需要访问这些数据时可以直接从RAM中读取,避免了频繁访问机械硬盘造成的延迟。通过这种方式,可以显著提高数据访问的速度和响应性。
  4. 智能调度算法读写头调度元信息布置:这种方式包括优化硬盘磁头的访问路径、调度磁头的读写顺序、布置元数据的位置等优化方法。智能调度算法可以根据不同数据的访问情况和磁盘的工作状态,进行合理的调度和布局,从而减少磁头的寻道时间和等待时间,提高机械硬盘的读写效率。

写在最后的话

最后的文件部分和IO管理部分内容繁杂,且大多仅涉及选择题,资料不多,没有进行整理(好吧就是我已经考完了懒的再写了/(ㄒoㄒ)/~~

将文中的b站链接视频都能融会贯通想必计算题肯定没问题了,简答题需要注意划的重点,选择题和判断题就自求多福吧(bushi)推荐把往年考研的选择题看一遍记住,会有原题哦(⊙﹏⊙)

【考研408操作系统】29.2023年真题精讲(选择题)_哔哩哔哩_bilibili