操作系统

GPT摘要

这篇文章主要介绍了操作系统的基本概念、功能和管理机制。文章首先阐述了操作系统的定义、功能(控制硬件软件资源、组织调度、提供接口环境)和特征(并发、共享、虚拟、异步)。然后详细讨论了操作系统的发展阶段(人工、单道、多道、分时、实时)和用户接口类型(命令、程序、图形界面)。 在进程管理方面,文章区分了作业、程序和进程的概念,重点介绍了进程的特性(动态性、并发性、独立性、异步)和PCB结构,并比较了进程与线程的不同(资源分配调度单位 vs 轻量级调度单位)。进程调度算法包含FCFS、SJF、HRRN等基本算法,以及轮转、优先级、多级反馈队列等高级算法。 内存管理部分详细讲解了不同分配方式(单一连续、固定分区、动态分区)及其优缺点,特别是外部/内部碎片问题。重点介绍了分页和分段机制,包括虚拟内存概念、页表映射、缺页中断处理等实现原理,并对比了页面置换算法(FIFO、LRU、LFU、Clock等)。 在文件系统方面,文章解释了文件的组织方式(顺序、索引)和存储结构(连续、链接)。设备管理部分介绍了磁盘调度算法(FCFS、SSTF、SCAN等)。最后归纳了20个关键问题,包括操作系统的定义、启动过程、系统调用、进程调度、死锁处理、内存管理和常见操作系统比较等核心知识点。

1.概述

目的

  • 控制硬件软件资源
  • 合理组织调度资源
  • 为软件提供接口和环境

image-20230407133023066

特征

  • 并发:宏观上同时运行
  • 共享:并发进程共同享用资源
  • 虚拟:一个物理实体对应多个逻辑
  • 异步:进程走走停停

image-20230407132853257

os不同时期发展

​ 人工、单道、多道、分时(时间片多用户)、实时

image-20230407132654765

接口

​ 用户接口;联机(cmd)、脱机(程序)、图形化

​ 程序接口:系统调用组成。程序调用相应功能系统调用

​ 大内核(模块集中)、微内核

运行环境

image-20230407133249113

2.进程

作业比程序更广泛,包含程序、数据和作业说明书

程序是个静态的概念,进程是程序的一次执行

进程:对并发执行的程序的控制和描述,资源分配调度的基本单位,动态性、并发性、独立性、异步

拥有资源(代码段 数据段 IO),唯一PCB

image-20230407133644813

状态

image-20210807140817329

编译

image-20210807141320862

进程切换

image-20230407133959202

进程通信

image-20230407134144875

线程

​ 进程:处理机资源最小单位 创建、撤销和切换代价大

​ 线程:处理机调度单位 轻量级进程 TCB QQ中与不同好友聊天

​ 临界资源与临界区

调度层次分类

  • ​ 高级调度(作业调度):外存到内存 并分配资源 根据JCB (CPU、磁盘、内存等资源)
  • ​ 中级调度(内存调度):阻塞程序调入外存,提高利用率和吞吐量
  • ​ 低级调度(进程调度):分配cpu (抢占、非抢占)

image-20230407134438270

调度算法

image-20230407134721361

作业
  • ​ 先来先服务FCFS
  • ​ 短作业优先SJF
  • ​ 高响应比HRRN (等待+服务时间)/服务时间
  • ​ 优先级调度PSA
进程
  • ​ 轮转RR
  • ​ 优先级(抢占、非抢占)
  • ​ 多级反馈队列:高优先级时间片短,未完成则降级
实时
  • ​ 最早截止EDF(抢占、非抢占)
  • ​ 最低松弛度优先LLF(不得不开始时抢占)
  • ​ 优先倒置(1.不让抢占临界区 2.优先度继承)

临界资源

只允许一个进程使用的资源,硬件实现方法

​ 1.关中断

​ 2.bool变量标识,while等待 ; swap对换 原理一样 忙碌等待

信号量

PV操作

​ S表示资源数目,当多个资源时,AND机制

​ wait: s– if s < 0,线程加入等待队列

​ signal:s++ if s<=0, 唤醒等待队列

常见问题:生产者消费者、进餐、读写 (互斥加紧范围小)

死锁

条件:互斥、请求和保持、不可抢占、循环等待

处理方法

  • 预防死锁(一次性分配资源、允许抢占)
  • 避免死锁(银行家:在一次分配完后检查是否有安全序列能实现全部运行)
  • 监测死锁(资源分配图,分配完有没有环)
  • 解除死锁(资源剥夺、回滚进程、终止进程)

银行家

image-20230407100403822

image-20230407100418486

资源分配图

去掉所有已经出边(申请了的资源),查看某个进程P是否所有的出边(need)都能满足,能满足则该进程运行,释放所有资源。最后是否能都运行。其实就是判断是否存在安全序列。否则就会产生环

image-20230407100722191

3.内存

内存分配(连续)

image-20230407103230820

  • 单一连续分配(单程序)

  • 固定分区分配(区域固定但大小不等,一个程序一个区) 分区表维护状态 存在内部碎片 不能共享

    image-20230407101903055image-20230407101958427

  • 动态分区分配(根据进程大小分配,空闲表,空闲区由一个双向指针连接起来),存在外部碎片(太小没人用) 回收直接合并前后空闲区

    image-20230407102352685

    紧凑:各个进程挪位,挪出一个连续空闲区域。把蓝色部分合并

    image-20230407103058745

顺序方法

​ 首次适应FF:开头开始找到就用 循环首次适应NF:从上一次开始

​ 最佳适应BF:分配最小的能用的 最坏适应WF:分配最大的区域

索引方法
  • ​ 快速适应:多个按大小划分的链表(2kb,5kb..)
  • ​ 伙伴系统:多个链表大小为2^i^ ,不存在该大小区域则拆分2^i+1^链表

​ 用哈希来寻找表头指针

分页管理(离散)

优点:

  1. 解决外部碎片
  2. 非连续分配,且不用的可以先不分配,解决程序大小受限问题

​ 内存以页面为单位,地址=页号+页内地址 , 页面大小1kb~8kb

​ 所以程序的逻辑地址都转为分页地址

页表:程序中页号(逻辑地址 连续)与内存页号(物理地址 不连续)对应关系,存放在内存中。PCB中的PTR保持页表起始地址。 页表在内存管理单元(MMU)中,每个进程都有

​ 每次访问需要访问两次内存,引入快表(高速缓冲寄存器) ;查询时间 2t + λ - t*a

多级列表:将页表空间离散,2^20^ = 2^10^ * 2^10^

​ 4GB内存空间 每个页4kb,共2^20^条; 每一个条目需要4B 则需要2^20^ * 4 B = 4 MB 的页表空间

​ 转为二级后:2^10^ * 4B + 2^10^ * 2^10^ * 4B = 4KB + 4MB。但二级页表是可以不存在,所以节约并且离散化了空间

image-20230407120032813

分段管理

​ 满足编程上要求,主程序、子程序、数据段。需要段表实现虚拟到物理

​ 当用户共享一段内存时,只需要一个段表,而分页需要多个

对比:

打个比方,比如说你去听课,带了一个纸质笔记本做笔记。笔记本有100张纸,课程有语文、数学、英语三门,对于这个笔记本的使用,为了便于以后复习方便,你可以有两种选择。

第一种是,你从本子的第一张纸开始用,并且事先在本子上做划分:第2张到第30张纸记语文笔记,第31到60张纸记数学笔记,第61到100张纸记英语笔记,最后在第一张纸做个列表,记录着三门笔记各自的范围。这就是分段管理,第一张纸叫段表。

第二种是,你从第二张纸开始做笔记,各种课的笔记是连在一起的:第2张纸是数学,第3张是语文,第4张英语……最后呢,你在第一张纸做了一个目录,记录着语文笔记在第3、7、14、15张纸……,数学笔记在第2、6、8、9、11……,英语笔记在第4、5、12……。这就是分页管理,第一张纸叫页表。你要复习哪一门课,就到页表里查寻相关的纸的编号,然后翻到那一页去复习

虚拟内存

​ 页表中的标志位标记是否在内存中

​ 时间、空间局部性

​ 作业的页面可能不在内存中,需要从外存调入,产生一个缺页中断

image-20230407104638679

​ 分配规则:规定分配局部置换(单程序内换)、可变分配局部置换(一起换)、可变分配局部置换(动态加页)

置换算法!
  • ​ 最佳置换算法 (理论算法、无法实现)
  • ​ 先进先出
  • ​ 最久未使用LRU 链表头尾
  • ​ 最少使用LFU(页面访问表 +1)
  • ​ Clock算法 (第一次置为零不换出,第二次=0则 换出)

4.文件

文件:一系列记录

记录:一系列数据,有key

逻辑结构

​ 顺序文件:顺序存储记录,读取N/2

​ 索引文件:按键排序建立索引表,logN复杂度

目录

单级目录、多级目录、树形目录

磁盘

连续组织方式

链接组织方式:隐式(只存首地址,下一个盘块在当前盘块中),显式(全存到FCB中)FAT表

5.io

设备分类

image-20230407131713071

控制方式

磁盘

​ 盘面 磁道 扇区

寻道+旋转+传输

image-20230407131437644

磁盘调度
  • 先来先服务FCFS
  • 最短寻道时间SSTF
  • 电梯算法:电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。
  • CSCAN:单方向电梯

image-20230407131552116

问题

概述

1.什么是操作系统?操作系统的主要功能是什么?

操作系统位于计算机硬件和应用软件之间,负责协调和管理硬件资源的分配、控制和调度,提供对硬件的抽象和访问接口,以便应用程序能够运行并与硬件交互。

进程管理、内存管理、文件系统、输入输出

2.请大致描述操作系统的启动过程。

操作系统的启动过程包括硬件自检、引导加载程序加载、内核初始化、用户空间初始化、用户应用程序加载和运行等阶段。

  1. 上电自检(Power-On Self-Test, POST):当计算机电源被打开时,计算机硬件会进行自我检测,包括检测内存、CPU、硬盘、显示器等硬件设备,以确保它们正常工作。
  2. BIOS/UEFI初始化:计算机硬件自检完成后,BIOS(基本输入/输出系统)或UEFI(统一可扩展固件接口)会被加载并初始化,它们是计算机的固件,负责初始化硬件设备、设置启动选项等。
  3. 引导加载程序(Boot Loader):BIOS/UEFI会从预定义的引导设备(通常是硬盘、光盘或网络)中加载引导加载程序,例如GRUB、LILO等,它负责加载操作系统的核心模块到内存中。
  4. 操作系统内核加载:引导加载程序会加载操作系统的内核模块到内存中,并将控制权交给操作系统的内核。
  5. 内核初始化:操作系统内核被加载后,会进行初始化,包括初始化设备驱动程序、建立进程管理、内存管理、文件系统等子系统。
  6. 用户空间初始化:操作系统内核初始化完成后,会创建一个或多个用户空间的进程,这些进程负责提供用户界面和用户应用程序的运行环境。
  7. 用户应用程序加载:用户空间的进程会加载用户应用程序到内存中,并开始执行用户应用程序。
  8. 用户应用程序运行:用户应用程序开始在操作系统的运行环境下执行,通过系统调用和内核交互来请求操作系统提供的服务和资源。

3.什么是系统调用?系统调用的作用是什么?

系统调用(System Call)是操作系统提供给用户态程序访问内核态功能和资源的接口。它允许用户态程序通过调用特定的系统调用函数来请求操作系统的服务和资源,例如文件操作、网络通信、进程管理、内存管理等。

当需要执行系统调用时,用户通过中断或异常从用户态切换到内核态,从而执行系统调用

4.多道程序设计、分时操作系统、实时操作系统是什么

  • 多道程序:通过进程之间的相互切换,同时运行多个进程
  • 分时操作系统:通过时间片轮转实现多用户多程序并发执行,用户之间的隔离和资源的共享。
  • 实时操作系统:用于处理实时任务,硬实时(航空、医疗工业)、软实时

5.什么是中断?如何工作?

中断(Interrupt)是计算机系统中的一种事件,暂停当前指令,转向执行特定的中断程序

过程:

  1. 中断请求(外部IO、定时器、出现错误)
  2. 暂停当前保留进程现场
  3. 根据中断向量表定位中断处理程序入口,移交控制权
  4. 执行中断处理程序,清除中断标志位
  5. 恢复现场,继续执行原来程序

作用:中断的存在使得程序支持多任务处理、提高响应,控制硬件设备

6.什么是守护进程(Daemon Process),它在操作系统中的作用是什么?

守护进程是一种一直在后台运行的特殊类型的进程,用于提供服务和执行系统管理任务。维护系统的正常运行


进程

7.什么是进程控制块(PCB)?其主要作用是什么?

CB保存了进程的基本信息,如进程ID(PID)、进程状态(如就绪、运行、阻塞等)、进程优先级、内存指针、CPU寄存器内容、进程的内存分配信息等,用于对进程进行管理和控制。

8.操作系统中进程和线程的区别

进程是指在操作系统中正在运行的一个程序的实例,它包括了程序的代码、数据和运行时的资源。每个进程都有独立的内存空间和系统资源,例如文件句柄、网络连接等。进程之间相互隔离,彼此独立运行,互不干扰。进程之间通过进程间通信(IPC)机制来进行数据交换和通信。

而线程是进程内的一个独立执行流,也是程序执行的最小单元。同一进程中的多个线程共享进程的内存空间和系统资源,包括文件句柄、网络连接等。线程之间可以通过共享内存来进行通信,因此线程间的通信更加高效。线程的切换开销较小,因此线程可以更快地响应用户请求。

总结:进程是独立的程序执行实体,拥有独立的内存空间和系统资源;而线程是进程内的执行流,共享进程的内存空间和系统资源,可以更快地进行通信和切换。

进程:独立、稳定;线程:资源共享(需要手动实现互斥)、响应快

9.什么是进程通信?进程通信的方式有哪些?

通信方式 优点 缺点 应用场景
管道 简单易用,无需考虑同步问题。半双工,如果空了或者满了就会阻塞 只能用于具有亲缘关系的进程间通信 父子进程间通信
信号 传递简单信息,可靠性高,响应速度快。一个进程可以发送一个信号给另一个进程 只能传递整数值,不能传递复杂数据结构 进程间异步通信
信号量 一个计数器,可以用于同步和互斥,可靠性高 只能用于具有亲缘关系的进程间通信 进程间同步和互斥
消息队列 可以传递复杂数据结构,可靠性高,支持多对多通信 性能较差,需要内核支持 进程间异步通信
共享内存 传输速度快,可以直接访问共享内存区域,支持多对多通信 需要考虑同步和互斥问题,可能会出现死锁等问题 进程间大量数据交换
套接字 网络通信,支持不同主机之间的进程通信,支持多种协议和数据格式 实现较为复杂,性能较差 不同主机之间的进程通信

10.细说信号量:

信号量可以解决资源间的共享和同步问题

资源共享:

​ S表示资源数目,当多个资源时,AND机制

​ wait: s– if s < 0,线程加入等待队列

​ signal:s++ if s<=0, 唤醒等待队列

生产者消费者:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// 定义两个信号量,用于控制缓冲区的空闲空间和数据项数量
Semaphore semEmpty = n; // 初始值为缓冲区的大小,表示空闲空间的数量
Semaphore semFull = 0; // 初始值为 0,表示数据项的数量

// 生产者进程
while (true) {
// 生成一个数据项
// ...
// 等待空闲空间,如果没有空闲空间则阻塞
wait(semEmpty);
// 将数据项放入缓冲区
// ...
// 增加数据项数量
signal(semFull);
}

// 消费者进程
while (true) {
// 等待数据项,如果没有数据项则阻塞
wait(semFull);
// 从缓冲区取出一个数据项
// ...
// 增加空闲空间数量
signal(semEmpty);
}

11.为什么操作系统需要进行进程调度,有哪些常见的进程调度算法?

为了充分利用 CPU 资源

  • 先来先服务(First-Come, First-Served, FCFS):按照进程到达的先后顺序进行调度,即先到达的进程先被执行。

  • 最短作业优先(Shortest Job Next, SJN):选择下一个执行的进程时,选择估计运行时间最短的进程。

  • 优先级调度(Priority Scheduling):为每个进程分配一个优先级,优先级高的进程优先被调度执行。

  • 时间片轮转法(Round Robin, RR):每个进程被分配一个固定的时间片(时间量),当时间片用完时,进程被挂起,下一个进程开始执行,被挂起的进程排队等待下一轮调度。

  • 高响应比:1 + 等待时间/服务时间

  • 多级反馈队列调度(Multilevel Feedback Queue Scheduling):多级队列,优先级高的时间短,进程在规定时间未完成则降到下一级

  • 实时:

    • ​ 最早截止EDF(抢占、非抢占)
    • ​ 最低松弛度优先LLF(不得不开始时抢占CPU)

12.什么是死锁?如何避免和检测死锁?

各个进程或线程因争夺系统资源(如共享资源)而导致相互等待

互斥条件 请求与保持条件 不可剥夺条件 循环等待条件

处理方法

  • 预防死锁(一次性分配资源、允许抢占)
  • 避免死锁(银行家:在一次分配完后检查是否有安全序列能实现全部运行)
  • 监测死锁(资源分配图,分配完有没有环)
  • 解除死锁(资源剥夺、回滚进程、终止进程)

内存

13.内存管理的几个阶段?

  • 单一连续分配(单程序)
  • 固定分区分配(区域固定但大小不等,一个程序一个区) 分区表维护状态 存在内部碎片 不能共享
  • 动态分区分配(根据进程大小分配,空闲表,空闲区由一个双向指针连接起来),存在外部碎片(太小没人用) 回收直接合并前后空闲区
  • 分页管理(离散) 1页1~8KB
  • 分段管理 逻辑上

14.二级分页管理中,如何实现逻辑地址到物理地址的映射

image-20230411175730569

15.什么是虚拟内存,概念及其实现原理,虚拟内存与物理内存的映射是怎么实现的?

概念:

  • 虚拟内存:每个进程拥有自己的虚拟地址空间,包括代码段、数据段和堆栈段等,进程访问的地址都是虚拟地址,由进程的逻辑地址空间组成。
  • 物理内存:实际的物理内存模块,用于存储正在执行的进程的数据和指令。

实现原理:

  • 分页机制:将进程的虚拟地址空间划分为固定大小的页,同时将物理内存划分为对应大小的页框。每个页框可以存放一个页的数据或指令。
  • 页表映射:每个进程都有自己的页表,用于记录其虚拟地址空间中每个页与物理内存中页框的映射关系。通过页表,操作系统可以实现虚拟地址到物理地址的映射。
  • 页面置换:当物理内存不足以容纳所有进程所需的页时,操作系统会使用页面置换算法,将一些不活跃的页面置换到磁盘上,从而释放物理内存空间,用于加载其他进程的页面。
  • 页面调度:当发生缺页时,抛出缺页中断,操作系统根据进程的访问模式和页的访问频率等信息,通过页面置换算法来决定将哪些页面调入物理内存,从而提高系统的性能。

16.操作系统中的页面置换算法有哪些

  • ​ 最佳置换算法 (理论算法、无法实现)
  • ​ 先进先出
  • ​ 最久未使用LRU 链表头尾
  • ​ 最少使用LFU(页面访问表 +1)
  • ​ Clock算法 (第一次置为零不换出,第二次=0则 换出)

文件IO

17.文件系统是什么?请讲解文件系统的常见类型及其特点

文件系统是操作系统中负责管理和组织文件的一部分,它提供了一种逻辑结构,用于在存储介质(如硬盘、闪存等)上存储和组织文件,以便用户可以方便地创建、读取、写入、删除、移动、复制和管理文件。

18.什么是磁盘调度算法?常见的磁盘调度算法有哪些?

  • 先来先服务FCFS
  • 最短寻道时间SSTF
  • 电梯算法:电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。
  • CSCAN:单方向电梯

image-20230407131552116

其他

19.请解释什么是死机和蓝屏,并解释它们在操作系统中的原因和处理方法。

  • 死机:死机是指计算机在运行时突然停止响应,无法继续执行任何操作,屏幕上的图像和界面也无法更新。死机可能是由于软件或硬件故障引起的,例如程序错误、设备驱动问题、内存错误等。死机时,屏幕上的内容通常会被冻结在当前状态,无法进行任何操作。
  • 蓝屏:蓝屏是指在Windows操作系统中出现严重错误时,屏幕会显示蓝色的错误信息界面,通常包含错误代码和错误信息。蓝屏通常由于操作系统的关键组件出现故障或冲突引起,例如驱动程序问题、硬件故障、系统文件损坏等。蓝屏时,计算机会自动崩溃并重启,屏幕上会显示蓝屏错误信息。

死机无提示信息,而蓝屏有;死机会冻结在当且页面,蓝屏会自动崩溃并重启;

20.介绍下常见的操作系统

常见的操作系统类型包括Windows、Linux和macOS。

  1. Windows:Windows是由微软公司开发的操作系统,广泛应用于个人计算机和企业环境。Windows操作系统以图形用户界面(GUI)为特点,提供了丰富的应用程序生态系统和广泛的硬件兼容性。Windows操作系统版本众多,包括Windows 10、Windows 8、Windows 7等,每个版本都有不同的特点和功能。
  2. Linux:Linux是一种自由和开放源代码的操作系统,基于UNIX的设计原则和哲学。Linux操作系统以稳定、安全和高度可定制性为特点,被广泛用于服务器、嵌入式系统、移动设备和超级计算机等领域。Linux有众多的发行版,如Ubuntu、CentOS、Debian等,每个发行版有其独特的特点和用途。
  3. macOS:macOS是由苹果公司开发的操作系统,专门设计用于苹果的Mac计算机。macOS以稳定、安全和用户友好的界面为特点,与苹果的硬件和软件紧密集成,提供了独特的用户体验和生产力工具。macOS有多个版本,如macOS Monterey、Big Sur、Catalina等,每个版本都有新的功能和改进。

这些操作系统之间的主要区别包括:

  • 用户界面:Windows以图形用户界面(GUI)为主,macOS也是如此,而Linux则可以有多种用户界面选择,例如GNOME、KDE、XFCE等。
  • 开放性:Linux是自由和开放源代码的操作系统,可以自由定制和修改,而Windows和macOS都是商业操作系统,不开放源代码。
  • 应用程序生态系统:Windows和macOS拥有丰富的商业软件和应用程序生态系统,而Linux则以开源软件为主,应用程序生态系统相对较小。
  • 硬件兼容性:Windows通常具有广泛的硬件兼容性,因为它是市场份额最大的操作系统之一,而macOS只能在苹果硬件上运行,Linux的硬件兼容性则因发行版和驱动支持而异。
  • 安全性:Linux和macOS在安全性方面通常被认为较高,因为它们基于UNIX的安全设计原则,而Windows在过去一直面临着安全威胁和攻击的挑战。
  • 社区支持:Linux拥有庞大的开源社区和支持系统,而Windows和macOS则主要依赖于厂商的官方支持。