L26 显示器
IO设备:键盘和显示器,磁盘(抽象出一个文件)
让外设工作起来,cpu发出指令给显卡中的一个寄存器(显存),显示器根据显卡中的信息来让显示器工作。所以让外设工作,只需要向对应的寄存器中发送指令,完成操作。外设去做对应的工作,外设服务程序执行结束后向cpu发送一个中断,cpu进行中断处理。
类似于out xxx, al这样的指令让外设工作,然后等外设完事后写中断处理程序。
向设备控制器等寄存器写的过程比较麻烦,为了让out做的统一,让用户使用起来方便,内部隐藏很多细节,形成统一的文件接口:文件视图。
总结:三件事,形成文件视图、发出out指令、形成中断处理
操作外设的程序:
打开外设文件(open),不论什么设备都是open、read、write、close。区别在文件名,不同的文件名对应不同的设备。根据设备文件找到控制器地址、内容格式等等。
printf内存写到显示器,fprintf内存写到磁盘
从write开始分支,1是显示器,
写设备驱动:写出核心out指令,将相应的函数注册在这些表上,创建dev什么文件和注册表对上,就行了。
编写文件驱动,是一个很重要的技能
L27 键盘
cup向外设发指令,原理简单,细节复杂,统一的文件视图,文件名,文件描述结构。
设备读写后的中断处理。键盘对应的是中断处理。
如何使用键盘?
用户:敲键盘、看结果
OS:“等待”用户敲键盘,敲了就中断(21号中断)
处理中断,根据扫描码得到ASCII码,ASCII码放入缓冲队列,等着进程去拿数据
L28 生磁盘的使用
原理一样:文件视图、out、中断,但是比前面显示器和键盘复杂很多。包装(抽象)层次复杂。
让磁盘工作起来,就是生磁盘
磁盘结构:盘面、磁道、扇区、磁头
磁盘数据访问的基本单位是大小为512字节的扇区
扇区的大小是传输时间和碎片浪费的折中
磁盘数据读写过程:移动磁头到相应的磁道上,旋转磁盘到相应的扇区上,和内存缓存配合进行读写。(控制器—>寻道—>旋转—>传输)
OS的核心就是向控制器中写柱面、磁头、扇区、缓存位置
out指令写这些数据,首先要知道这些数据,下面要把这一过程封装一下
通过盘块号读写磁盘(一层抽象)
磁盘驱动负责从block(一维地址)计算出cyl、head、sec(CHS)
OS内部实现一维地址到三维地址到编址,我们希望相邻的盘块可以快速读出。
L29 从生磁盘到文件
引出文件就是熟磁盘了,