前言:
《现代操作系统》第四章,文件系统,感觉学习之后主要是对于各个文件系统的了解,不太好写一篇记录学习心得的博客,因此跳过了这一章,直接记录第五章所学。6y6y
我的github:
我实现的代码全部贴在我的github中,欢迎大家去参观(这一部分内容就没有github的代码了,毕竟是实验室的内容)。
https://github.com/YinWenAtBIT
I/O设备:
简介:
一、设备分类:
1. IO设备大致可以分成两类:
块设备和字符设备,块设备传输以块为单位,磁盘,CD和USB盘都是常见的块设备。
2. 设备控制器:
IO设备一般有机械部件和电子部件两部分组成。电子部件一般称作设备控制器。
3. 内存映射IO:
每个控制器都有几个寄存器用来与CPU进行通信,通过写入这些寄存器,操作系统可以命令设备发送数据,接收输出,开启或者关闭。除了这些寄存器以外,许多设备还有一个操作系统可以读写的数据缓冲区。
CPU与设备的缓冲区进行通信有两种办法:
a. 通过给每个控制寄存器一个IO端口号,形成IO端口空间。
b. 通过将控制寄存器映射到内存空间内。
4. 直接存储器存取:
CPU可以从IO控制器每次请求一个字节的数据,但是这样做浪费CPU的时间,所以精彩用到一种称为直接存储器存取的方案(DMA),无论DMA控制器在物理上处于什么地方,它都能够独立于CPU而访问系统总线。
二、IO软件原理:
1. 设备独立性:
设计IO软件可以访问任意IO设备而无需事先指定设备。
2. 同步和异步传输:
大多数的物理IO是异步的。
3. 缓冲问题:
数据离开一个设备之后通常不能直接存放到其最终的目的地。
4. IO实现方式:
有三种不同方式:
a. CPU做全部工作,这种叫做程序控制IO
b. 中断驱动IO
c. 使用DMA的IO
二、IO软件层次:
1. 中断处理程序:
2. 设备驱动程序:
每个连接到计算机的IO设备都需要有某些设备特定的代码来对其进行控制。这样的代码称为设备驱动程序。
为了访问设备的硬件(意味着访问设备控制器的寄存器),设备驱动程序通常必须是操作系统内核的一部分。操作系统通常将驱动程序归类于少少数的类别之一,最为通用的是块设备和字符设备。
驱动程序必须是可重入的。
3. 与设备无关的IO软件:
a. 设备驱动程序的同一接口
b. 提供缓冲
c. 错误报告
d. 分配与释放专用设备
e. 与设备无关的块大小
4. 用户控件的IO软件:
尽管大部分IO软件都在操作系统内部,仍然有一小部分在用户空间
总结:
这一章中,主要学习的是IO软件设计部分的理念,在其后有对于硬盘,时钟,界面等介绍,就未仔细去阅读了。