操作系统文件视图之设备驱动简述

OS文件视图之设备驱动

一、IO与显示器

终端设备输出:显示器;终端设备的输入:键盘

外设工作:CPU通过CPU-内存总线,然后经过总线控制器,发出命令,再经PCI总线,最后到外设自己的控制器(即网卡,显卡等)接受指令,写入自己的缓存进行处理计算,待外设控制器处理完毕后,向CPU发出中断,表示自己处理完毕,CPU再读数据到内存。对于操作系统来说就是,CPU向控制器中的寄存器读写数据;控制器完成真正的工作,并向CPU发中断信号,还有中断处理程序。

外设驱动(三件事):CPU发送给外设控制器的必要指令(核心);外设控制器处理完后,需要发CPU中断信号,中断处理程序;文件视图,使得写寄存器更简单(第三步最麻烦)

向设备控制器的寄存器写命令:需要查寄存器地址、内容格式和语义,OS需要给用户提供一个简单视图--文件视图

OS为用户提供统一的接口;根据设备文件找到控制器的地址、内容格式等

比如printf的过程:

二、键盘

终端设备的输入:键盘

按键就会中断,键盘输入的流程

  1. 中断初始化开始,21号中断在OS初始化时设置为键盘中断

  2. 处理扫描码key_table,do_self

  3. 从key_map取出ASCII码,缓冲队列

  4. 对字符进行处理,可显示字符回显处理

三、 生磁盘的使用

磁盘作为外设的一部分,工作流程与其他外设基本一致,只是控制器有专门的磁盘控制器

  • CPU向磁盘控制器中的寄存器读写数据

  • 磁盘控制器完成真正的工作,并向CPU发中断信号

磁盘常识:

  • 磁盘访问单位:扇区

  • 扇区大小:512字节

  • 扇区的大小:传输时间和碎片浪费的折衷

磁盘的IO过程:控制器-》寻道-》旋转-》传输;只需往控制器中写柱面、磁头、扇区、缓存位置,控制器就可以执行,找到指定文件;上层用户发盘块号,相邻盘块可以快速读出;

磁盘访问时间 = 写入控制器时间 + 寻道时间(最核心) + 旋转时间 + 传输时间

OS用空间换时间,每次多读入一些扇区,使得读写速度增加

多进程访问磁盘请求时,需要调度算法,使得寻道时间越少越好

调度算法:

  • FCFS:最直观、最公平;谁先来谁先用

  • SSTF:短寻道优先,磁道最少,缺点:饥饿问题

  • SCAN(实际采用):SSTF+中途不回折:每个请求都有处理机会,电梯算法,直接移动到另一端:两端请求都能很快处理

生磁盘的使用整理:

  1. 进程”得到盘块号“(文件系统的内容:通过文件得到盘块号),算出扇区号

  2. 用扇区号make_req(实际中还有个缓冲内存,会提高使用速度),用电梯算法add_request

  3. 进程sleep_on

  4. 磁盘中断处理

  5. do_hd_request算出cyl,head,sector

  6. hd_out调用outp(...)完成端口写

 

posted @ 2020-08-10 10:55  小玉揍扁了阿福  阅读(262)  评论(0)    收藏  举报