操作系统(OS)这门学科在计算机领域有着很重要的作用,作为计算机硬件和软件的临界者,对计算机发展有着很重要的意义,随着时代的不断发展,越来越多的操作系统进入大众视野,无论是大家耳熟能详的Windows、MAC,抑或是程序员口中经常念叨的Linux。除了电脑操作系统,手机中的鸿蒙、苹果、安卓也是大家关注的热点,因此要想在计算机领域有所造诣,操作系统是必须要了解掌握的一门学科,因此在这里借助平台,跟大家分享一下我学习操作系统的经验和笔记,用十天的时间来和大家梳理和整理这门学科,让我们一起探索其中的奥秘,享受知识带给我们的快乐吧!!!
I/O设备的基本概念和分类
按功能划分:
(1)人机交互类外部设备
鼠标、键盘、打印机……数据传输速度慢
(2)存储设备
移动硬盘、光盘……数据传输速度快
(3)网络通信设备
调制解调器……数据传输速度适中
按传输速率划分:
(1)低速设备
鼠标、键盘……传输速率为每秒几个到几百字节
(2)中速设备
激光打印机……传输速率为每秒数千甚至上万字节
(3)高速设备
磁盘……传输速率为每秒数千甚至千兆字节
I/O控制器
CPU和机械设备之间的“中介”
- I/O控制器可能会对应多个设备
- 内存印象I/O:让寄存器占用内存地址的一部分
- 寄存器独立编址:采用I/O专用地址
I/O控制方式
(1)程序直接控制方式
整个过程要进行轮询方式,CPU不断介入检查
传输单位为:字
数据流向:
- 读操作:I/O设备 -> CPU -> 内存
- 写操作:内存 -> CPU -> I/O设备
CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低
(2)中断驱动方式
引入中断机制,可以将等待I/O进程阻塞,CPU检测到中断信号,进行中断处理。
CPU和I/O设备并行运行
(3)DMA方式(直接存储器存取)
数据传输单元是“块”
数据的流向是从设备直接放入内存,或者从内存直接到设备。
CPU干预只在开始和结束
(4)通道控制方式
通道:一种硬件,弱鸡版的“CPU”,可以识别并执行一系列通道指令
I/O软件层次结构
- 用户层软件:
实现与用户交互的接口,用户可以直接使用该层提供的、与I/O操作相关的库函数对设备进行操作 - 设备独立性软件:
将用户请求翻译成格式化I/O请求,并通过“系统调用”请求操作系统内核服务 - 设备的保护
- 差错处理
- 设备的分配与回收
- 数据缓冲区管理
建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序(建立逻辑设备表LUT) - 设备驱动程序:
不同的设备有不同的硬件特性,所以要控制不同的设备要进行不同的驱动程序 - 中断处理程序:
I/O任务完成时,I/O控制器会发送一个中断信号,系统跟你局中断信号类型找到相应的中断处理程序
I/O核心子系统
假脱机技术
批处理阶段引入了脱机输入/输出技术
- 输入缓冲区:用于暂时存放输入设备输入的数据,之后转存到输入井中
- 输出缓冲区:用户暂时存放从输出井送来的数据,之后载传送至输出设备上
输入\输出缓冲区属于内存
输入井\输出井属于磁盘
共享打印机原理:
多个用户进程申请打印请求,系统答应后不会直接分配打印资源,而是进行两个准备:
【1】在磁盘输出井中为进程申请一个空闲缓冲区,用来存放要打印的数据
【2】为用户申请填写打印请求表,将请求表挂到假脱机队列上等待
设备的分配与回收
设备的固有属性
- 独占设备:一个时段只能分配给一个进程(如打印机)
- 共享设备:可同时分配多个进程使用(如:磁盘),各进程往往是宏观上同时共享使用设备而微观上交替使用
- 虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可以同时分配给多个进程使用
设备分配算法
- 先来先服务
- 优先级高者优先
- 短任务优先
设备分配中的安全性
- 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒(一个时间段只能使用一个设备,对于进程来说,CPU和IO设备只能串行工作)
- 不安全分配方式:进程放出I/O请求,系统为其分配I/O设备,进程可以继续执行。只要某个I/O请求的布袋满足时才将进程阻塞(计算任务和IO任务可以并行处理,有可能发生死锁)
- 静态分配
进程运行之前分配所有需要的资源,运行结束后归还 - 动态分配
进程运行中动态申请设备资源
设备分配管理中的数据结构
“设备”、“控制器”、“通道”
-
设备控制表(DCT):系统为每个设备配置一张(DCT):系统为每个设备配置一张DCT,用于记录设备情况
(设备类型、设备标识符、设备状态、指向控制器表的指针、重复执行次数和时间、设备队列的队首指针) -
控制器控制表(COCT):每个设备控制器都会对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理
(控制器标识符、控制器状态、指向通道表的指针、控制器队列的队首指针、控制器队列的队尾指针) -
通道控制表(CHCT):每个通道都会对应一张CHCT,根据CHCT的信息对通道进行操作和管理
(通道标识符、通道状态、与通道连接的控制器表首址、通道队列的队首指针、通道队列的队尾指针) -
系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目
-
表目(设备类型、设备标识符、DCT、驱动程序入口)
设备分配改进的步骤:
1、根据进程请求的逻辑设备名查找SDT(逻辑设备名其实就是“设备类型”)
2、查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项
3、根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程
4、根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程
只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可以启动IO设备进行数据传送
整个系统只有一张LUT:各用户所用的额逻辑设备名不重复,适用于单用户操作系统
每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统
缓冲区管理
缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区。
- 单缓冲:操作系统会在主存中为其分配一个缓冲区(一个缓冲区的大小就是一个块)
- 双缓冲:操作系统会在主存中为其分配两个缓冲区
实现同一时刻双向的数据传输
管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道 - 循环缓冲区:将许多个大小相等的缓冲区链接成一个循环队列
- 缓冲池:由系统中共用的缓冲区组成。
这些缓冲区可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列
用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)
1、输入进程请求输入数据
2、计算进程想要取得一块输入数据
3、计算进程想要将准备好的数据冲入缓冲区
4、输出进程请求输出数据
***
第十天的学习到这里就结束了,不知道小伙伴们收获如何呢?欢迎评论区交流学习,也恳请各位批评指正!!
操作系统其实就是计算机中的一个大管家,这个大管家有着很多很厉害的角色(就像谍战片里面的大府中的老管家一样),因此学习操作系统这门课,就像是在欣赏一部谍战片,要想理解角色内涵,你就必须站在其角度去思考,思考其可能会遇到的危险以及应对策略(bug与bug的修复),这样你才能在凶险的代码江湖生存下来,成为一代英雄,留下你的印记,期待与各位在江湖的相遇,也希望大家能给作品一个三连!!
本文参考教材:王道考研——操作系统(配套PDF文件,点赞留言后私信我发你)
教材配套讲解视频:b站链接