Skip to content

Latest commit

 

History

History
117 lines (105 loc) · 11 KB

操作系统.md

File metadata and controls

117 lines (105 loc) · 11 KB

操作系统

  1. 处理机管理、文件管理
  2. 内存管理有什么方式
  3. 死锁、进程和线程;

计算机系统概述

操作系统运行机制

操作系统运行在核心态,用户程序运行在用户态。CPU的状态由PSW中的一位确定。操作系统程序需要运行一些特权指令,只能在核心态下运行。应用程序可以通过系统调用的方法请求操作系统服务。 系统调用指用户在程序中调用操作系统所提供的一些子功能,系统调用可以视为特殊的公共子程序。 这么设计的目的是:用户不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求操作系统代为执行,以保证系统的稳定性和安全性,防止用户程序随意更改或访问重要的系统资源,影响其他进程的运行。 系统调用执行过程

进程管理

进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。 进程(process)是进程实体(PCB+数据段+程序段)的运行过程,是系统进行资源分配和调度的独立单位。

进程状态转换

进程状态转换

进程通信

  • 共享内存:通过对共享空间进行读写操作实现信息共享。读写时需要使用同步互斥工具进行控制。用户进程空间一般都是独立的,要想让两个用户进程共享空间,必须通过特殊的系统调用,而进程内的线程是自然共享进程空间的。
  • 消息队列:利用操作系统提供的发送消息和接收消息两个原语进行格式化消息数据交换。
  • 管道通信:共享存储的优化和发展。管道指用于连接一个读进程和一个写进程已实现她们之间通信的一个共享文件。

进程调度

进程调度算法

高响应比优先(HRRN,Highest response ratio next)

$$响应比R_p=\frac{等待时间+要求服务时间}{要求服务时间}$$ 响应比的动态变化可看作是优先级的动态调整,等待时间越长响应比越高。

多级反馈队列

  • 设置多个等待队列,优先级由高到低,优先级越高的队列时间片越小。
  • 新进程放入最高优先级队列末尾,按先来先服务原则等待。运行完后放入下一级队列末尾。最后一级队列采用时间片轮转。
  • 处理器依次处理每个队列。被抢占的进程被放入当前队列末尾。

进程同步

进程同步指的是多个进程因为需要在某些位置上协调她们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系源于它们之间的合作。 为禁止两个进程同时进入临界区,同步机制应遵循:空闲让进,忙则等待,有限等待,让权等待

死锁

死锁指多个进程因竞争资源而造成的一种互相等待的僵局,若无外力作用,这些进程都无法向前推进。 死锁产生的必要条件:互斥条件、不剥夺条件、请求并保持条件、循环等待条件

死锁进程必须要求多个临界资源,单个进程不可能死锁。 循环等待不一定有死锁,可能会有多个同类资源。若系统中每类资源只有一个,则循环等待是死锁的充要条件。

死锁处理策略

  • 死锁预防:抢占式资源调度,预先静态分配法(一次全部分配,不会出现请求并保持),顺序资源分配法(资源编号,按序分配,不会出现循环等待)。
  • 死锁避免:在资源动态分配时,运行银行家算法,防止系统进入不安全状态,以避免发生死锁。
  • 死锁检测和解除:采用资源分配图检测是否发生死锁,若发生死锁采资源剥夺/撤销进程/进程回退释放资源。

死锁与饥饿

当等待时间给进程推进和响应带来明显影响时,称发生了饥饿现象。饥饿并不一定会死锁,但至少有一个进程的执行被无限期推迟。 进入饥饿状态的进程可以只有一个,但是死锁的进程数必须大于1;处于饥饿状态的进程可以是一个就绪进程,比如CPU调度中的低优先权进程,而死锁状态的进程必定是阻塞进程。

线程

线程最直接的理解就是轻量级进程,他是一个基本的CPU执行单元,也是程序执行流的最小单位。同一个进程下的所有线程共享进程所拥有的全部资源。引入线程后,进程的内涵发生了改变,进程只做为除CPU外的系统资源的分配单元,线程则做为处理机的分配单元。 由于有了线程,线程切换时有可能发生进程切换,也有可能不发生,平均而言每次切换所需的开销就变小了,所以可以提高系统的并发性能。

内存管理

逻辑地址和物理地址

内存分配

连续分配

连续分配

多道可变连续分配(动态分区分配)中产生的外部碎片可以通过紧凑技术解决,即不时地对进程进行移动和整理。 对于空闲的内存空间,在分配时可采取以下分配算法:首次适应、最佳适应、最坏适应、临近适应 首次适应算法不仅是最简单的,而且通常也是最好和最快的。

离散分配

分页与分段

分页

分页的思想:把内存空间划分为大小相等且固定的块,块相对较小,做为主存的基本单位。每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存空间中的块空间。

为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表,它记录页面在内存中对应的物理块号,页表一般存放在内存中。进程执行时,通过查找该表,就可找到每页在内存中的物理块号。 可见每次访问数据要访问两次内存,先查页表再查数据,故通常在地址变换机构中增设一个高速缓冲存储器-快表,这样就只要一次访存。

页表索引的是用户的逻辑地址空间,若进程的逻辑地址空间非常大,页表就会非常大,则需要很大的连续空间存储页表。为了对页表进行离散分配,可以建立多级页表,即建立页表的页表。需要注意顶级页表最多只能有一个页面。多级页表只解决了连续分配的问题,并没有减小页表在内存中的存储空间,这个问题必须要用虚拟内存,请求分页机制解决。采用多级页表时,一次访问需要多次访存,N+1。

分段

段式管理方式按照用户进程中的自然段划分逻辑空间,且给每一段分配连续的内存空间,即段内连续,段间不连续。因为每个段的长度是不同的,故要在段表中存储段长,用来在逻辑地址变换时判断是否越界。

段页式

将上述两种方法结合起来,作业的地址空间首先被分成若干逻辑段,每段都有自己的段号,然后将每段分成若干大小固定的页。系统为每个进程建立一张段表,进程中每段有一张页表。

虚拟内存

基于局部性原理,程序装入时只需要将程序的一部分装入,即可启动程序执行。执行过程过,当所访问的信息不再内存中时,由操作系统将所需要的部分调入内存,然后继续执行。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统就好像为用户提供了一个比实际内存大得多的存储器,称为虚拟内存。 虚拟内存的大小由计算机地址结构决定,并不是内存和外存的简单相加。 虚拟内存技术的实现需要有以下几个方面的硬件支持:

  • 一定容量的内存和外存
  • 离散内存分配技术,页表/段表
  • 中断机构,当用户要访问的部分尚未掉入内存时,产生缺页中断
  • 地址变换机构,逻辑地址到物理地址的变化

页面置换算法

  • 最佳(OPT):选择以后永不使用的或在最长时间内不被访问的页面,有最低的缺页率,无法实现。
  • 先进先出(FIFO):优先淘汰最早进入内存的页面。可能会产生所分配的物理块数增大而页故障不减反增的异常现象,称为Belady异常。
  • 最近最久未使用(LRU):选择最近最长时间未访问过的页面淘汰。向前看,认为过去一段时间内未访问的页面在最近的将来可能也不会被访问。需要寄存器和栈的硬件支持,性能较好。
  • 时钟(CLOCK):扫描缓冲区,淘汰使用位为0的页面。用较小的开销接近LRU算法的性能。

在页面置换过程中,一种最糟糕的情形时,刚刚换出的页面马上又要换入主存,刚刚换入的页面马上又要换出主存,这种频繁的页面调度行为称为抖动颠簸

文件管理

文件目录

文件控制块FCB的有序集合称为目录。可以采用文件描述信息和文件名分开存放的方式,文件描述信息单独形成一个索引结点,目录只放文件名和指向索引结点的指针,可以使查找文件时的平均启动磁盘次数减小。

文件共享

  • 硬链接:基于索引结点,多个共享文件链接到同一个索引结点。索引结点中需添加链接计数,链接计数为0时才能删除文件。
  • 软链接:利用符号链接,符号链接文件的文件内容是到被链接文件的路径名。

硬链接的查找速度比软件快,软链接要找两次目录。

文件实现

文件分配方式-非空闲盘块

连续分配-》顺序表 链接分配-》链表,只能顺序访问文件 显式链接-》静态链表,设置文件分配表FAT,FAT存放在内存中,加快了检索速度,减少了访问磁盘次数 索引分配,给文件建立索引,在索引结点中有索引地址指针

文件存储空间管理-空闲盘块

空闲表法:建立空闲盘块表 空闲链表法:所有空闲空间拉成一条链 位视图法:所有盘块用二进制位表示是否已分配 成组链接法

磁盘

磁盘地址:“柱面号-盘面号-扇区号” 一次磁盘读写操作时间=寻道时间+延迟(定位扇区)时间+传输(读取数据)时间

磁盘调度算法

  • 先来先服务:公平,性能接近与随机调度。
  • 最短寻道时间优先:优先处理磁道最近的请求,并不能保证平均寻道时间最短,会产生饥饿现象。
  • 扫描:在磁头当前移动方向上依次选择最近的请求,即在最短寻道时间优先基础上规定了磁头运动方向。
  • 循环扫描:磁头单向移动,回访时快速移动到起始端而不服务任何请求。