适合用来迅速回忆知识点
图灵机:纸带-->读入控制器(控制器拥有运算逻辑)-->读出信息
通用图灵机:设置控制器的算法->修改控制器->读取数据->运算出结果
冯诺依曼存储程序思想:将程序和数据存放到计算机内部的存储器中,计算机在程序的控制下一步步进行处理
输入设备,输出设备,存储器,运算器,控制器
开机时的流程
- x86 PC刚开机时CPU处于实模式
- 开机时 cs = 0xffff; IP = 0x0000
- 寻址0xffff0(ROM BIOS映射区)
- 检查RAM 键盘,显示器,软硬盘磁盘
- 将磁盘0磁道0扇区读入0x7c00处
- 设置cs=0x07c ip=0x0000
- 引导扇区(bootsect.s)
syscall
操作系统的特征
- 并发: 在同一个时间段内同时执行, 宏观上并行,微观上串行(单处理机上)
- 共享: 资源共享, 互斥共享方式和同时共享方式
- 虚拟: 将一个物理上的实体虚拟成若干逻辑上的对应物,虚拟处理机,虚拟内存(虚拟存储器),虚拟设备(spooling)
- 异步: 多个程序并发执行,而资源有限不是一贯到底的,而是走走停停,所以体现了异步性
操作系统作为计算机硬件资源的管理者
操作系统的功能:
- 处理机管理
- 存储器管理
- 文件管理
- 设备管理
操作系统实现用户与计算机硬件系统之间的接口
- 命令接口
- 联机命令接口(命令行cmd) 脱机命令接口(命令清单,返回结果)
- 程序接口 (系统调用)
操作系统实现了对计算机资源的抽象
操作系统运行模式
- 特权指令:不允许用户直接使用的指令
- 非特权指令:允许用户直接使用的指令,不能直接访问系统中的软硬件资源,仅限于访问用户的地址空间
- 防止用户应用程序对系统造成破坏
中断与异常
系统调用:涉及系统中的各种资源都是由系统调用完成的
用户通过操作系统运行上层程序,而这个上层程序的运行依赖于操作系统的底层管理程序提供服务支持,当需要管理程序服务时, 系统则通过硬件中断机制进入核心态,运行管理程序,也可能是应用程序出现问题,被动地需要管理程序的服务,这时通过异常处理来进入
操作系统的启动
- 激活CPU 激活的CPU读取ROM中的boot程序,将指令寄存器置为BIOS的第一条指令,即开始执行BIOS的指令
- 硬件自检 检查是否有故障
- 加载带有操作系统的硬盘,
- 加载主引导记录MBR (主引导硬盘的作用是告诉cpu去哪个主分区找操作系统)
- 扫码硬盘分区表,并加载硬盘活动分区
- 加载分区引导记录PBR 寻找并激活分区根目录下用于引导操作系统的程序
- 加载启动管理器
- 加载操作系统
访管指令:用户程序无法完成某些功能,主动要求系统提供服务,则使用访管指令,请求系统介入
进程
- 进程由程序段,数据段和PCB组成,它是进程实体的一次运行过程,是计算机资源分配和调度的基本单位
- 进程的基本特征:动态性,独立性,并发性,异步性
- 进程的状态转换:
- 就绪态,运行态,阻塞态
- 挂起态:将进程挂起后该进程无法再竞争cpu资源,处于静止就绪状态,进程挂起通常应用于进程对换中,此时进程可以腾出内存空间给就绪进程,还可以用来调节系统的负荷,方便用户考察自己的运行进程或父进程考察子进程,方便操作系统检查运行中的资源使用情况或进行记账等
- PCB
- 作用
- 进程创建时,os为它新建一个PCB,该结构之后常驻内存,任何时刻都可以存取,并再进程结束时删除,PCB是进程实体的一部分,是进程存在的唯一标识
- 进程执行时:系统通过PCB了解进程的运行状态,以便对其进程控制和管理
- 系统通过PCB感知进程,或者PCB参与进程的整个生命周期
- 系统欲调度某进程运行时,通过PCB查询该进程的优先级以及状态,当调度某进程后,通过其PCB设置现场信息,并通过PCB获取其内存和程序段内存地址信息,当与合作进程进行同步时也需要访问PCB,由于某些原因暂停执行时也需要通过PCB保存断点信息
- 组织方式
- 链接方式
- 索引方式
- 作用
- 进程的创建
- 进程树:父子进程关系
- 创建进程的时机:终端用户登录,作业调度,系统提供服务,用户程序的应用请求
- 创建过程
- 首先申请一个PCB并分配一个唯一标识符
- 然后分配进程所需的资源,这些资源可以来自系统,也可以来自父进程
- 初始化PCB
- 如果就绪队列可以插入,则将该进程插入就绪队列等待被调度
- 终止
- 原因:
- 正常结束: 程序正常运行完毕准备终止进程
- 异常终止: 程序运行过程中出现某些异常错误,例如程序越界, 程序指令错误等,导致程序异常结束
- 外界干预: 操作系统或者管理员干预直接结束进程,或者父进程终止导致子进程终止
- 过程
- 根据进程标识符,检索出该进程的PCB,读取PCB中进程状态
- 若进程处于执行状态,则立即终止执行,将处理机资源分配给其他进程
- 若该进程有子进程,则终止其所有子进程
- 回收pcb资源,将pcb从其所在队列中删除
- 原因:
- 阻塞
- 执行进程过程中,其期待的事件没有发生
- 过程
- 找到进程的PCB,若其处于运行状态,立即终止执行,将现场信息保存到PCB中,将进程插入相应的阻塞队列中,将处理机资源分配给其他进程
- 唤醒
- 和阻塞类似
- 进程的通信
- 共享存储, 低级通信是通过共享数据结构通信,高级通信是通过共享存储区进行通信
- 消息传递
- 进程间的数据交换以格式化的消息为单位, 通过发送和接受消息两个原语进行数据交换
- 直接通信方式:发送进程直接把消息发送给接受进程,并将它挂在接受进程的消息缓冲队列上,接收进程从缓冲队列中取消息
- 间接通信方式:发送进程将消息发送给某个中间实体,接收进程从这个中间实体中获得消息
- 管道通信
- 管道是连接读进程和写进程的共享文件,写进程以字节流的方式将信息写入管道,接收进程从管道中接收信息
- 管道采用的时候半双工通信方式,一次只能一方进程通信
- 线程和多线程模型
- 线程和进程的比较
- 调度
- 拥有资源
- 并发性
- 独立性
- 系统开销
- 对多处理机的支持
- 为什么引入线程之后有利于提高系统的并发性
- 用户级线程
+ - 内核级线程
+ - 组合方式
- 多对一
- 一对一
- 多对多
- 线程和进程的比较
- 进程是一个独立功能的程序关于某个数据集合的一次运行活动,它可以申请和拥有资源,是一个动态的概念,是一个活动的实体
- 进程把能够识别进程状态的变量存储在PCB中,通过这些变量系统能够更好地了解进程地状况
- 父进程调用子进程 和主程序调用子程序的区别
- 父进程创建子进程后他们可以并发执行,主程序调用子程序后先执行子程序,主程序暂时停在调用点(子程序压栈)
- 多线程和多任务之间的区别
- 多任务针对操作系统而言的,它是说操作系统可以同时执行多个任务
- 多线程针对一个程序而言的,代表一个程序可以执行的线程的个数
调度
- 高级调度(作业调度):根据某些算法从后备队列中选出合适的作业调入内存等待运行
- 中级调度(内存对换):将某些暂时不能运行的进程调出内存(挂起), 将准备就绪的进程换入内存, 提高系统资源利用率和系统吞吐量
- 低级调度(进程调度):从就绪队列中选取一个进程,分配处理机给它
- 周转时间:作业完成时间-作业提交时间 带权周转时间:作业周转时间/作业实际运行时间
- 等待时间
- 响应时间
- 不应进行进程切换和调度的情况
- 处理机在处理中断的时候
- 进程在操作系统内核临界区中
- 其他需要完全屏蔽中断的原子操作
- 应进行进程切换和调度
- 发生引起调度的事件且当前进程无法运行下去了(只在这种情况下调度则系统实现的是非剥夺)
- 中断处理完成或者自陷处理完毕则可以回到原进程或者调度新的进程(剥夺)
- 非剥夺抢占方式(急但是得等)和剥夺抢占方式(急则可以抢)
- fcfs(作业和进程且不可剥夺)
- sjf(作业和进程)
- 优先级(作业和进程)
- 优先级设置
- 静态优先级:进程类型,系统对进程的要求,用户要求
- 动态优先级:系统>用户, 交互>后台, I/O型>cpu型
- 优先级设置
- 高响应比优先(作业)
- 响应比 = (等待时间+要求服务时间)/要求服务时间
- 照顾短进程,保证公平性,不会落下长进程
- 时间片轮转(进程) 最重要的是选择合适的时间片大小(略大于一个进程完成的时间) 因素:系统响应时间+就绪队列中的进程数目+系统处理能力
- 多级反馈队列调度算法
- 设置多个就绪队列,每个队列设置不同的优先级
- 为每个队列中设置时间片,优先级越高时间片越短
- 每个队列都采用FCFS调度算法调度进程,若在该队列设置的时间片内完成则撤离该进程,否则将其放入下一级就绪队列的队尾,在最后一个队列中采用时间片轮转算法
- 按队列的优先级调度,只有前i-1层的队列空时才调度第i层的队列的进程
- 进程切换
- 上下文:某一时刻cpu寄存器和程序计数器的内容
- 上下文切换:处理机从一个进程的运行转到另一个进程上运行,这个过程中,进程的运行环境产生了实质性的变化
同步和互斥
- 临界资源:一次只允许一个进程访问的资源
- 临界区:访问临界资源的代码段
- 同步:进程之间的制约关系(一个完成之后,另一个要依赖前一个完成的结果才能正确执行)
- 互斥:都需要访问相同的临界资源
- 进程同步机制
- 空闲让进
- 忙则等待
- 有限等待
- 让权等待
- 实现临界区互斥的方法
- 软件-单标志法:两个进程通过一个全局变量来进行判断是否可以进入临界区(在己方退出临界区时将标志修改为对方可以进入的状态,但是如果对方一直不进入(它就没有修改标识符)那我方也无法再进入临界区了)
- 软件-双标志先检查:先判断对方是否在临界区中,如果不在则直接进入临界区并修改自己在临界区中(容易造成两个进程同时进入临界区的情况)
- 软件-双标志后检查:先告诉别人我在临界区中,然后检查别人是否在临界区中(容易出现同时标志自己在临界区中,然后导致双方都无法进入临界区的情况)
- 软件-皮特森算法:新增一个turn标志位,用flag和turn同时表示当前临界区状态,解决了冲突问题和饥饿问题
- 硬件-中断屏蔽方法
- 互斥锁(硬件实现,会出现忙等现象,)
- 信号量
- 整形信号量
- 记录型信号量(新增一个进程链表,将等待进程挂上去)
- 可以利用信号量来实现同步和互斥
- 管程(类似与封装好的工具类,通过管程来实现各种同步互斥操作)
- 条件变量
- x.wait:进程等待x事件,调用x.wait阻塞进程,将进程加入x的等待队列中
- x.single:x对应的条件发生变化,调用x.single唤醒一个因x条件而阻塞的进程
- 条件变量
死锁:
- 是什么:一组进程中存在相互等待对方释放资源的情况,若无外力作用,则无法解除这种等待情况则称这组进程陷入死锁状态
- 原因:资源不足,进程推进顺序不当
- 必要条件:
- 互斥条件
- 请求并保持条件
- 不剥夺条件
- 循环等待条件
- 死锁的处理策略
- 死锁预防:
- 死锁避免:避免进入不安全状态
- 死锁检测和解除:
- 资源分配图:
- 死锁定理:资源分配图不可完全化简
- 死锁解除:
- 资源剥夺法(挂起死锁进程并抢占它的资源,将这些资源分配给其他发生死锁的进程),
- 撤销进程法:强制撤销部分或者全部死锁的进程
内存管理
- 主要功能:
- 程序进入内存的过程
- 编译
- 链接
- 装入
- 内存保护采取的措施
- 上下限寄存器
- 重定位寄存器(基地址寄存器)和界地址寄存器(限长寄存器)
- 可重入代码: 允许多个进程进行访问,但是不可被修改的代码段
- 覆盖:一个进程运行过程中并不是所有内容都需要调入内存才能开始运行,因此可以将用户区分为固定区和覆盖区,经常活跃的部分放在固定区,其他部分按关系调入内存,
- 对换:
- 定义
- 类型
- 对换空间
- 换入
- 换出
- 内存分配方式:
- 单一连续分配方式
- 固定分区分配 先画好格子,要格子时直接分格子
- 动态分区分配 在要格子的时候再根据算法划分格子
- 首次适应算法
- 循环首次适应算法
- 最佳适应算法
- 最坏适应算法
- 动态重定位分区算法(紧凑)
- 伙伴系统
- 分页存储管理
- 多级页表:当一个进程非常大时,其页表项是非常多的,这会导致页表长度很大,页表也会占用很多内存空间,引入多级页表是为了为了减少内存中页表所占空间, 只需要将一级页表调入内存,后续再将进程和所需的二级页表调入内存,这大大节省了内存的空间
- 分段存储管理
- 段页存储管理
虚拟存储器
- 常规存储器的特点
- 虚拟存储器的特点
- 局部性原理
- 请求分页存储管理方式
- 新增字段
- 缺页中断机制
- 地址变换机构
- 页框分配
- 驻留集 少 多
- 内存分配和置换策略策略
- 调页策略
- 置换算法 (OP, FIFO, LRU,clock 改进版clock, LFU,PBA)
- 请求分段存储管理方式
- 新增字段(多了谁?)
- 分段的共享
- 分段保护
- 越界检查
- 权限控制
- 环保护机制
- 分段保护
- 抖动和工作集
- 抖动根本原因
- 预防策略
- 工作集概念
输入输出系统
- I/O系统的功能
- 实现物理设备的实现细节
- 与设备无关性
- 提高处理机和I/O设备的利用率
- 对I/O设备进行控制
- 确保设备的正确共享
- 错误处理
- I/O系统的层次结构
- 用户层I/O软件
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
- I/O设备的种类
- 信息
- 传输速率
- 使用类型
- 设备控制器
- 控制寄存器
- 数据缓存寄存器
- 状态寄存器
- I/O寄存器的访问方式
- I/O端口号
- I/O内存映射
- I/O通道
- 通道指令
- 通道程序
- 中断
- 是什么,
- 怎么做(保存断点,转向中断处理程序,恢复现场)
- 设备驱动程序
- 抽象->具体,设备请求合法性, 检查设备状态,传递相应参数,启动设备
- I/O控制方式
- 轮询
- 中断
- DMA
- 通道
- 设备独立性软件
- 设备独立性是什么
- 如何实现设备独立性
- 设备独立性软件做什么的
- 提供用户到设备驱动程序的同一接口
- 差错控制,缓冲管理,逻辑设备到物理设备的映射,独立设备的分配和保护
- 设备分配
- SDT->DCT->COCT->COHT
- Spooling 技术
- 磁盘调度
文件和文件系统
- 文件操作(重点打开操作)
- 文件逻辑结构
- 有结构文件(类似数据库表) (数据项,记录,文件)
- 顺序文件,索引文件,索引顺序文件
- 无结构文件(流式文件,字节流构成的文件)
- 有结构文件(类似数据库表) (数据项,记录,文件)
- 文件目录
- 文件控制块(FCB) 的集合构成文件目录 , FCB被称为目录项, 目录也以文件的形式存储,被称为目录文件
- Unix系统将文件描述信息放在外存,在内存中通过文件名和指向外存地址上的文件信息的索引节点构成
- 目录结构
- 单级:不允许重名,也不利于实现共享
- 双级:允许重名和共享,但是不能创建子文件
- 多级
- 文件共享
- 基于索引节点的共享方式(硬链接,真实的父文件不能随意删除子文件)
- 好处
- 基于符号链的共享方式(软链接,共享文件时创建一个link文件,保存被共享文件的地址,当操作共享文件时,系统截获操作,然后系统通过link文件存放的地址找到该文件进行文件操作,这种方式性能较差,但是被共享的文件能随时删除)
- 基于索引节点的共享方式(硬链接,真实的父文件不能随意删除子文件)
- 文件保护
- 权限矩阵(拷贝权, 所有权,控制权)
磁盘存储器的管理
- 外存组织方式(在外存中如何分配空间给文件)
- 连接组织方式
- 隐式连接(链表)
- 显示连接(FAT表,文件的分配方式记录在该表上,也是通过该表访问文件)
- 索引组织方式(为每个文件建立索引表,表中记录文件每个盘块的位置,在文件物理地址中保存指向索引表的指针,索引表中按顺序存放指向盘块的指针)
- 混合索引(直接,一次,二次)
- 连接组织方式
- 空闲文件空间的管理
- 空闲表法(类似于内存动态分区分配法)
- 空闲链表法 空闲盘块链,空闲盘区链
- 位示图 利用二进制的一位表示对应盘块的空闲状况
- 成组链接法
除了信号量,操作系统中还有许多其他的进程同步机制,例如管程、互斥锁、条件变量等。这些机制各有特点,可以根据具体情况选择合适的机制来实现进程同步。
问题
- 操作系统的组成部分有哪些?每个组成部分的作用是什么?
- 内核:操作系统的核心,负责管理操作系统的各种资源
- 进程管理器:进程控制,进程通信
- 内存管理器:内存分配, 内存保护
- 文件管理器: 文件读写操作等
- 设备管理器:设备分配,设备保护,权限控制等
- 网络协议栈:负责系统的网络通信,比如各种协议栈,数据通信等
进程和程序的区别
介绍一下spooling技术
ARP
ppp(不具备纠错能力)
文件系统的常见组织结构有哪些?请简要描述它们的特点。 文件的结构就联想数据库
层次结构文件系统
网状结构文件系统
关系型结构文件系统
什么是磁盘分区?它的作用是什么?
操作系统中的进程同步有哪些方法? 信号量 管程 消息传递
在操作系统中,什么是死循环?它会对系统造成什么影响? 死循环是系统一直在重复执行某段程序或者代码段 它会影响系统性能,甚至导致系统崩溃