复试面试复习——操作系统重点

一、绪论

1、 用户态和核心态区别

内核态(Kernel Mode):运行操作系统程序,操作硬件
用户态(User Mode):运行用户程序

  • 内核态与用户态是操作系统的两种运行级别,当程序运行在最低特权级别时,就可以称之为运行在用户态。因为这是最低特权级,是普通的用户进程运行的特权级,大部分用户直接面对的程序都是运行在用户态;当程序运行在0级特权级上时,就可以称之为运行在内核态。

  • 运行在用户态下的程序不能直接访问操作系统内核数据结构和程序。当我们在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成某些它没有权力和能力完成的工作时就会切换到内核态(比如操作硬件)。

  • 这两种状态的主要差别是

    • 处于用户态执行时,进程所能访问的内存空间和对象受到限制,其所处于占有的处理器是可被抢占的
    • 处于内核态执行时,则能访问所有的内存空间和对象,且所占有的处理器是不允许被抢占的

2、异常和中断的区别

异常(内中断)

  • 是指由于 执行了现行指令(CPU 内部事件)所引起的中断,如程序出错(非法指令、地址越界)

中断(外中断)

  • 是指由于外部设备事件所引起的中断,如通常的磁盘中断、打印机中断等

通常异常会引起中断,但中断未必会是由异常引起

3、系统调用

操作系统提供的用户接口之一,是由操作系统实现的所有系统调用所构成的集合,即程序接口或应用编程接口,是应用程序用系统之间的接口。

4、并发性和并行性

并发性:指两个或多个事件在同一时间间隔内发生
并行性:指两个或多个事件在同一时刻发生


二、进程管理

1、进程的概念

引入原因:

  • 程序不能并发执行
  • 对并发执行的程序加以控制描述

典型定义

  • 进程是程序的一次执行(过程)
  • 进程是一个程序及其数据在处理及上顺序执行时所发生的活动(动态性)
  • 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位(有限环境下,引入线程后调度由线程控制)

2、进程和程序的区别

  1. 程序是永存的;进程是暂时的,是程序在数据集上的一次执行,有创建有撤销,存在是暂时的;
  2. 程序是静态的观念,进程是动态的观念;
  3. 进程具有并发性,而程序没有;
  4. 进程是竞争计算机资源的基本单位,程序不是。
  5. 进程和程序不是一一对应的: 一个程序可对应多个进程即多个进程可执行同一程序; 一个进程可以执行一个或几个程序

3、 进程的组织结构

进程的组成

  • 进程控制块(PCB)。每个进程均有一个PCB,是进程存在的唯一标识,可以刻画执行瞬间特征
  • 程序段。进程中能被进程调度程序调度到CPU上执行的程序代码段
  • 数据段。既可以是进程对应的程序加工处理的原始数据,也可以是程序执行时产生的中间数据或结果数据
  • 进程标识符(PID)
  • 进程当前状态
  • 进程队列指针
  • 程序和数据地址
  • 进程优先级
  • 通信信息
  • 家族联系。允许创建子进程时,会形成一个进程家族树。如子进程和父进程的标识
  • 占有资源清单

4、线程的概念以及与进程的区别

线程:操作系统能够进行运算调度最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

区别

  1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。
  2. 进程在执行过程中拥有独立的内存单元,而多个线程共享进程的内存。(资源分配给进程,同一进程的所有线程共享该进程的所有资源。同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。)
  3. 进程是资源分配的最小单位,线程是CPU调度的最小单位;
  4. 系统开销: 由于在创建或撤消进程时,系统都要为之分配或回收资源,如内存空间、I/O设备等。因此,操作系统所付出的开销将显著地大于在创建或撤消线程时的开销。类似地,在进行进程切换时,涉及到整个当前进程CPU环境的保存以及新被调度运行的进程的CPU环境的设置。而线程切换只须保存和设置少量寄存器的内容,并不涉及存储器管理方面的操作。可见,进程切换的开销也远大于线程切换的开销
  5. 通信:由于同一进程中的多个线程具有相同的地址空间,致使它们之间的同步和通信的实现,也变得比较容易。进程间通信IPC,需要进程同步和互斥手段的辅助,以保证数据的一致性;线程间可以直接读写进程数据段(如全局变量)来进行通信。在有的系统中,线程的切换、同步和通信都无须操作系统内核的干预
  6. 进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂
  7. 进程间不会相互影响 ;线程一个线程挂掉将导致整个进程挂掉
  8. 进程适应于多核、多机分布;线程适用于多核

5、进程的通信方式

1)管道
  1. 匿名管道

    1. 匿名管道是基于文件描述符的通信方式。实现两个进程间的通信时必须通过fork创建子进程,实现父子进程之间的通信。本质是内核的一块缓存(环形队列)。
    2. 读写规则
      1. 管道内没有数据时,读端(read)发生阻塞,等待有效数据进行读取
      2. 管道容量被数据填满时,写端(write)发生阻塞,等待进程将数据读走再进行写入
      3. 如果所有管道写端对应的文件描述符被关闭,read返回0,但会将之前管道里的数据读完
      4. 如果所有管道的读端对应的文件描述符被关闭,write操作会产生信号,SIGPIPE,进而导致write进程退出
      5. 当要写入的数据量不大于管道的容量(PIPE_BUF)时,linux将保证写入的原子性
      6. 当要写入的数据量大于管道容量(PIPE_BUF)时,linux将不再保证写入的原子性
    3. 特点
      1. 只能进行单向通信
      2. 只能够用于血缘关系的进程之间,多用于父子之间
      3. 管道内部自带同步机制:子进程写一条,父进程读一条
      4. 管道在进行通信的时候,对外层提供的服务叫做面向字节流的服务
      5. 当进程退出之时,管道也随之释放,与文件保持一致
  2. 命名管道

    1. 概念:本质上是一个管道文件,可以通过命令创建也可以通过函数创建,用户可以看到
    2. 特点
      1. 可以进行不相干进程间的通信
      2. 命名管道是一个文件,对于文件的相关操作对其同样使用
    3. 读写规则
      1. 对于管道文件,当前进程操作为只读时,则进行阻塞,直至有进程对其写入数据
      2. 对于管道文件,当前进程操作为只写时,则进行阻塞,直至有进程从管道中读取数据
2)系统IPC:
2.1)消息队列
  • 消息队列是存放在内核中的消息链表,每个消息队列由消息队列标识符表示
  • 与管道不同的是消息队列存放在内核中,只有在内核重启或者显式地删除一个消息队列时,该消息队列才会被真正的删除
  • 消息队列在某个进程往一个队列写入消息之前,并不需要另外某个进程在该队列上等待消息到达

特点:

  1. 消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识.
  2. 消息队列允许一个或多个进程向它写入与读取消息
  3. 管道和消息队列的通信数据都是先进先出的原则。
  4. 消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取.比FIFO更有优势。
  5. 消息队列克服了信号承载信息量少,管道只能承载无格式字 节流以及缓冲区大小受限等缺。
  6. 目前主要有两种类型的消息队列:POSIX消息队列以及System V消息队列,System V消息队列目前被大量使用。System V消息队列是随内核持续的,只有在内核重起或者人工删除时,该消息队列才会被删除。
2.2)信号量semaphore

信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器,可以用来控制多个进程对共享资源的访问。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。
特点:

  1. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。
  2. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。
  3. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。
  4. 支持信号量组。
2.3)信号signal

信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

2.4)共享内存(Shared Memory)

它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等
特点:

  1. 共享内存是最快的一种IPC,因为进程是直接对内存进行存取
  2. 因为多个进程可以同时操作,所以需要进行同步
  3. 信号量+共享内存通常结合在一起使用,信号量用来同步对共享内存的访问
3)套接字SOCKET:

socket也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同主机之间的进程通信。

6、进程的3个基本状态及其转换

  • 就绪状态:只差CPU就可执行
  • 执行状态
  • 阻塞状态:暂停无法运行,不仅仅只缺少CPU,进程执行后不能再执行的状态
    在这里插入图片描述

7、典型的调度算法,即相关计算

调度算法的评价标准

  1. CPU利用率
  2. 系统吞吐量:单位时间内CPU完成的作业量
  3. 响应时间
  4. 周转时间:通常用周转时间和带权周转时间来衡量
    • 周转时间:作业从提交至完成的时间间隔,包括等待时间和执行时间
    • 平均周转时间
    • 带权周转时间
    • 平均带权周转时间

调度算法

  • 先来先服务调度算法
  • 短作业(短进程、短线程)优先调度算法
    • 处理器分配给最快完成的作业(或进程)
  • 时间片轮转调度算法
    • 按照程序达到时间先后次序排成一个队列
    • 选择队首进程执行一定的时间,称为时间片(常为100ms)
    • 进程用完时间片若还未完成就送到就绪队列队尾
  • 优先级调度算法
  • 高响应比优先调度算法
    • 每次进行作业调度时,先计算就绪队列中每个作业的响应比响应比=(作业等待时间+估计运行时间)/估计运行时间
  • 多级队列调度算法
    • 根据进程的性质或类型,将就绪队列划分为若干个独立的队列,每个进程固定地分数一个队列。每个队列只采用一种调度算法,不用队列可以采用不同的调度算法
  • 多级反馈队列调度算法
    • 设置多个就绪队列,每个队列的优先级不同,从第一个队列开始优先级逐次递减
    • 每个队列的进程执行时间片的大小也各不相同,优先级越高,相应的时间片越短,通常以2递增递减
    • 在一个队列还按照先来先服务原则排队等待调度
    • 若时间片用完未完成,则进入下一个队列的队尾
    • 最后一个队列中使用时间片轮转调度算法

8、临界区和临界资源

  • 临界资源:(一次仅允许一个进程访问的资源
    • 引起不可再现性是因为临界资源没有互斥访问。只能互斥访问,无法并发访问

多个进程需要修改某一数据,系统必须控制,一次仅允许一个进程完成读数据、修改数据(算作一个整体)两件事以后,才允许别的进程对同一数据的读和修改操作

  • 临界区:
    • 定义:进程访问临界资源的那段代码
    • 访问临界资源(上下两个区可以保证临界区互斥访问)
      • 进入区:检查有无进程进入
      • 临界区:同一时间段只有一个进程
      • 退出区:将访问标志复位
    • 使用方式
      • 如果可以进入,设置临界区使用标志(全局变量),组织其它后来的进程进入临界区
      • 后来的进程通过查看临界区使用标志,知道自己不能进入临界区,就进入阻塞队列,将自己阻塞
      • 当临界区内的进程使用完毕,退出临界区时,即在**“退出区”修改临界区使用标志**,并负责唤醒阻塞队列中的一个进程,让其进入临界区

9、 抢占式和非抢占式调度

抢占式
一旦进程开始执行,调度就在进程从运行状态切换到就绪状态以及从等待状态切换到就绪状态时发生,称为抢占调度。也就是在执行过程中被打断,执行了其他程序。
非抢占式
一旦进程开始执行,调度将在进程终止或进程从运行状态切换到等待状态时进行。即进程获取资源(CPU时间)并持有它,直到进程终止或推送到等待状态,不会被中断。

10、同步机制应遵循的准则

  • 空闲让进:如果临界区空闲,则只要有进程申请就立即让其进入,以有效利用资源
  • 忙则等待:每次仅允许一个进程处于临界区,保证对临界资源的“互斥”访问
  • 有限等待:进程只能在临界区内逗留有限时间,不得使其他进程在临界区外陷入“死等”
  • 让权等待:进程不能进入临界区时,应立即释放处理机,以免陷入“忙等”状态,进入阻塞队列

11、进程同步与互斥的区别

  • 互斥:是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
  • 同步:并发进程在执行次序上的协调,以达到有效的资源共享和相互合作,使程序执行有可再现性(封闭性)。同步是已经实现了互斥

12、实现进程互斥的软件方法

  1. 单标志法
  2. 双标志先检查法
  3. 双标志后检查法
  4. Peterson算法

13、信号量保证进程之间的同步与互斥

基本原理

  • 两个或多个进程可以通过传递信号进行合作,可以迫使进程在某个位置暂时停止执行(阻塞等待),直到它收到一个可以“向前推进”的信号(被唤醒)。
  • 相应地,将实现信号灯作用的变量称为信号量。

14、常见的进程同步问题

思路

  1. 每一个活动实体都是进程,找到活动实体
  2. 明确实体的活动流程,用伪代码表示出来
  3. 分析同步和互斥的关系:有哪些需要互斥访问分临界资源?哪些需要同步的关系
    同步: 协作,一个在等待,一个在唤醒,并发进程; 互斥: 串行访问
生产消费者问题

一个或多个生产者生产数据,并将生产的数据存入缓冲区,并有一个(也可以多个)消费者从缓冲区中取数据

数据结构:循环队列,in out指针
在这里插入图片描述
同步:生产者不能像满缓冲区写数据,消费者不能从空缓冲区读取数据,使用资源信号量empty表示空缓冲区的数量;资源信号量full表示满缓冲区的数量

为什么要使用两个资源信号量
两个资源信号量更适合普遍的环境,如果是网络通信,那生产者生产的消息就是一种资源.

互斥:互斥进入缓冲区,用一个互斥信号量(将整个缓冲区作为一个临界资源)实现

实现方式
  • 记录型信号量

互斥信号量成对出现;资源信号量交叉(两个进程协作使用资源)信号量的初始化很重要
在这里插入图片描述

  • AND信号量
    在这里插入图片描述
  • 利用管程表示
    在这里插入图片描述
哲学家进餐问题

在这里插入图片描述
筷子为临界资源,且不相同,所以用一个信号量表示一只筷子
在这里插入图片描述

实现方式
  • 记录型信号量
    在这里插入图片描述
    构成死锁
    解决方法:
  • 只允许四个哲学家拿同一边的筷子
读者-写者问题

特点

  • 读进程可以共享同一个对象
  • 写进程不可共享同一个对象

互斥:两个写进程对一个对象互斥,读写进程对一个对象互斥
同步:读者在读一个对象,写进程被阻塞(对一个文件的读写操作的优先问题)

15、死锁的概念及其必要条件

定义:如果一组进程中的每一个进程都在等待仅由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的
现象:多个进程再运行过程中因争夺资源而造成的一种僵局

产生的必要条件

  • 互斥条件:指进程对所分配到的资源进行排它性使用 。
  • 请求和保持条件:指进程已经保持了至少一个资源,但又提出了新的资源请求 。
  • 不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。
  • 环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链 。(充分条件

16、 处理死锁的方法

  • 预防死锁:破坏四个必要条件中的一个或多个
  • 避免死锁:在资源动态分配过程中,使用某种方法去防止系统进入不安全的状态
  • 检测死锁:检测死锁的发生,并确定与死锁有关的进程和资源
  • 解除死锁:外力解脱。常用撤销或挂起一些进程

17、 银行家算法

数据结构

  • 可利用资源向量:m个元素的数组,每一个元素代表一类可利用的资源数目.如Available[j]=k,即有k个Rj类资源
  • 最大需求矩阵:n × m的矩阵,n个进程对m类资源的最大需求.Max[n,m]
  • 分配矩阵:n × m的矩阵,n个进程已经分配到多少m类资源.Allocation[n,m]
  • 需求矩阵:n × m的矩阵,n个进程还需要多少m类资源.Need[n,m]
  • R e q u e s t i Request_i Requesti为Pi的请求向量
    流程图
    在这里插入图片描述

三、 内存管理

1、 程序执行的完整过程

编辑——编译——链接——装入——运行

  • 编译:将用户源代码编译成若干个目标模块
  • 链接:将一组目标模块和所需要的库函数链接在一起,形成一个完整的装入模块
    • 静态链接:在程序运行之前,先把各个目标模块及所需链接为一个完整的可执行程序,以后不在拆开
    • 装入时动态链接:将应用程序编译后所得的一组目标模块装入内存时采用边装入边链接的动态方式
    • 运行时动态链接 :直到程序运行中需要一些模块时,才对这些模块进行链接
  • 装入:由装入程序将装入模块装入内存
    • 绝对装入:在编译时就直到程序将要驻留在内存的物理地址。不适合多道程序设计。
    • 可重定位装入:根据内存当前情况,将装入模块装入到内存的适当位置,地址变换通常在装入时一次完成,之后不会改变,称为静态重定位。
    • 动态运行装入:允许程序运行时在内存中移动位置。把装入模块装入到内存的所有地址都是相对地址,在程序执行过程中,每当访问当相应指令或数据,才将要访问的程序获数据和相对地址转换为物理地址。可被称为动态重定位。

2、内存分配方式

单一连续分配
  • 通常只能用于单用户、单任务的操作系统中
  • 将内存分为两个连续村粗区域,其中一个固定分配给操作系统使用,通常放在内存低地址部分,另一个区域分给用户作业使用。
  • 但用户作业只会占用区域的一部分,剩余的部分造成了浪费
  • 采用静态分配,适合单道程序,可采用覆盖技术。各类资源的利用率都很低。
  • 产生内部碎片。
固定分区分配
  • 将内存空间划分为若干个固定大小的分区,每个分许可以装入一道程序。
  • 分区的大小可以不等,但是必须事先确定,在运行时不能改变。
  • 固定分区分配中,程序通常采用静态重定位方式装入内存。
  • 系统会建立一张分区说明表,以记录可用于分配的分区号、分区的大小、分区的起始地址和状态,通常按照分区大小顺序排列。
  • 不能实现多进程共享一个主存区,利用率较低,会产生内部碎片
动态分区分配
  • 又称可变式分区,动态划分存储器的分区方法。
  • 在作业进入主存时,根据作业的大小动态地建立分区,并使分区的大小正好满足作业的需要
  • 分区分配中常用的数据结构
    • 空闲分区表
    • 空闲分区链
分区分配算法
  1. 首次适应算法(FF)
  • 排序方式:空闲分区链以首地址递增
  • 查询方式:从链首开始顺序查找,直到找到一个满足大小的空闲地址
  • 优点:有利于大进程分配空间
  • 缺点:低地址部分不断被划分,会留下很多内零头,增加查找空闲分区的开销
  1. 循环首次适应算法(NF)
  • 排序方式:空闲分区链以首地址递增
  • 查询方式:从上次查询到的空闲分区的下一个空闲分区开始查找
  • 优点:使得空闲分区分布更加均匀;空闲分区查找的开销减少
  • 缺点:会缺乏大的空闲分区
  1. 最佳适应算法(BF)
  • 排序方式:按分区大小从小到大排序
  • 查询方式:从链首开始查询到最优(因为已经按大小排序,所以最先查询到的就是相对最小的)的分区
  • 优点:剩下的空闲区不至于太小,产生碎片几率最小
  • 缺点:因为划分后剩余部分总是最小的,产生大量难以利用的外部碎片
  1. 最坏适应算法(WF)
  • 排序方式:按分区大小从大到小顺序形成空闲分区链
  • 查询方式:总是挑选最大的一个分区用于划分
  • 优点:产生的碎片不至于太小,产生碎片的几率最小,查询效率很高
  • 缺点:缺乏大的空闲分区
分页存储管理
  • 用户作业的地址空间划分成若干个大小相等的区域,称为或者页面。相应地,将主存的存储空间也分成与页面大小相等的区域,称为。在为作业分配存储空间时,总是以块为单位来分配,可以将作业中的任意一页放在主存的任意一块中。
  • 在调度作业是需一次性将所有页面调入主存,没有足够的物理块,则作业等待
  • 分页存储管理系统中的逻辑地址包含两部分内容:前一部分为也好P,后一部分为页内偏移量。假设逻辑地址为A,页面大小为L,则页号P=(int)(A/L),页内位移W=A%L
  • 优点:内存利用率高;实现了离散分配;便于存储访问控制;无外部碎片
  • 缺点:需要硬件支持(尤其是快表);内存访问效率下降;共享困难;内部碎片
页表
  • 将页号和块号的映射关系体现在页表上。页表通常存储在内存中。
  • 页表寄存器会存储页表的起始地址和页表的长度
分段存储管理
  • 作业的地址空间由若干个逻辑分段组成,每个分段是一组逻辑意义上相对完整的信息集合,每个分段都有自己的名字,每个分段都从0开始编址,并采用一段连续的地址空间。因此整个作业的地址空间是二维的(因为段号是由程序员自己定义的,因此不同的段大小不同,代表的意义也不同)
  • 段表项
    在这里插入图片描述
  • 优点:便于程序模块化处理和处理变换的数据结构;便于动态链接和共享;无内部碎片
  • 缺点:与分页类似,需要硬件支持;为满足分段的动态增长和减少外部碎片,要采用拼接技术;分段的最大尺寸受到主存可用空间的限制;有外部碎片
请求分页

3、内部碎片和外部碎片

  • 内部碎片:已经分配给作业但是不能被利用的内部空间
  • 外部碎片:系统中还没有分配给作业,但由于碎片太小而无法分配给申请内存空间的新进程的存储块

4、段式和页式分配的区别

  • 页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。 段则是信息的逻辑单位,它含有一组意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。
  • 页的大小固定且由系统决定,因而在系统中只能有一种大小的页面,而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分
  • 分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址
  • 分段更有利于实现信息的共享和保护(分页需要审查每个页的具体内容,分段只需要一个号即可)
    在这里插入图片描述

5、分页管理方式中的逻辑地址结构、页表、访存过程以及访存有效时间

逻辑地址

页表结构

有快表的访存过程

访存有效时间

无快表: E A T = t + t = 2 t EAT=t+t=2t EAT=t+t=2t
有快表: E A T = a ∗ λ + ( t + λ ) ( 1 − a ) + t = 2 t + λ − t ∗ a EAT=a*λ+(t+λ)(1-a)+t=2t+λ-t*a EAT=aλ+(t+λ)(1a)+t=2t+λta
其中a为命中率,λ为查找快表的时间

一般来说,命中率达到90%以上才能真正起作用

6、快表和多级页表

快表

一般的分页系统至少访问两次物理内存才能获取到页面具体内容,而快表类似与内存的高速缓存,一般保存进程最近访问的页面。进程运行时先访问快表是否有需要的页面,如果有则直接获取,减少了访问时间;没有则继续访问物理内存进行获取。

7、虚拟内存

局部性原理:一个较短的时间段内,程序的执行仅限于某个部分;相应的,它所访问的存储空间也局限于某个区域
具体体现
- 时间局限性:某条指令一旦执行,则不久后该指令可能再次被执行;数据也可能被再次访问(循环控制语句的存在导致
- 空间局限性:访问某个存储单元,其附近的存储单元也将被被访问(典型代表:数组

基于局部性原理,在程序装入时,一方面可以将程序的一部分装入内存,而将其余部分放在外存,然后启动程序。在程序执行过程中,当所访问的信息不在内存中时,再由操作系统将所需的部分调入内存。另一方面,操作系统将内存中暂时不用的内容置换到外村上,从而腾出空间存放将要调入内存的信息。

8、虚拟内存管理方式及其特点和区别

特点
  • 离散性:程序在内存中离散存储
  • 多次行:一个作业可以分成多次调入内存
  • 对换性:作业在运行过程中可以换入、患处
  • 虚拟性:从逻辑上扩充内容容量,用户可以使用的空间可以远大于实际内存容量

9、请求分页管理方式中的逻辑地址结构、页表结构、访存过程以及访存有效时间

在这里插入图片描述
在这里插入图片描述

10、常见的页面置换算法

  • **最佳(优)置换算法 **
    • 选择之后再也不会被访问或长时间不访问的页面调出
    • 理想化算法,难于实现
      在这里插入图片描述

如上图,共有9次缺页中断(前三次产生缺页中断,但是不换出),有6次换出

  • 先进先出
    • 总是淘汰最先进入内存的页面
      在这里插入图片描述
  • 最近最久未使用(LRU)
    • 选择最近最久未使用的页面予以淘汰
    • 添加一个访问字段,记录上次访问以来经历的时间t
    • 在选择现有页面中t最大的淘汰
    • 需要寄存器或栈支持
      • 寄存器:为内存中的每个页面配置一个位移寄存器,每隔一定时间位移(访问时将最高位设为1,右移),比较数值大小(最小即最久)即可[成本大,效率不高]
      • 栈: 每当进程访问页面,将栈中该页面号取出,并压入栈顶,所以栈顶始终是最新的页面号,栈底就是最近最久未使用的页面号
    • 在内存页面置换中使用开销太大,不适用
      在这里插入图片描述
  • Clock置换算法
    • 为每页设置一位访问位,内存中的所有页面通过链接指针链接形成一个循环队列
    • 当某页被访问时,其访问位被置1
    • 置换程序从上次停止位置开始检查页面的访问位
      • 如果为0,则换出;为1,置为0,暂不换出
    • 将最近未使用的页面换出,所以又称为最近未用算法(NRU)
      在这里插入图片描述

带星号的表示访问位为1
在换入5时,扫描了一整个循环队列,然后再扫描到2后,访问位为0,换出

  • Clock置换算法的改进
    • 移除时,若驻留内存期间未被修改,不必写回辅存
    • 换出未修改过的页面比被修改过的页面开销小
    • 首选没有被使用过,没有被修改过的页面作为置换页面
    • 增加访问位A和修改位M
      • A=0,M=0表示未被访问,未被修改,最好的淘汰页
    • 执行过程
      • 指针当前位置开始 ,先找A=0,M=0的页面,并不改变A
      • 未找到,找A=0,M=1,所有扫描过的页面的访问位置为0
      • 未找到,重复第一步

缺页率:

4、文件管理

1、文件系统的层次结构

组成结构自底向上为

  • 数据项:文件系统中最低级的数据组织形式
  • 记录:一组相关的数据项集合,用于描述一个对象在某方面的属性
  • 文件:由创建者定义的一组相关信息的集合
    层次结构如下
    在这里插入图片描述

2、文件的逻辑结构、物理结构、文件控制块结构和目录结构

逻辑结构
  • 有结构的记录式文件
    • 顺序文件
    • 索引文件:为一个逻辑文件的信息建立一张索引表
    • 索引顺序文件
    • 直接文件和散列文件:关键字直接决定物理地址
  • 无结构的流式文件
物理结构
  • 连续分配
  • 链接分配
  • 索引分配
文件控制块(FCB)
  • 文件名
  • 文件的结构
  • 文件的物理地址
  • 存取控制信息:指示文件的存取权限
  • 管理信息
目录结构
  1. 单级目录结构
    在这里插入图片描述

  2. 二级目录结构
    在这里插入图片描述

  3. 树形目录结构
    在这里插入图片描述

  4. 图形目录结构
    在这里插入图片描述

3、文件的3中外存分配方式

  • 连续分配:文件分配连续的磁盘区域。查找速度快,但是容易产生碎片,需要定期进行存储空间的紧缩。
  • 链接分配
    • 隐式链接:用于链接物理块的指针隐式地放在每个物理块中,目录项中有指向索引顺序文件的第一块盘块和最后一块盘块的指针,每个盘块中有志向下一个盘块的指针
    • 显式链接:指针显式存放在内存的一张链接表中,每个磁盘设置一张链接表。这个表又被称为文件分配表(File Allocation Table,FAT)
  • 索引分配
    • 系统为每一个文件分配一个索引块,索引块中存放索引表,索引表中的每一个表项对应分配给该文件的一个物理块
    • 索引分配方式不仅支持直接访问,还不会产生外部碎片,文件长度也不受限制。但由于索引块的分配,增加了系统开销
    • 当索引表过大时,索引表可以被视作一个文件,再建立一级索引表

4、4种文件存储空间的管理方法

  1. 空闲文件表法:存储设备上一个连续空闲区可以看作一个空闲文件
  2. 空闲块链表法
  3. 位示图法:二进制串的每一位表示一个物理块的使用情况
  4. 成组链接法(UNIX使用的方法):适用于大型文件系统。将一个文件的所有空闲块按每组100块分成若干组,把每一组的盘块数目和该组的所有盘块号记入到前一组的第一个盘块中,第一组的盘块数目和第一组的所有盘块号记入到超级块中

5、磁盘的基本结构

物理结构:若干磁盘片组成,每个盘面对应一个磁头,磁臂可以沿着半径方向移动。

磁盘结构中的信息

  • 引导控制块
  • 分区控制块
  • 目录结果后
  • 文件控制块

6、数据查找过程

访问时间=寻道时间+旋转延迟+传输时间

7、磁盘调度算法

  • 先来先服务
  • 最短寻道时间优先:可能会使某些进程的请求长期得不到服务
  • 扫描算法(电梯调度算法):在磁头当前移动方向上选择与当前磁头所在磁道距离最近的请求作为下一次服务的对象
  • 循环扫描算法:固定磁头单向移动,到达边界后反向移动

5、设备管理

1、I/O设备4种控制方式

  • 程序直接控制方式:有CPU不断测试I/O设备
  • 中断控制方式:减少程序直接控制CPU的等待时间,提高CPU与设备的并行工作程度。设备控制器向CPU发送一个中断信号,CPU接收到中断信号后,转去执行设备中断处理程序。
  • DMA控制方式:外设和内存之间开辟直接的数据交换通道。在设备控制器的控制下,设备和内存之间可以成批地进行数据交换,不需要CPU干预
  • 通道控制方式:与DMA类似,需要CPU的干预更少,通道可以控制多台设备,进行内存与设备之间的数据交换

DMA控制方式和通道控制方式的联系和区别

2、I/O软件的层次结构

I/O层次结构

  • 中断处理程序:中断过程如下:唤醒被阻塞的驱动程序进程;保护被中断进程的CPU环境;分析中断原因;进行中断处理;恢复被中断进程的现场
  • 设备驱动程序:所有设备相关的代码放在设备驱动程序中,由于设备驱动程序与设备密切相关,因此应为每一类设备配置一个驱动程序。接受来自上层的设备独立性软件的抽象请求,将这些请求转换为设备控制器可以接收的具体命令,再将这些命令发送给设备控制器,并监督这些命令正确执行。处理过程如下:将抽象要求转换为具体要求;检查I/O请求的合法性;读出和检查设备的状态;传送必要参数;设置工作方式;启动I/O设备
  • 设备独立性软件:实现一般设备都需要的I/O功能,并向用户空间软件提供一个统一的接口。
  • 用户层软件

3、缓冲区的分类与结构

缓冲区的引入缓和了CPU与设备速度不匹配的矛盾,提高了设备和CPU的并行操作程度,提高系统吞吐量和设备利用率

  1. 单缓冲

  2. 双缓冲

  3. 循环缓冲
    在这里插入图片描述

  4. 缓冲池:广泛应用,缓冲池由多个缓冲区组成,其中的缓冲区可供多个进程共享,并且既能用于输出,也能用于输入

高速缓存和缓冲区

  • 存放数据不同:高速缓存存放时低速设备上的某些数据的备份,也就是说,高速缓存上有的数据,低速设备上必然有;而缓冲区中放的则是低速设备传递给高速设备的数据
  • 目的不同:高速缓存为了存放低速设备上经常被访问到的数据备份,这样就不必要每次访问低速设备;缓冲区是为了缓和高速设备和低速设备之间速度不匹配的矛盾

4、设备分配和回收的过程

设备管理中的数据结构

  • DCT:设备控制表,为每一个设备配置一张设备控制表,用来记录设备的特性以及I/O控制器的链接情况。内容入图所示在这里插入图片描述
  • COCT:设备控制器控制表。每个控制器有一张控制器控制表,用于反应设备控制器的使用状态以及和通道的连接情况
  • CHCT:通道控制表。每个通道有一张控制器控制表,用于反应通道的状态
  • SDT:系统设备表。整个系统只有一张系统设备表,记录了已连接到系统中的所有物理设备的情况,每个物理设备占用一个表目。

分配过程
1)根据设备类型,检索系统设备控制表,找到第一个空闲设备,并检测分配的安全性,如安全,则分配;反之,插入该类设备的等待队列。
2)设备分配后,检索设备控制器控制表,找到第一个与已分配设备相连的空闲设备控制器,若无空闲,则返回步骤1)查找下一个空闲设备。
3)设备控制器分配后,同样查找与其相连的通道,找到第一个空闲通道,若无空闲通道,则返回步骤2)查找下一个空闲设备控制器。若有空闲通道,则此次设备分配成功,将相应的设备、设备控制器和通道分配给进程,并启动I/O设备,开始信息传输。

回收
释放进程所占用设备、设备控制器及通道,系统进行回收,修改对应的数据结构

5、假脱机的原理与实现

在这里插入图片描述

同时外设联机操作,又称假脱机输入/输出操作。以联机的方式得到脱机的效果。低速设备经通道和设在主机内存的缓冲存储器与高速设备相连,该高速设备通常是辅存。为了存放从低速设备上输入的信息,在内存中形成缓冲区,在高速设备上形成输出井和输入井,传递时信息从低速设备传入缓冲区,再传到高速设备的输入井,再从高速设备的输出井传到缓冲区,再传到低速设备。

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值