先回忆下冯诺依曼计算机的五大部件:运算器、控制器、存储器、输入、输出
纸带:
现在:鼠标、键盘、显示器
将来呢?脑电波???我觉得是一种很靠谱的东西,计算机能读取我的意念,随我的意念操作:
简单来讲:通过总线连接,当然实际情况要比这句话复杂,不过我们暂且不用深究,这是硬件厂商的事情!
主要点在于寄存器,分为三种:状态寄存器,用来标识设备的状态,命令寄存器,指示状态要执行哪些操作,数据寄存器,保存数据!
读写控制寄存器的两种方法:
思想很简单,看段代码就能明白:
while(STATUS==BUSY); //如果设备在忙就一直等待
write data to DATA register
write command to COMMAND register
while(STATUS==BUSY);
举个生活中的例子:去银行办业务,业务员在忙,我们每隔一秒问一下业务员忙完了吗,这就叫轮询,其缺点很明显,分散了业务员的注意力,即浪费了CPU的计算力,使得CPU一直被占用。
还是银行业务员的例子,你一直问她,她崩溃了,说你TM别问了,我忙完通知你!这就是中断
问题来了,业务员怎么通知你呢?可以搞个按钮、喇叭、显示器都可以!那计算机呢?8259中断控制器,CPU忙完后通过8259给你一个中断,完事!
中断一定优于轮询吗?
网络数据到达时:(我们上网时网络数据是源源不断的来的,很多很频繁)
中断驱动的I/O以字节(或字)为单位,每完成一单位的数据传输,发出一次中断,让CPU处理这种任务有点浪费。
那么就要引入新的机制,这里其实很容易想到,也是利用缓存的思想,不过这里引入了新的外设:DMA,百度百科给的介绍是:
DMA(Direct Memory Access)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来 执行传输的。
DMA方式需要借助DMA控制器,可以看做是一个特殊功能的CPU
OS 使用DMA 时:
DMA 处理任务,结束时发出中断,OS 在收到中断信号后:
DMA一定比中断好吗?
块设备,如磁盘,光盘
提供的接口有:read, write, seek, format等
字符设备,如键盘,打印机,串口等
提供的接口有:get, put
网络设备,如以太网,无线网,蓝牙等
提供的接口有:socket
如时钟与定时器,阻塞与非阻塞接口
这里最主要的思想是缓存思想,缓存思想在计算机发展的历史上是非常伟大的。
发明了BSD、TCP/IP、csh、vi和NFS的SUN首席科学家Bill Joy曾经不无调侃地说,在计算机体系结构领域中,缓存是唯一能称得上伟大的思想,其他的一切发明和技术不过是在不同场景下应用这一思想而已!
其基本思想很简单,当然也需要看使用场景。
比如:CPU速度快,IO设备速度慢,中间加一个告诉缓存来提高效率。
再比如:fread,read每次都调用磁盘驱动程序读数据,但fread加了缓冲区,每次调用read之前,先查看缓冲区内是否存在所需的数据,如果有,那么就没必要调用read了!
本章主要掌握内容:
这里的考点是SPOOLing技术,这个后面再补充,老师上课的时候没有讲到这一点!
本系列博客目录
本系列博客几乎接近完结,后面再补充下考点,当然不要太针对考试了,毕竟考试真的考不出什么技术来!
关键在于对OS的理解,有机会读内核源码加深技术理解!