操作系统-课堂笔记-IO(南航)

文章目录

  • IO
    • IO硬件
      • IO设备的发展历史
      • IO设备怎么和CPU、内存连接?
      • IO设备的典型构成
      • 使用IO设备的典型协议
        • 1.轮询
        • 2.中断
        • 两种方案对比
        • 3.DMA控制器
    • IO应用接口
      • 1.块设备
      • 2.字符设备
      • 3.网络设备
      • 4.其他设备
    • IO内核子系统
      • 为什么需要缓存?

IO

先回忆下冯诺依曼计算机的五大部件:运算器、控制器、存储器、输入、输出

  • 运算器我们没讲,是算数逻辑单元
  • 控制器就是CPU,进程是CPU的抽象,这是我们的重点内容
  • 存储器:分为内存和外存,内存的分配方案,分页也是重点,外存:磁盘调度算法
  • 输入和输出本节讲解

IO硬件

IO设备的发展历史

纸带:

现在:鼠标、键盘、显示器
操作系统-课堂笔记-IO(南航)_第1张图片操作系统-课堂笔记-IO(南航)_第2张图片操作系统-课堂笔记-IO(南航)_第3张图片
将来呢?脑电波???我觉得是一种很靠谱的东西,计算机能读取我的意念,随我的意念操作:
操作系统-课堂笔记-IO(南航)_第4张图片

IO设备怎么和CPU、内存连接?

操作系统-课堂笔记-IO(南航)_第5张图片
简单来讲:通过总线连接,当然实际情况要比这句话复杂,不过我们暂且不用深究,这是硬件厂商的事情!

IO设备的典型构成

操作系统-课堂笔记-IO(南航)_第6张图片
主要点在于寄存器,分为三种:状态寄存器,用来标识设备的状态,命令寄存器,指示状态要执行哪些操作,数据寄存器,保存数据!

读写控制寄存器的两种方法:

  • 还记得微机原理里学的in out指令吗?那是一种方法
    • 为了避免用户程序错误操作IO设备,将IO指令设置成了特权指令,只能由内核执行
    • 这样做的缺点是:只能用汇编来写程序
  • 第二种方法:内存映射IO
    • 先引出一个小小的问题,有这么一个现象,内存条没插好的时候显示器啥都不显示,这是为啥?我猜测,显示器的寄存器映射到内存中,内存条没插好,自然无法读写显示器的寄存器,所以显示器不显示,这个也是学习了操作系统后才产生的小猜测!
    • 基本思想是:将部分内存地址分配给IO设备,向这部分地址读写时做IO操作
    • 不需要特殊的指令,比如movl %eax, [78EA63]就可能是输出eax的内容到IO设备
    • 可以使用C语言来写程序,而不是汇编
    • 如何避免用户程序错误操作IO设备呢?一般的做法是,地址映射到内核区,这样用户就不能随意操作了!

使用IO设备的典型协议

1.轮询

思想很简单,看段代码就能明白:

while(STATUS==BUSY); //如果设备在忙就一直等待
write data to DATA register
write command to COMMAND register
while(STATUS==BUSY);

举个生活中的例子:去银行办业务,业务员在忙,我们每隔一秒问一下业务员忙完了吗,这就叫轮询,其缺点很明显,分散了业务员的注意力,即浪费了CPU的计算力,使得CPU一直被占用。

2.中断

还是银行业务员的例子,你一直问她,她崩溃了,说你TM别问了,我忙完通知你!这就是中断

问题来了,业务员怎么通知你呢?可以搞个按钮、喇叭、显示器都可以!那计算机呢?8259中断控制器,CPU忙完后通过8259给你一个中断,完事!

两种方案对比

中断一定优于轮询吗?

  • 如果I/O设备处理命令的速率较低,中断确实可节省大量时间;
  • 但如果I/O可以迅速完成呢?

网络数据到达时:(我们上网时网络数据是源源不断的来的,很多很频繁)

  • 如果每次产生一个中断???
  • 还不如采用轮询方式

3.DMA控制器

中断驱动的I/O以字节(或字)为单位,每完成一单位的数据传输,发出一次中断,让CPU处理这种任务有点浪费。

那么就要引入新的机制,这里其实很容易想到,也是利用缓存的思想,不过这里引入了新的外设:DMA,百度百科给的介绍是:

DMA(Direct Memory Access)控制器是一种在系统内部转移数据的独特外设,可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器。它之所以属于外设,是因为它是在处理器的编程控制下来 执行传输的。

操作系统-课堂笔记-IO(南航)_第7张图片
DMA方式需要借助DMA控制器,可以看做是一个特殊功能的CPU
OS 使用DMA 时:

  • set_up_DMA_controller( );
  • scheduler( );

DMA 处理任务,结束时发出中断,OS 在收到中断信号后:

  • unblock_user( );
  • return_from_interrupt( );

DMA一定比中断好吗?

  • 当CPU较忙时,确实可以节省CPU时间
  • 当CPU较闲时,DMA的效率低于CPU
  • 当然,大多数时候,还是值得的

IO应用接口

1.块设备

块设备,如磁盘,光盘
提供的接口有:read, write, seek, format等

2.字符设备

字符设备,如键盘,打印机,串口等
提供的接口有:get, put

3.网络设备

网络设备,如以太网,无线网,蓝牙等
提供的接口有:socket

4.其他设备

如时钟与定时器,阻塞与非阻塞接口

IO内核子系统

这里最主要的思想是缓存思想,缓存思想在计算机发展的历史上是非常伟大的。

发明了BSD、TCP/IP、csh、vi和NFS的SUN首席科学家Bill Joy曾经不无调侃地说,在计算机体系结构领域中,缓存是唯一能称得上伟大的思想,其他的一切发明和技术不过是在不同场景下应用这一思想而已!

为什么需要缓存?

其基本思想很简单,当然也需要看使用场景。
比如:CPU速度快,IO设备速度慢,中间加一个告诉缓存来提高效率。
再比如:fread,read每次都调用磁盘驱动程序读数据,但fread加了缓冲区,每次调用read之前,先查看缓冲区内是否存在所需的数据,如果有,那么就没必要调用read了!

本章主要掌握内容:

  • IO管理的两种方式:特殊指令和内存映射
  • 三种IO协议:轮询、中断、DMA

这里的考点是SPOOLing技术,这个后面再补充,老师上课的时候没有讲到这一点!

本系列博客目录

本系列博客几乎接近完结,后面再补充下考点,当然不要太针对考试了,毕竟考试真的考不出什么技术来!

关键在于对OS的理解,有机会读内核源码加深技术理解!

你可能感兴趣的:(Linux,南航-操作系统-课堂笔记)