国庆期间回顾总结了王道书中的知识点,用于速览
概论
特征
并发和共享是操作系统的两个基本特征,只有一个资源是并发的它才可以共享,如果操作系统不能对一个资源进行有效管理,将不能并发
并发
并发:同一之间间隔内有多个进程在运行。
并行:同一时刻有多少进程在运行,单处理机情况下只能有一个进程在运行。
共享:就是资源共享
- 互斥资源共享方式,如打印机
- 同时访问方式,宏观上是同时的,但是微观上是“分时共享”
虚拟:就是将一个物理资源变为逻辑上的多个,例如虚拟处理器技术,虚拟存储器技术以及虚拟设备技术
异步:程序不是一次执行完的,而是走走停停分多次执行完成的。
操作系统的目标和功能
-
计算机资源的管理者
-
处理机管理
处理机的分配是以进程(线程)为单位的,因此处理机的管理就是进程的管理,进程管理的主要功能包括:(1)进程控制(2)进程同步(3)进程通信(4)死锁处理(5)处理机调度
-
存储器管理
存储器的管理是为了给多到程序提供一个良好的环境,提高内存的利用率,主要包括(1)内存的分配与回收(2)地址映射(3)内存的保护和共享(4)内存扩充
-
文件管理
计算机中所有资源都是以文件形式存在,文件管理包括(1)存储空间的管理(2)目录管理(3)文件读写管理和保护
-
设备管理
设备管理的主要功能是完成用户的i/o请求,主要包括(1)缓冲管理(2)设备分配(3)设备处理(4)虚拟设备
-
-
操作系统作为用户与计算机硬件系统之间的接口
- 命令接口:主要作用是控制作业的运行,分为
- 联机控制方式,又称交互式命令接口适用于分时或者实时系统
- 脱机控制方式,又称批处理命令接口,适用于批处理系统
- 程序接口:由系统调用组成,用户使用这些接口请求对操作系统的使用,例如图形化操作界面
- 命令接口:主要作用是控制作业的运行,分为
-
扩充机器:有软件支持的裸机成为扩充机器或虚拟机,软件就是扩充机器。
发展
- 批处理阶段
- 单道批处理系统
- 多道批处理系统
- 分时操作系统,将处理机分成很短的时间片,按时间片轮流分给各联机作业使用,分时os的特征:
- 同时性
- 交互性
- 独立性
- 及时性
- 实时操作系统,如果有紧迫的作业,线做紧迫的作业
- 网络操作系统和分布式计算机系统
运行机制
内核程序是用户态程序的管理者
内核态:例如一些特权指令,是不允许用户直接调用的,如i/o指令,置中断指令等。系统内核主要包含4方面内容:(1)时钟管理(2)中断机制(3)原语(4)系统控制的数据结构及处理,例如pcb,作业控制块
用户态:只能执行非特权指令
操作系统有了内核态和用户态之后,在用户态不能使用内核态的功能如果切换是操作系统运行的重要机制,主要有中断,异常和系统调用
中断:也叫外中断,指来自CPU执行指令意外的事件,与当前运行的程序无关,属于强迫中断,例如外设请求,人的干预
异常:也叫内中断,例外或陷入,指源自CPU内部执行的事件,例如非法操作等
中断处理的过程:
- 硬件完成部分
- 关中断,保护程序现场状态,在保护现场过程中cpu不应相应更高级别的中断
- 保存断点,保证中断服务程序执行后可以返回原点,即保存pc
- 中断服务程序寻址,即中断服务程序的入口地址送入pc
- 中断程序完成
- 保存现场和屏蔽字
- 开中断
- 执行中断服务程序
- 关中断,保证在恢复现场和屏蔽字时不被中断
- 恢复现场和屏蔽字
- 开中断
- 中断返回
系统调用:用户不能直接执行对系统影响非常大的操作,必须通过系统调用的方式请求操纵系统代执行,例如:
(1)设备管理(2)文件管理(3)进程控制(4)进程通信(5)内存管理
操作系统体系结构
大内核
-
优势:将操作系统的主要功能作为一个紧密联系的整体运行在内核态,从而为应用提供高性能的系统服务。因为各管理模块之间共享信息,能有效利用相互之间的有效特性,有无与伦比的性能优势。
-
劣势:过于庞大,内核代码难以维护
微内核:将最基本的功能保留在内核,不需要在在内核执行的功能移到用户态。
- 优势:维护代价大大降低,各部分独立地优化和演进
- 劣势:性能,用户态和内核态需要反复切换。
进程管理
几个宏观问题:1:进程和程序的区别与联系2:死锁和饥饿3:银行家算法的工作原理4:
进程
概念
- 进程是进程实体的一次运行,是系统进行资源分配和调度的一个独立单位
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动
目的:是为了更好地描述和控制程序并发执行
进程的状态
- 运行态
- 就绪态,资源就绪,缺少处理机
- 阻塞态,缺少资源,有处理机也不能运行
- 创建态,申请pcb-》向pcb填写一些控制和管理进程的信息-〉分配运行所需资源-》进入就绪态
- 结束态
进程的控制(用原语实现)
- 创建新进程,如用户登陆系统,作业调度等
- 父进程撤销,子进程全部撤销
- 进程创建过程
- 为新进程分配一个唯一的进程标示号,并申请一个pcb
- 为进程分配资源,若资源不足则阻塞
- 初始化pcb信息
- 若进程就绪队列不满,则进入就绪队列
- 撤销已有进程(1)正常结束(2)异常结束(3)外界干预。进程终止过程:
- 跟进进程的标识符检索pcb,读该进程的状态
- 如果进程正处于执行状态,立即释放处理机资源
- 若进程有子孙进程,终止
- 将该进程所有资源归还给父进程或者os
- 将该进程的pcb从所在队列中删除
- 实现进程的状态转换
- 进程的阻塞:正在执行的进程没有申请到想要的资源,由系统自动执行阻塞原语(block),过程是:
- 首先根据进程标识找到PCB
- 保护现场,并将运行态转为阻塞态
- 将该pcb插入等待队列
- 进程的唤醒:在阻塞状态的进程有了要的资源,调用唤醒原语(wakeup)
- 首先根据进程标识找到pcb
- 从等待队列中拿出,并改为就绪状态
- 放入就绪队列,等待处理机
- 进程的阻塞:正在执行的进程没有申请到想要的资源,由系统自动执行阻塞原语(block),过程是:
- 进程切换:指处理机从一个进程到另外一个进程,过程如下:
- 保存处理机上下文,包括程序计数器和其他寄存器
- 更新当前进程pcb信息
- 把当前进程pcb加入到相应队列,阻塞或者就绪队列
- 选择另外一个进程,并更新pcb
- 更新内存管理的数据结构
- 恢复处理机上下文
进程的组成:
- 进程控制块,是进程存在的唯一标志,pcb随着进程的创建产生,pcb常驻内存任意时刻都可以存取。pcb的使用场景:
- 当某进程将运行时,要通过pcb查询其状态和优先级
- 当调度到某进程时,要根据pcb中的信息恢复运行现场,并根据pcb信息找到该进程的程序段和数据段
- 在某进行运行时,要根据pcb信息,才能和合作的进程实现同步,通信
- 在某进程因某种原因暂停时,需要将断点信息保存在pcb中
- 程序段
- 数据段
进程的通信
- 低级通信方式:pv操作
- 高级通信方式
- 共享内存
- 消息传递
- 管道通信,管道是共享内存的优化
线程
多线程提高并发性:有了线程,线程切换时有可能发生进程切换也可能不发生,不发生时候切换的开销就小
目的:为了更好的使多道程序并发执行,提高资源利用率和系统吞吐量,增加进程并发性
特点:是程序执行的最小单元,不拥有系统资源,也有线程控制块
线程模型:用户级线程和内核级线程的连接方式
- 一对一
- 一对多
- 多对多
处理机调度
为什么处理机调度:因为作业在工作时往往是要有计算机资源的,但是计算机资源和处理机比起来速度慢很多,不可能要让处理机等待计算机资源
调度的概念:在多道程序时,进程的数量大于处理机的数量,就会产生对处理机的竞争,在就绪队列中使用一定的算法选择一个进程进行处理机的分配
调度的层次:三级调度
三级调度的联系:作业调度是从外存中选择一批作业进行分配资源,然后将其放入内存,进程调度就会从其中选择一个作业进行调度。中级调度是为了提高内存的利用率,将暂时运行不了的进程和外内中已经有运行条件的进程进行置换。
- 作业调度:从外存后备状态的作业中挑选一个或多个作业给他们分配内存和i/o等资源,使他门具有获得处理机的权利。
- 中级调度:又称内存调度,将暂时不用的进程放到外存,将已经具备运行条件且内存有空间时调入内存
- 进程调度:又称低级调度,按照一定算法从就绪队列中选择一个进程,将处理机分配给他
进程调度的时机:在请求调度之后进行进程的调度,不能进行立马调度和切换的情况有:
- 正在处理中断
- 进程正在操作系统的临界区
- 正在需要完全屏蔽中断的原子操作
进程调度方式:正在执行上个进程时,此时有一个更为紧迫的进程
- 非剥夺调度方式,又称非抢占方式
- 剥夺调度方式,又称抢占方式
- 优先权
- 短进程优先
- 时间片原则
调度的基本原则:
- cpu利用率
- 系统吞吐量
- 周转时间
- 周转时间=作业完成时间-作业提交时间
- 平均周转时间=每个作业周转时间/作业数量
- 带权周转时间=作业周转时间/作业时机运行时间
- 平均带权周转时间
- 等待时间:处于等待处理机的时间之和
- 相应时间:从作业提交到首次获得处理机的一段时间
典型的调度算法:
作业调度算法:先来先服务,短作业,优先级,高相应比
进程调度算法:先来先服务,短作业,优先级,时间片
时间片是进程独有的
高响应比时作业独有的
- 先来先服务
- 短作业优先调度算法
- 平均等待时间和平均周转时间最少
- 对长作业不利,未考虑作业紧迫程度
- 优先级调度算法
- 高相应比优先调度算法
- 响应比=(等待时间+要求服务时间)/要求服务时间
- 时间片轮转算法
- 多级反馈立标调度算法
- 级别越高优先级越低,在队列内是FCFS
- 级别越高时间片越小,往下依次变大
- 一个作业来的时候会在1级队列最后,如果时间片来时没完成就放在2级队列…
进程同步
进程同步:在多道程序下,不同进程之间存在着一定的相互制约关系,进程同步时为了妥协进程间的相互制约关系
临界资源:一次只能被一个进程使用的资源
临界资源的组成(1)进入区(2)临界区(3)退出区(4)剩余区
同步:直接制约,为完成一个任务而简历的两个或多个进程,因为需要在某些时间节点上需要协调他们的工作次序而等待,信息传递产生的制约关系
同步应当遵守的原则:(1)空闲让进(2)忙则等待(3)有限等待(4)让权(处理机)等待
互斥:间接制约,一个进程进入临界区使用资源时,另外的进程必须等到这个已经进去的进程退出后才可进入
实现临界区互斥的方法
- 软件方法:单标志法,双标志法先检查,双标志后检查,peterson algorithm
- 硬件方法:中断屏蔽字,硬件指令方法
信号量:用来解决同步和互斥问题
管程:是一个数据结构,不需要程序猿来考虑资源的是否足够和互斥,对程序员透明,其中定义的资源的使用接口
经典同步问题:
- 生产者消费者问题
- 读者写者问题
- 哲学家进餐问题
死锁
死锁产生的原因:
- 系统资源的竞争
- 进程推进顺序的不当
死锁产生的必要条件
- 互斥
- 不剥夺
- 请求保持
- 循环等待
死锁处理的策略:
- 死锁预防
- 破坏必要条件中的一个或者多个
- 破坏请求保持:预先分配所有资源
- 破坏不剥夺,一般适用于易于保存和恢复的资源如cpu的寄存器和内存资源,不适用于打印机
- 破坏
- 死锁避免
- 不安全状态:没有足够的资源使得进程能够正常的运行结束
- 银行家算法:work,need,allocation
- 死锁检测和解除
- 检测:资源图
- 解除
- 资源剥夺法
- 撤销进程法
- 进程回退法
内存管理
- 内存空间的分配和回收
- 地址转换,程序中逻辑地址-》内存物理地址
- 内存空间的扩充
- 存储保护,保证各道作业在各自的存储空间运行互不干扰
程序执行过程
- 编译,将用户源代码编译成若干目标模块
- 链接,目标模块和所需的库函数链接在一起,形成一个完整的装入模块
- 静态链接
- 装入时动态链接
- 运行时动态链接
- 装入,将装入模块装入内存运行
- 绝对装入,只适用于单道程序环境,逻辑地址和实际内存物理地址完全相符
- 可重定位装入,在多道程序中,每个目标模块的起始地址都是从逻辑0开始的,在装入内存时首先要看内存是否有足够装下目标模块的内存控制,如果有就进行装入,在装入内存的过程中要对模块的代码块中指令和数据的修改的过程叫重定位,地址变换通常是在装入时一次完成的,叫静态重定位
- 动态运行时装入,也叫动态重定位,装入模块装入内存后,不是立即完成相对地址到绝对地址的转化而是加入一个重定位寄存器,在装入模块要运行时才会进行地址的转换。这样的好处在于程序运行前将部分代码装入到内存,然后在运行期间动态进行内存的分配,便于代码块的共享。
内存保护:就是不让内存越界方案有:
- cpu设置一堆上下限寄存器
- 基址寄存器+重定位寄存器
覆盖与交换
交换用于不同进程,覆盖用于同一进程
覆盖:程序段=固定区+若干覆盖区
- 将固定区装入内存中,在运行过程中用到哪一块将哪一块放入覆盖区覆盖原本的
- 如果运行时代码大于主存时失效
交换:把处于等待状态的进程从内存转到辅存,例如中级调度用的就是交换技术
连续分配方式
- 单一连续分配:适用于单道程序,所以不会产生内存越界,直接分配内存空间不会产生外部碎片但是会产生内部碎片,存储器利用率低
- 固定分区分配,有可能程序太大没有合适的分区,有内部碎片
- 定长分区
- 不定长分区
- 动态分区分配,不对内存进行事前的划分,而是在程序装入内存时根据进程的大小进行分区。会产生很多外部碎片。动态分配是的几个策略:
- 首次适应算法first fit
- 最佳适应算法best fit,性能不好
- 最坏适应算法worst fit,又叫最大适应算法largest fit
- 临近适应算法 next fit,又叫循环首次适应算法
非连续分配方式
非连续分配方式允许一个程序分散的装入不相邻的内存区域。
根据分区大小是否固定分为:
- 分页存储管理,是否要把作业所有页面都装入内存
- 基本分页存储管理方式
- 请求分页管理方式
- 分段存储管理
基本分页存储管理方式:
- 将内存分为若干大小相同的块,程序也按照块进行划分
- 每个程序最多只会产生一个内部碎片
- 几个概念
- 进程中的块叫页,内存中块的叫页框,外存的叫块
- 地址结构:页号+页内偏移量
- 页表:页表一般存在内存中,对应物理块的映射地址
- 物理地址由页表项和地址决定,页表中的物理块号+地址中的页内偏移
- 基本地址变换机构
- 逻辑地址=页号p*页大小+页内偏移量w
- 是否越界
- 在页表中根据页号查找物理块
- 物理块+页内偏移量=物理地址
- 有快表的地址变换机构
- 没有快表进行一次指令的存取需要两次访存,第一次时在根据页表确定物理地址,第二次时读写指令
- 有快表(tlb相联存储器)
- 二级页表映射
基本分段存储管理方式
- 逻辑地址结构:段号s+段内偏移量w
- 段表:段号+段长+本段在主存内的始址
- 地址变换结构:(根据段号找到段表中相应的基址+段内偏移量)+在段表中查找到的段长
虚拟内存
操作系统好像提高了一个比实际大的内存,基于局部性于哪里,在程序装入时,将程序的一部分装入内存,其余驻留在外存就可以启动程序执行,在程序执行过程中,如果要使用的部分不在内存中,就将需要的部分调入内存将不需要的调出。
虚拟存储器的三大特征:
- 多次性,作业被分多次调入内存
- 对换性,执行过程中,程序在内存和外存之间进行兑换
- 虚拟性,逻辑上进行内存的扩容
虚拟内存的实现建立在离散分配的内存管理方式的基础上,实现的基础是:
- 一定容量的内存和外存
- 页表机制,或段表机制
- 缺页中断机构
- 地址变换机构
请求分页存储管理
- 主要功能:
- 将一部分页面装入内存就可以启动作业
- 作业执行过程中,要访问的页面不在内存是调入内存,不用的置换出
- 组成:
- 页表机制,页表的组成由(页号+页内偏移)变为
- 页号
- 物理块号
- 状态位p,是否调入内存
- 访问字段a,访问次数
- 修改位m,是否被修改
- 外存地址
- 缺页中断机构
- 地址变换机构
- 页表机制,页表的组成由(页号+页内偏移)变为
页面置换算法
- 最佳置换算法opt,可用来评价其他算法
- 先进先出页面置换算法fifo,可能会出现belay现象:内存变大,页面置换次数变多
- 最近醉酒未使用置换算法lru
调入页面的时机:
- 预调页策略,系统在调入页面时,根据局部性原理调入其相邻的页面。这种策略主要应用于进程的首次调入。
- 请求调页策略,要访问的页面不在内存,由系统请求,缺点是每次只调入一页,调入/调出的次数多时会花费过多的i/o开销
从何处调入页面:
- 文件区
- 对换区
- 不同情况
- 有足够对换区,运行前将和进程有关的文件复制到对换区
- 缺少足够的对换区,不会被修改的在文件区,会修改的在对换区
- unix方式,和进程有关的文件都在文件区,运行过的在对换区,为运行过的在文件区。
工作集:一段时间内内存中的进程中所用到的页面的集合。
文件管理
概念
文件的定义:文件是以计算机硬盘为载体的存储在计算机上的信息集合。
文件系统的组成:与文件管理有关的软件,被管理的文件,实施文件管理所需的数据结构
文件的打开与关闭:
- 操作系统维护一个包含所有打开文件的表(open-file table);用户使用操作系统调用open将文件的属性从外存复制到内存,并将该文件在表中的索引返回给用户。文件不在被使用就从open-file table中删除这个索引。
- 操作系统也是通过这个索引对文件进行操作的,而不是文件名
- 一个文件第一次被打开是会在open-file table里面添加索引,后面如果再有进程打开文件会记录在一个文件打开计数器(open count)里面打开+1,关闭-1
- 每个文件被打开会有如下记录信息:
- 文件指针
- 文件打开数
- 文件磁盘位置
- 访问权限
文件的逻辑结构
- 无结构文件(流式文件)
- 有结构文件(记录式文件)
- 顺序文件
- 索引文件
- 索引顺序文件
- 散列文件
目录结构
FCB和索引结点是找到文件的唯一标识符
文件控制块(FCB):是用来存放控制文件需要的各种信息的数据结构
索引结点:存放在磁盘上的索引结点叫磁盘索引结点,unix中每个文件都有一个唯一的磁盘索引结点。磁盘索引结点主要包括:
- 文件主标识符
- 文件类型
- 文件存取权限
- 文件物理地址
- 文件长度
- 文件链接次数
- 文件存取时间
在检索文件过程中,只用到了文件名,当找到一个目录项时,才从目录中读取该文件的物理地址。也就是说在检索目录时,文件的其他描述信息不会用到,也不需要调入内存。
文件的搜索,创建,删除和查看以及修改都是对目录进行操作的,例如搜索文件是搜索目录,创建文件是先创建目录中的目录项
文件目录结构有
- 单级目录结构,整个文件系统只简历一张目录表,每个文件占一个目录项
- 两级目录结构,将文件系统分为主文件目录和用户文件目录
- 多级目录结构
- 无环图目录结构,树形目录结构便于实现分类,在树形结构上加入了一些指向同一结点的边,使整个目录变为有向无环图,便于文件的共享
文件共享
- 基于索引结点的共享方式(硬链接)
- 利用符号链实现文件共享(软链接):LINK类型文件,写了想要共享文件的路径
硬链接比软链接快
文件保护
- 口令保护
- 加密保护
- 访问控制
- 访问类型
文件系统的实现
文件系统的层次结构
- 第0级:用户调用接口
- 第1级:文件目录系统,管理文件目录
- 第2级:存取控制验证模块,用户访问要求和FCB中的权限进行对比
- 第3级:逻辑文件系统与文件信息缓冲区,找到逻辑结构中的块号
- 第4级:物理文件系统,将逻辑结构转化为物理结构
- 辅助分配模块:管理辅助空间
- 设备管理程序模块
目录实现
- 线性列表
- 哈希表
文件实现
文件的实现就是关注文件的物理结构,即文件数据在物理设备上是如何分布和组织的,主要分为两个方面进行回答,一是文件的分配方式,二是文件存储空间的管理
文件分配方式:
- 连续分配
- 链接分配,类似链表
- 索引分配,有一个文件记录了文件所有的索引
文件存储空间管理
- 文件存储空间的划分与初始化
- 文件分为目录区和文件区
- 文件存储器空间管理
- 空闲表法,适用于连续分配方式
- 空闲链表法,适用于链接分配,有空闲盘块链和空闲盘区链
- 位示图法
- 成组链接法,结合了空闲表和空闲链表
磁盘组织与管理
磁盘调度算法:
- 先来先服务
- 最短寻找时间,有饿死
- scan算法,又叫电梯算法
- cscan算法,只向一个方向提供服务,到顶之后迅速返回
磁盘的管理
- 磁盘初始化:分扇区
- 扇区数据结构:头,数据区域,尾部;头和尾部包含了一些磁盘控制器所使用的信息
- 引导块,初始化程序(自举程序)
输入/输出(i/o)管理
概述
按使用特性i/o分类
- 人机交互类外部设备
- 存储设备
- 网络通信设备
按传输速率i/o分类
- 低速设备,鼠标
- 中速设备,打印机
- 高速设备,移动硬盘
i/o控制方式,外围设备和内存之间的输入/输出方式:
- 程序直接控制方式,每次读一个字,每读入一个字,cpu需要对外设状态进行循环检查,直到该字已经在i/o控制器的数据寄存器中,实现简单,cpu利用率低
- 中断驱动方法,允许i/o设备打断cpu请求服务,从而解放cpu
- DMA方式,因为中断驱动方法中用的是CPU的寄存器,速度还是受限,DMA是在内存和i/o设备之间开辟直接的数据交换通道,有以下特点:
- 基本单位是块
- 所传送的数据是从设备到内存,或者反之
- 尽在一个或多个数据块开始车结束时,才需要cpu干预,其他时间整块数据的传送时在dma控制器的控制下完成的
- 主机-控制器接口:在i/o和内存之间的接口
- DMA控制器接口中有以下4类寄存器
- 命令寄存器cr
- 内存地址寄存器mar
- 数据寄存器dr
- 数据结束前dc
个人理解:中断驱动方式和DMA的不同在于,首先数据一个是从外存到cpu寄存器,一个是从缓存到cpu寄存器,速度不同;另外i/o方式是请求数据完成后中断,通过cpu处理,DMA方式是请求数据完成后中断通过DMA控制器完成的处理。
- 通道控制方式,与DMA的不同,相当于一个处理机,但是没有自己的内存,与cpu共享内存
- DMA控制器对应一个设备,通道可以对应多个设备
- DMA通过cpu控制传送数据的大小,通道方式是由通道控制的
i/o子系统的层次结构的例子,用户发出一个i/o请求之后,在i/o软件中调用相应的接口,然后通过设备独立性软件寻找具体的操作,然后具体到某个设备,每个设备具体的操作不同就要用到驱动程序进行解析,然后获取处理机中断正在执行的程序,然后具体到某个硬件设备完成操作。
i/o子系统的层次结构:
- 用户层i/o软件
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
- 硬件设备
缓存和缓冲的不同在于,缓存是从低速设备上复制一部分过来用的时候能直接用,缓冲是低速设备要给高速设备传送数据,因为高速速度不能一直能所以先放到缓冲区。
高速缓存
磁盘高速缓存(disk cache):在内存和硬盘间,逻辑是硬盘,物理上是内存
高速缓存有两种形式:一种是在内存中开辟一片空间,另一种是利用未在使用的内存
缓冲区
目的:
- 缓和cpu和i/o之间的速度不匹配
- 减少中断
- 解决数据单元不匹配
- 提高cpu和i/o的并行
分类:
- 单缓冲区
- 双缓冲
- 循环缓冲
- 缓冲池
设备的分配与回收
设备分为:
- 独占设备
- 共享设备,分时式共享使用设备
- 虚拟设备,spooling方式使用外部设备
SPOOLing技术(假脱机技术)
组成:
- 输入井和输出井
- 输入井用于模拟磁盘,用于收容i/o设备输入的数据
- 输出井用户模拟输出的磁盘
- 输入缓冲区和输出缓冲区
- 输入进程和输出进程