操作系统(15)-----I/O设备管理(万字总结~)(2)

简介: 操作系统(15)-----I/O设备管理(万字总结~)(2)

操作系统(15)-----I/O设备管理(万字总结~)(1):https://developer.aliyun.com/article/1511380

2.CPU干预的频率:


仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。


3.数据传送的单位:

每次读/写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)


4.数据的流向:(不再需要经过CPU)


读操作(数据输入):I/O设备--->内存


写操作(数据输出):内存--->I/O设备

主要缺点和主要优点

优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。


缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。


如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成。

)通道控制方式

通道:一种硬件。通道可以识别并执行一系列通道指令

•完成一次读/写操作的流程:

CPU向通道发出I/O指令。指明通道程序在内存中的位置,并指明要操作的是哪个I/O设备。之后CPU就切换到其他进程执行了。(通道程序就是任务清单,即通道指令的集合)


② 通道执行内存中的通道程序(其中指明了要读入/写出多少数据,读/写的数据应放在内存的什么位置等信息)。


③ 通道执行完规定的任务后,向CPU发出中断信号,之后CPU对中断进行处理。

注:与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存。


2.CPU干预的频率:

极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求CPU干预。


3.数据传送单位:


每次读/写一组数据块


4.数据的流向(在通道的控制下进行):


读操作(数据输入):I/O设备--->内存

写操作(数据输出):内存--->I/O设备

主要缺点和主要优点:

缺点:实现复杂,需要专门的通道硬件支持

优点:CPU、通道、I/0设备可并行工作,资源利用率很高

总结:

五.I/O软件的层次结构

最下层的硬件由电子部件和机械部件组成,上面已经讲过,现在将I/O软件的层次结构:


如下图所示,越上面的层次越接近用户,越下面的层次越接近硬件,各层次的软件都会使用下面一层软件提供的功能,而下面一层软件又会为上一层软件提供服务。这样,每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)。

用户层软件:

是非内核软件,实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务。


对于Windows操作系统,其会向外提供的一系列系统调用,但是由于系统调用的格式严格,使用麻烦,因此在用户层上封装了一系列更方便的库函数接口供用户使用(Windows API)


•设备独立性软件:

设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。


① 向上面所说,其需要向上层提供统一的调用接口(如 read/write 系统调用)


② 实现设备保护。原理类似与文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。


③ 差错处理,设备独立性软件需要对一些设备的错误进行处理。


④ 设备的分配与回收,某些设备属于临界资源,不能同时分配给多个资源使用,所以操作系统会对系统进行分配与回收管理。


⑤ 数据缓冲区管理,可以通过缓冲技术屏蔽设备之间数据交换单位大小和传输速度的差异。


⑥ 建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。


用户或用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次要操作的I/O设备的逻辑设备名(例如:去学校打印店打印时,需要选择打印机1/打印机2/打印机3,其实这些都是逻辑设备名)


设备独立性软件需要通过“逻辑设备表(LUT,Logical UnitTable)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序

操作系统系统可以采用两种方式管理逻辑设备表(LUT):

第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适用于单用户操作系统。

第二种方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,相同的逻辑设备名能映射到不同的物理设备中,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。


•设备驱动程序:


因为不同设备的内部硬件特性也不同,这些特性只有厂家才知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作。


所以设备驱动程序主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化成特定设备“能听得懂”的一系列操作。包括设置设备寄存器,检查设备状态等。


•中断处理程序:


当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。

中断处理程序的处理流程如下:

中断处理程序会从I/O控制器中读出设备状态,判断I/O是否正常结束,若正常结束,中断处理程序会从控制器的数据寄存器中读入一个字的数据并经由CPU放到内存缓冲区中,若此时非正常结束,系统会根据异常原因做相应处理。

中断处理后,就轮到设备驱动程序对数据进行进一步的处理,下一步就交由设备独立性软件进行处理。一直网上,最终返回给用户。

可见,中断处理程序也会和硬件直接打交道。

注:直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的。

六.输入/输出管理

1.输入/输出应用程序接口

上层的用户层软件需要通过系统调用,使用最下层的I/O设备,由于I/O设备种类,特性多样,用户层的应用程序无法用一个统一的系统调用接口来完成所有类型设备的I/O。调用的系统接口各不相同,如下:

1)字符设备接口:

get/put 系统调用:向字符设备读/写一个字符,数据的读写以字符为单位。


(2)块设备接口:

read/write 系统调用:向块设备的读写指针位置读/写多个字符;


seek系统调用:修改读写指针位置。


注:字符型设备没有地址这样的概念,所以get/put不需要提供地址这样的数据。而块设备有地址这一概念,所以块设备需要提供地址参数。


(3)网络设备接口:

网络设备接口,又称“网络套接字(socket)接口

socket 系统调用:创建一个网络套接字,需指明网络协议(TCP?UDP?)

bind:将套接字绑定到某个本地“端口

connect:将套接字连接到远程地址


read/write:从套接字读/写数据


主机2的P3进程要进行网络通信,会通过socket系统调用创建网络套接字,即申请一片内核空间,这片空间用于接收或发送数据,socket系统调用会给进程返回一个描述符,接着套接字会通过bind绑定本地的某个端口,例如下图绑定了6666端口,主机2这一端口就能等待被连接。

主机1的P1进程同理,主机1通过connect系统调用,将fd描述符指向的socket套接字,连接到主机2 对应IP地址的6666端口,即connect(fd,168.98.xxx.xxx,6666)

注:这是在应用层的连接,连接完毕后,两主机就可以通过socket进行连接了:


P1首先在用户区准备要发送的数据,接着通过write系统调用,指明需要向fd指向的套接字中写入数据,即(fd,xxx),接着设备独立软件就会将用户进程准备好的这块数据,复制到内核区的套接字对应的缓冲区中,接着设备独立软件又会调用网络控制器的“网络驱动程序”

网络驱动程序会将数据输出到网络设备中,网络控制器就可以将数据包发送到网络中了。

主机2的网络控制器接收到数据后,会向主机发送中断信号,“中断处理程序”调用“网络控制器驱动程序” ,这一驱动程序能将网络控制器的数据复制到内核区的6666端口对应的缓冲区中,P3进程想要接收这一数据,就可以使用read系统调用,指明我需要从fd所指的socket套接字中读出一个数据,即read(fd)


设备独立软件会从socket对应的缓冲区中,将数据复制到用户区中,用户进程P3就能使用这一数据了。

用户可以使用网络设备接口来创建套接字对象,每个套接字会绑定本地的端口,通过主机的IP地址与端口号,就可以找到套接字对象,两个主机的套接字可以进行点对点的连接建立。

当主机1的网卡(网络控制器)接收到很多数据包后,根据数据包中的socket端口信息才能将数据放到对应的socket对象中。

(4)阻塞I/O和非阻塞I/O

阻塞I/O:应用程序发出I/O系统调用进程需转为阻塞态等待。例如:字符设备接口---从键盘读一个字符get,程序员编写scanf等待键盘输入时,只要键盘不输入,进程不能往下执行。

非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。例如:块设备接口---往磁盘写数据write,用户把进程数据写到磁盘时,尽管磁盘现在忙碌,用户独立软件也会迅速响应,先把这一数据复制到内核socket对应的缓冲区中。内核再将数据写到磁盘即可。用户进程只需要完成复制,就可以继续往下执行了。

操作系统(15)-----I/O设备管理(万字总结~)(3):https://developer.aliyun.com/article/1511394

目录
相关文章
|
7月前
|
存储 程序员
操作系统(15)-----I/O设备管理(万字总结~)(4)
操作系统(15)-----I/O设备管理(万字总结~)
99 2
|
7月前
|
存储 Unix 人机交互
操作系统(15)-----I/O设备管理(万字总结~)(1)
操作系统(15)-----I/O设备管理(万字总结~)
107 2
|
7月前
|
存储 缓存 算法
操作系统(15)-----I/O设备管理(万字总结~)(3)
操作系统(15)-----I/O设备管理(万字总结~)(3)
134 0
【操作系统】—I/O设备的基本概念和分类
【操作系统】—I/O设备的基本概念和分类
|
程序员 虚拟化
操作系统如何进行设备管理
操作系统如何进行设备管理
328 1
操作系统如何进行设备管理
|
存储 网络协议 Linux
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
111 0
操作系统--I/O管理知识整理(供自己复习所用
I/O一直比较薄弱,都分不清在干啥,又听了一遍课,默写一下脑子里留下的东西,原来不是分不清,是听完课,脑子里就留下来30%…… I/O子系统层次结构
120 0
|
消息中间件 存储 分布式计算
大数据开发基础的操作系统的I/O原理
操作系统的I/O原理是大数据开发中必须掌握的一项基础知识。本篇文章将为大家介绍I/O原理的基本概念、工作原理以及应用场景。
103 0
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
59 0
Vanilla OS:下一代安全 Linux 发行版
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
64 4