前言
计算机操作系统是计算机科班的重中之重,一般本科科班对操作系统的认识停留在认识和理解上,要想独立设计一个OS可是凤毛麟角 Linux 但是既然是科班所学的操作系统,扎实理解操作系统算法和机制,对本科生来说也不容易了。因此,本篇我们不仅以面试者的角度,也以专业408研究生入学考试的角度来对操作系统有个宏观上的把握!
文章目录
进程管理
进程管理是操作系统的一大核心任务,进程概念的创立、操作系统对进程的管理、进程的调度、通信、互斥、同步都是进程管理的核心要义。但是进程并不是计算机一出现就产生的,在计算机的早期发展年代,并无进程,随着并发、异步的提出,进程才被提上日程。
现代操作系统的黎明:OS发展历程
- 无操作系统:那个时候程序打在纸带上,丝毫无OS管理可言,有的仅仅是一些IO的辅助手段
- 单道批处理系统:这个时候有了作业的概念,作业轮流排队上处理机执行,按FCFS的方式排队,这个时候有了监督程序,是早期操作系统的雏形
- 多道批处理系统:这个时候作业之间并发执行,提高了计算机资源(尤其是IO)的使用效率
- 分时系统:多道批处理系统是没有交互能力的,但你看我们现在的服务器,是不是几个用户可以登录同时操作,这就是分时系统。可以认为,分时系统就是在多道批处理系统上引入了便于用户上机的调度方式而产生的操作系统
- 实时系统:这种一般是工业级的操作系统了,响应时间比分时系统还快,而且快很多
进程的执行状态
简而言之,所谓“静止”,其实就是内存中一直阻塞着的进程被OS通过交换技术换出到外存(磁盘)中。
OS管理进程的数据结构——PCB
PCB含有管理和控制进程的必要信息:
- 进程标识符
- 处理机状态信息(思考:什么是处理机状态,这和中断保护现场的现场是有共同点的)
- 进程调度信息(状态、优先级、IO事件)
- 进程控制信息(程序、数据地址、资源清单、链接指针)
- 其他信息(父亲是谁,儿子是谁。。。认爹认儿)
进程同步
在OS课程中,进程同步主要的实现方式是信号量机制。信号量机制又有记录型信号量、AND型信号量、一般型信号量。这里面最独特的就是原子性的P操作和V操作。P操作其实就是等待其他进程释放资源(wait),P操作就是释放本身占用的资源,通知其他进程资源已可用(signal)。下面是记录型信号量的题示:
进程同步经典问题
这三个问题各有特点。
- 生产者-消费者:生产者往缓冲区中添加资源,而消费者消费资源。当缓冲区已满或者全空,相应地,生产者和消费者需要阻塞,不能再对缓冲区进行任何操作,直至缓冲区状态发生变化。
- 读写者问题:相较于生产者-消费者问题,读写者问题不同在于:多个只读进程(reader)可以同时访问共享对象,而改写进程(writer)必须与其它进程(包括reader, writer)互斥地访问共享对象的同步问题。所以这里对读者进程来说,需要在第一个和最后一个进程下功夫,第一个读者进程进来的时候就得通知写者进程停止写了,最后一个读者进程退出的时候就通知写者进程可以继续写了。
- 哲学家就餐问题:哲学家就是太会想事情了,
吃饭的时候还在卷这是计算机科学中的一个经典问题,用来演示在并发计算中多线程同步时产生的问题。在1971年,著名的计算机科学家艾兹格·迪科斯彻提出了一个同步问题,即假设有五台计算机都试图访问五份共享的磁带驱动器。稍后,这个问题被托尼·霍尔重新表述为哲学家就餐问题。这个问题可以用来解释死锁和资源耗尽。
进程死锁
死锁是并发中必然会面临的一个问题。死锁产生的必要条件有:
- 进程对临界资源互斥访问
- 有进程请求被另一个进程保持的资源
- 一个进程已有的资源不能被强制剥夺
- 循环等待(有环)
解决办法:
- 预防
- 避免(著名算法:银行家算法)
- 检测 (消环法)
- 解除
银行家算法 (研究生入学考试重点)
核心就是把OS当成一个精明的银行家,精明的人总会先打小算盘,预估一下自己把这笔钱借出去之后会产生什么后果,如果能赚到(安全)则分配,如果会亏损(不安全)则停止分配。
核心数据结构:
max[]
:最大需求矩阵work[]
:工作向量,系统可提供进程继续运行所需要的各类资源数目available[]
:表示系统中可被利用的各类(共m类)资源的数目(相比于work,这是一个整体概念)allocation[]
:表示系统为每个进程已分配各类资源的数目need[]
:表示每一个进程尚需要的各类资源数目,不难有如下式子:Need[i,j] = Max[i,j] – Allocation[i,j]
request[]
:表示进程 i 请求分配各类资源的数目finish[]
:完成向量,表示系统是否有足够的资源分配给进程(true/false)
进程调度评估指标
- 周转时间:从提交(进入时刻)到完成的时间称为该作业的周转时间
- 平均周转时间:n个作业(进程)周转时间的平均值
- 带权周转时间:周转时间与实际运行时间之比称为该作业的带权周转时间
- 平均带权中转时间:n个作业带权周转时间的平均值
- 平均等待时间:从进入就绪队列到获得CPU的时间
进程调度
- FCFS先来先服务 (普通进程调度)
- SF短作业优先 (普通进程调度)
- HRN高响应比优先 (普通进程调度)
- HPF优先级 (普通进程调度)
- RR时间片轮转 (分时进程调度)
- 多级队列调度
- 多级反馈队列调度:设置多个就绪队列,并从高到低赋予不同的优先级;每个队列采用FCFS算法,时间片长度从高优先级到低优先级依次增加
- EDF (实时进程调度)
开学第一周需要写完的实验报告,和期末才需要提交的大作业,你先选哪个写? - LLF (实时进程调度)
DDL算法,大学生现状??
进程通信
- 匿名管道通信:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。
- 有名管道通信:名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
- 消息队列通信:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
- 信号量通信:作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
- 信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
- 共享内存通信:共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式。
- 套接字通信
内存管理
内存管理是操作系统的另一管理核心,没有存储管理,操作系统将面临着无序的冲突。
连续内存分配
- 单一内存分配:一个用户程序独占连续的内存用户区,只能用于单用户、单任务的OS中
- 固定内存分配:将内存划分为多个区域,每个内存区存放一个用户程序(这里各分区的大小不一定相等)
- 动态内存分配:根据用户程序的大小,动态地为之分配连续的内存空间(如何组织回收?)
- 动态重定位内存分配:紧凑(对内存中正在使用的分区进行搬迁,使多个小的空闲碎片合并为一个大的空闲分区)和动态重定位
离散化内存分配
- 分页:将进程的逻辑空间分成若干大小相等的页管理
- 分段:分段是指将一个进程分成多个具有独立逻辑意义的自然段来管理
- 段页式:先将用户作业(进程)分成若干具有一定逻辑意义的段,再将段分成大小固定的若干个页
虚拟内存
许多人学习了虚拟内存之后还不能对虚拟内存下一个很好的定义 /doge
虚拟内存是计算机系统内存管理的一种技术,使应用程序认为它拥有一个连续完整的地址空间的假象,而实际上,它通常是被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行交换。
因此,我们说,虚拟内存使得计算机系统在存储容量上接近于外存,在存储访问速度上接近于内存。
请求分页(段)和缺页中断机构
请求分页 (段),和基本分页 (段) 的区别就在于请求分页涉及到和外存的交换问题 (使用虚拟存储所决定的)。
访问的页如果在内存中那当然很好,如果没有在内存中,则交由缺页中断机构处理:
页面置换算法
-
FIFO
-
LRU
-
CLOCK (NRC)
⑴ 将内存所有页面用指针链成一个循环队列
⑵ Clock算法沿链查找页面
(3) 如果访问位为0,则换出
(4) 如果访问位为1,则将访问位复0;并继续沿链查找下一个页面,直到找到一个访问位为0的页面换出 -
改进CLOCK
改进型Clock置换算法除设置1位访问位(A),还设置1位修改位(M)
将页面分成四类:- 1类:A=0,M=0,最佳淘汰页
- 2类:A=0,M=1
- 3类:A=1,M=0
- 4类:A=1,M=1,最不应淘汰页
⑴ 将内存所有页面用指针链成一个循环队列
⑵ Clock算法沿链查找页面
⑶ 如果访问位为0,则换出
⑷ 如果访问位为1,则将访问位复0;并继续沿链查找下一个页面,直到找到一个访问位为0的页面换出
面试分割线,以上为面试高频基础点,如果以面试的角度来看,下面基本上没什么面试点了~~
文件管理
文件结构(物理?)
文件既有有结构的文件,也有无结构的文件(流式文件)
外存分配
- 连续外存分配
- 链接分配 (隐式和显式)
- 索引分配 (单级、多级、混合)
计算下可分配的空间大小,假设1个页 4KB
空闲盘块组织方式
- 空闲盘块链表法
- 空闲盘区链表法
- 位图法 (这个猛,时空都能达到优秀的性能,尤其是空间十分友好,腾讯思维题经常可以考虑到这种数据结构,Java中用Bitset来实现)
- 成组链接法
分配:1、若s.free=1,则将栈底盘块号所对应的盘块(内容)调入空闲盘块号栈,并将该盘块分配出去;2、否则,直接将栈顶盘块号所对应的盘块分配出去,并将s.free递减1
回收:1、若s.free=N,则将空闲盘块栈内容写入新释放的盘块中,并使s.free=1,且将该盘块号作为栈底;2、否则,s.free递增1,将该盘块号作为栈顶
目录 FCB
- 目录是将文件FCB组织在一起的数据结构
- 目录管理是文件系统中最主要的任务之一
- 目录有时也可看成一个文件,称目录文件
- FCB是描述和控制文件的数据结构,包括文件名等基本信息,存取控制信息和使用信息
- 文件系统依据FCB对文件进行操作
了解一下FCB的结构:
基本可以用Linux 的 ls -l 命令列举出来?
设备管理
I/O控制方式
- 程序控制(轮询)
- 中断
- DMA
- 通道
缓冲管理
- 单缓冲
- 双缓冲
- 循环缓冲
- 缓冲池
SPOOLing技术
假脱机。由系统中的两个专门负责I/O的进程,模拟I/O外围机的功能,实现(假)脱机输入/输出
磁盘I/O 性能
寻道时间、旋转时间、数据传输时间的计算
磁盘访问算法
- FCFS
- SSTF (最短寻道时间优先)
- SCAN (扫描调度)
- CSCAN (循环扫描调度)
- FSCAN ()
- N-Step-Scan
又是一条分割线:
安全性问题是个热门的面试点
系统安全
数据加密技术:
- 对称加密
- 非对称加密
数字签名
数字证书
这些都是面试时关于网络安全、系统安全的面试点,篇幅十分长,还请读者自行百度阅读理解。