系统IO

来源:互联网 发布:淘宝网货到付款十字绣 编辑:程序博客网 时间:2024/05/16 19:48

IO系统的作用:发送命令,捕捉中断,并处理设备的各种错误。在设备和系统的其他部分之间提供简单且易于使用的接口。

IO设备分类
块设备:以block为单位
字符设备:以char为单位
其他设备:包括时钟与显示器

设备管理器:也称适配器、控制卡。是IO设备的电子部件。
  IO访问的是IO设备的控制器
  IO设备组成部分:设备控制器和设备主体
  如硬盘和硬盘控制器
  目的:
  解释CPU的控制指令:
  cpu通过写设备控制器中的寄存器来向IO设备发命令或写数据;设备控制器解释命令,冰箱设备发出控制信号或数据。
  接受检测来自设备的数据或状态:
  CPU通过读设备控制器中的寄存器来取得数据或状态。
  整合、校验来自设备的数据,并输出到内存。
  例子
  磁盘可以按每个磁道10000个扇区,每个扇区512字节进行格式化。然而,从磁盘驱动中出来的确是一个串行的比特流,它以一个前导符开始,接着是一个扇区中的4096为,最后是一个校验和。控制器的任务是把串行的比特流转换为字节块,并进行校正。字节块先在控制器内部的一个缓冲区按位进行组装,然后在校对后无误复制到主存中。
  设备控制器的组成:控制单元、寄存器组、数据缓存区buffer。
  
内存映射IO
  老的方式是CPU要与控制寄存器和数据缓冲区通信,读取IO数据,不经过内存,要通过IO端口拿。IO端口普通的用户程序不能对其访问。要操作系统使用特殊的IO指令IN、OUT来访问。
  它有几个缺点:
  IO端口(可以看做寄存器)的访问需要 IO指令,是特权指令。读写IO的代码有特权,无法完成微内核的构建

  可以采取内存映射IO方法:
  每个控制寄存器被分配唯一的一个内存地址,但是注意不能放入用户程序的进程地址空间中。
  优点:驱动程序可以直接读写控制寄存器、数据缓存区,而不需要使用IO指令。==> 可以用 C 编写控制 I/O 的程序 ==> 驱动程序可以放到核外。
  缺点:内存的高速缓存(cache)对被映射到内存地址段的控制寄存器会有副作用。
  内存的内容只受CPU读写的影响,而设备端口的值是与I/O设备联动的。
—— 对设备端口发命令(不应延迟)
—— 从设备端口取状态(不可使用缓存值)
  因为高速缓存的读写是有延迟的。所以硬件必须针对每个页面具有选择性禁用高速缓存的能力。
  识别地址是内存的,还是I/O设备的 —— 硬件增添了额外的复杂性
====> 使用双总线内存体系结构
  

IO控制技术

程序控制IO

  I/O 操作由程序发起,并等待操作完成,数据的每次读写都通过程序控制。
  缺点:在外设进行数据处理时,CPU只能等待。
  过程:1.CPU写设备控制器的寄存器
  2 设备控制器向设备发信号
  3 设备控制器从设备读取数据
  4 设备控制器检验、整合数据
  5 设备控制器设置状态寄存器
  6 cpu 读设备控制器的寄存器(采用忙等待)
  例子
  打印字符串

中断驱动方式

  中断控制的IO:CPU可以在controller处理时并行处理其他进程,在IO完成后发出中断,拉回CPU进行后续处理 ,采用的是非忙等待
  I/O 操作由程序发起,在操作完成时(如数据可读或已经写入)由外设向CPU发出中断信号,通知I/O程序,数据的每次读写通过CPU。
  过程:
  1 cpu 写设备控制器的寄存器
  2 设备控制器向设备发信号
  3 设备控制器从设备读取数据
  4 设备控制器检验、整合数据
  5 设备控制器发中断信号
  6 cpu 读设备控制器的寄存器(采用非忙等待)
  优点:在外设进行数据处理时,CPU不必等待,可以继续执行该程序或其他程序。
  缺点:CPU每次处理的数据量少(通常不超过几个字节),只适于数据传输率较低的设备
  

直接存储器存取

  减轻cpu在I/O过程中的负担,从而使cpu从I/O的数据传送中解脱出来。
  由DMA控制器来控制数据从设备到内存的传送
  过程:
  1.由驱动程序设置DMA控制器中的若干寄存器值(如内存始址、传送字节数),然后发起I/O操作。CPU对于DMA控制器进行编程。 CPU 将数据块的磁盘地址、数据块将存放在内存的地址和要传输的字节数告诉 DMA控制器
  2.DMA发送请求到设备控制器, 完成内存与外设的成批数据交换
  3.设备控制器从设备中将一个数据块读入内部缓冲区。校验该块数据,以保证读取正确。
  4.设备控制器将数据块拷贝至内存地址处(逐字节或逐块)
  5.在操作完成时,设备控制器向DMA控制器发送完成应答
  6.DMA向CPU发出中断信号。

颗粒越来越大 ,细节到DMA中去了,DMA需编程 。
内存与块设备之间的传输,可以完成大量的数据传输。

DMA的升级版:通道
通道控制方式:通道控制方式

IO软件原理

是OS的一部分
目的:
  1.提供统一的用户界面:设备的逻辑名,设备的操作变为了逻辑操作,统一设备、文件的接口,各种系统管理的手段
  2.保证设备的正确性和安全性
  3.保证设备的使用的效率
  4.提高较高的性价比

IO软件的组织层次图:
第4层:用户层软件:用户态:lib库里IO相关的包装,调用IO,IO的格式,数据的缓存spooling(打印机的管理)
第3层:与设备无关的操作系统IO软件:内核里,指的是文件系统,是OS的一部分,怎么命名设备,保护设备,块大小不一样,vfs,缓存,设备分配
第2层:设备驱动程序:一般是设备提供商编写,和设备管理器的寄存器、状态量
第1层:中断处理程序:和驱动是分开的,底层工作,唤醒中断程序
第0层:硬件层

中断处理程序:
中断期间要做的事情有什么:
被中断进程的断点保护:PCB块 内核栈 用户栈 内部寄存器

保护保护末被硬件保护的所有寄存器(包括处理机状态字 PSW)(将寄存器复制到 PCB 表中)
为中断处理程序设置上下文(如 TLB、MMU 或页表)
为中断处理程序设置栈指针
应答中断控制器(或开中)
识别中断源,分析产生中断的原因
运行中断处理程序,处理发生的中断事件(如读写设备寄存器)
执行调度程序,选择当前进程
为下一个进程设置上下文(如 TLB、MMU 或页表)
装入下一个进程的寄存器(包括处理机状态字 PSW)
开始运行下一个进程

响应中断的试剂:精确中断 非精确中断
中断处理机制与用户编程 : 用户没有办法感受中断

设备驱动层

设备驱动程序层:设备无关层和设备之间 设IO端口,读状态,控制器发出中断,与中断处理程序联系
1.每一类设备有一个设备驱动程序,并对应一个主设备号。
2.设备驱动器接收来自上层的请求,实现 I/O 的具体工作。
3.设备驱动程序的代码都是设备相关的,只有设备驱动程序才清楚该类设备的设备控制器的结构细节和操作细节
4.设备控制器只接收来自设备驱动程序的命令和数据。

与控制器打交道,访问对应端口。

设备驱动程序的设计要点:
设备驱动程序在发布里I/O指令后,将等待I/O完成(阻塞)(中断处理时将其唤醒)
——设备驱动程序必须是可重入的。(reentrant)
在一个支持设备热插拔的系统中,设备驱动程序正在执行时被告知设备已被拔出,这时设备驱动程序必须做好善后处理
设备驱动程序不能使用系统调用(用户库函数),它可以直接使用相关内核函数,以获得相应的服务。

设备无关的I/O软件

  目的:包装执行适用于所有设备的常用I/O功能,并向用户层软件提供一个统一的接口
  向上提供一个统一的接口,缓存数据,错误报告,专用设备的分配与释放,定义一个与设备无关的块大小
  块设备会有缓存

用户层的IO软件:

lib库或通用层底下:
SPOOLing管理,打印机的队列管理

库函数:包装IO的系统调用、作为用户接口。
printf含系统调用,是格式化了的
字符串的处理,不需要系统调用,不需要陷入内核。
getPID:IO无关的系统调用
工具与系统调用不能混合。strace,mmap,pmap
**要记住与库函数名字一样的系统调用
时间管理的系统调用:pause,sleep
第4层 IO相关的库函数
解析一个库函数:库函数是如何实现的。
fread带缓存的读

fd是系统某个进程打开文件的下标

FILE数据结构是一个管理结构,包含fd,数据缓存区,在用户地址空间里,系统数据区里文件缓存区,getc从数据缓存区里拿,没有数据缓存区,每次都要深入系统的文件缓存区中去拿取,这样处理可以减少系统调用,颗粒性增加。还有count,FILE中缓存区还有的数据有多少。
fopen ,open f带有数据缓存区 ,要管理数据缓存区。
流设备:一个个字节访问 fopen打开。

spooling系统:
device打印机是排他的非共享设备。
加了一层的SPOOLing系统,增加了一个队列。将实际的IO编程虚拟的IO。增加用户体验,直接接受打印文件。很快。
输入输出。

硬件层:计算硬件的磁道 : 设备驱动层
维护一个块的缓存:缓存:文件系统是设备无关层
向设备寄存器写命令:IO端口 out命令 设备驱动层,控制器的端口 2
检查用户权限:protection:设备无关层
将二进制转换成ASCII码:用户进程层

*****4层结构图

0 0
原创粉丝点击