操作系统-----I/O设备

I/O设备即输入输出设备,用于往计算机中输入数据或接收计算机输出的数据。f8233e2f06a54d1f9ebd98403bb8cd03.png

88a9dfb03ade42569f109ebcdf43046e.png

cd68cad4efc5459197cdf46f9d132afc.png

ba9cfb03d8504cba83c1f6a64f88dc3d.png

I/O设备由机械部件和电子部件两部分构成,机械部件就是I/O设备本身如鼠标,键盘等。电子部件是cpu与I/O设备通信的桥梁,因为cpu无法直接操作I/O设备只能把想要做的事告诉电子部件,由它帮cpu实现。这个电子部件就是I/O控制器,负责接收cpu的指令控制I/O设备。3a2e50b42d9a4fe088b26332d0c89a13.png

I/O控制器由三部分组成,cpu与控制器的接口,I/O逻辑,控制器与设备的接口。cpu通过控制线告诉I/O控制器要执行的指令,通过地址线告诉I/O控制器要操作的设备,通过数据总线告诉I/O控制器要传输的数据。数据寄存器存放传输的数据,控制寄存器存放指令携带的参数,状态寄存器存放设备的状态。c690cc25eb374695a3e0972851e4da24.png

 998ada6183d8472a8a5feac4751fa032.png

140259d4a9814a30854277468994adc7.png

I/O控制的方式(即:用什么样的方式来控制I/O设备的数据读/写)共有四种为程序直接控制方式,中断驱动方式,DMA方式,通道控制方式。这些I/O控制方式都是基于上面说的原理来实现的。

程序直接控制方式626f57c8024640b4b011ca3d12790292.png

a568bcaf4a5745aaa2e344973446452d.png

中断驱动方式:30b465eaef0c43b38a1fc3a1c72bdae9.png

d178bd74c6074d1eafc5b44b5a796155.png

DMA方式:DMA控制器也是I/O控制器的一种,与传统的I/O控制器不同的是,DMA控制器可以直接把数据写入内存不需要经过cpu,同时也能直接从内存中读取数据。这样当进行读写操作时,cpu只需要告诉DMA控制器去内存的那个地方读或者写入到内存的那个位置即可,不在需要把数据储存在cpu的寄存器中,提高了cpu的利用率。通过系统总线的方式把内存,cpu,I/O控制器三者相连。adf22373cd6d4a9290f5dedc95a026a0.png

 b859638d085642a893ea58746e81225b.png

在DMA的方式中一次I/O操作传输的数据是以块为单位的,但是读取时还是一个字节一个字节读取的,只是cpu只发起了一次I/O操作,并且块的大小是可以改变的,如果是字符设备那么块的大小就会设置为字符大小。

6804dd5f825c47b6be1f11cd49f9eca9.png

通道控制方式

5b446442894347a09d706e20f0bd2555.pngc38d31f239da4bc8be2c46e12ffdbee8.png 使用通道的方式cpu就可以一次性把想要实现的操作都告诉i/o控制器这样就不需要执行完一条指令后在输出另一条指令了节约了cpu的时间。cbc01b8978354d22a63dca6511bd2a6a.png

 I/O的软件层次从上至下可以分为:用户层软件,设备独立性软件,设备驱动程序,中断处理程序。其中设备独立性软件,设备驱动程序,中断处理程序这三个属于系统内核程序。768c33c440954f00bc49707b0440c6f8.png

用户层软件:用户层软件实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。其实就是各个语言提供的库函数,库函数里面调用了操作系统提供的接口。a8c72e9e82594ff49a36ad8840684b17.png

设备独立性软件:设备独立性软件,又称设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现,它会调用下层的设备驱动程序完成与设备的通信。主要实现的功能:①向上层提供统一的调用接口(如read/write系统调用)②设备的保护。③差错处理。④设备的分配与回股。⑤数据缓冲区管理。⑥建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。8c6e181976794a1aa3dd65fece1cf6ad.png

1bff54dfc66b424d9f503b13ac5fbc00.png

设备驱动程序:用于实现与I/O设备交流的程序(原理还是上面说的一样),一般由设备生产的厂家提供。因为不同的设备由不同的构造,寄存器的个数和功能也是不一样的。而设备内部的构造只有厂家才知道,所以需要由厂家提供。驱动程序需要实现在不同i/o控制方式的情况下都能使用所以需要做适配,如在通道控制的方式下就需要使用通道指令。3eaad867bc8d4d7a9798452aebe34d7b.png

中断处理程序a7dea5a15734454ba05a2abfebd1cd5d.png

 9d68ee817c5b4d20b907817075f3fb0d.png

输入/输出应用程序接口:操作系统对外提供的用于操作硬件的接口,由于硬件的结构和类型不同所以无法做到统一接口。对外提供的接口可以分为三种,字符设备接口(用于操作一次I/O操作中以字符为单位传输数据的设备,如鼠标,键盘),块设备接口(用于操作一次I/O操作中以块为单位传输数据的设备,如u盘,硬盘),网络设备接口(用于操作网卡完成主机间的数据通信)。9c654a33380145b1a6fbe2c0ea47fb8d.png

使用socket接口(这不是一个接口这是一类接口)的过程:进程通过系统调用的方式调用了socket接口之后会创建一个套接字(即在内核空间中申请一片存储空间用于存储通信过程中交流的数据)并把返回一个标识符给进程(即存储空间的地址),之后调用bind接口为该套接字绑定一个端口号,然后就等待被其它主机所连接。另外一台主机也使用上面的方式创建套接字,之后调用connect接口并指明目标的ip地址和端口号与之建立连接。建立连接之后如果主机想要发送数据只需要把想要发送的数据从进程的空间中复制到内核空间中(即放入创建的那个套字节当中),之后操作系统会调用网卡的驱动程序把数据写入网卡中由网卡这一设备把数据发送出去。对方的网卡接收到数据后会产生一个中断信号,之后cpu就会去执行相应的中断处理程序,中断处理程序会调用网卡驱动程序把网卡中的数据写入到对应端口号的套字节当中,之后进程只需要根据创建套字节时返回的标识符并通过read接口即可读取到相应的数据。a84189ea0d2042769329834f96942c60.png

d5729312159845b6a1d691d1b72e9554.pngI/O操作分为两种阻塞I/O和非阻塞I/O。

设备驱动程序接口:操作系统通过调用该接口完成于硬件的通信,但是由于不同硬件的厂家定义的接口可能不一样,所以操作系统会统一这些接口的格式,如果这些设备想要在操作系统上运行必须按照操作系统的要求去定义接口。不同的操作系统有不同的要求。7b53982f70b549acb25e1adaf492f51b.png

I/O核心子系统2aac805080314c1ab7c8300d604ad0c9.png 7633275d91c84a49b2c85d76663f08b8.png

8ed34e61318d42698784d42cb5a79a1c.png 脱机技术:6c05fb518f9b45258bc3844f29f60cfc.png

 假脱机技术:根据脱机技术的原理使用软件进行模拟。a3d41ecf0ca04055959023c2ead92283.png

输入井:模拟脱机输入时的磁带,用于收容I/O设备输入的数据。

输出井:模拟脱机输出时的磁带,用于收容用户进程输出的数据。

输入进程:模拟脱机输入时的外围控制机。

输出进程:模拟脱机输出时的外围控制机。

当输入设备往计算机中输入数据时,会先被输入进程处理把该数据放入输入缓冲区中,之后在放入输入井中。5b186be8d8d5485795819250ff87597c.png

34b3326b0e654771971a662f8014b08d.png

采用spooling技术的优点在于可以在逻辑上把一个互斥访问的资源改造成可以同时访问的资源。如过进程申请的资源正在被其它进程所使用,如果不采用spooling技术那么操作系统会直接拒绝此次请求,那么进程只能进入阻塞态等待分配该资源。如果采用了spooling技术那么操作系统会答应此次请求但并不会马上处理因为此时资源正在被其它进程所使用(相当于让进程去排队),但进程却不会陷入阻塞态可以继续往下执行。

设备的分配与回收:把设备分配给进程时需要从三个方面进行考虑设备的固有属性,设备分配算法,设备分配中的安全性。设备分配算法跟cpu的调度算法类似有先来先服务,短任务优先,时间片轮转等6a7d3b28dcca4ac7b48ac130f74013d2.png

从设备分配的安全性考虑3a5091dea21c4d59a14214412bd34c54.png

 静态分配和动态分配c5174bc066b248e6b276d0d3179d6d4a.png

设备,控制器,通道之间的关系: 1979fcc559ed41d799764f0ba842e881.png

设备分配管理中的数据结构:a112ee6039614b6cba753759831060bc.png ec210f8d7b8d4f348bee6d57e21f1949.png

ebb951eaa1c64356b18db82744347ddb.png

8eb17d8fe8e747058cc39a67cebfa2b7.png

设备分配步骤:95e7b710189e4acd93259283ac38b09e.png

 4bfd9956bf364b98ad3d490c86a336c0.png

446a17a7ef274052b4816ea7994b99af.png 9feedd1e1de64ffa8d411309e369f95d.png bde5a53b14b240928f245654fbc8410e.png

2e0ad29485b449f1a0e4ef03347ad6f2.png

1b92d38438b24849ab99dfc208e02b61.png

缓冲区:c9e74abb80dd4085b832209941e6e1b0.png

5149f4e52ab74bbbbfab43a1fd07465b.png

单缓冲:

2219a602dade4b819426467768fdc770.png

65e13f0abecd44309bb12003e2e05583.png

 双缓冲:754b1c15bc024b9bb3b930d2da95acda.png

fa613bc0d2124ccaa6456ce00efba22b.png

单缓冲和双缓冲在主机间通信时的区别:89a8a645d6274fb5af5989cecfa6d942.png

692a3e30be4645a0a5ac5790a25d28d9.png

 循环缓冲区:335a730651844b3f889b613a42555e69.png

缓冲池:9a64b78b5da949d49423e082577c62b4.png

0cfc1c9ce3c240f38a35ea136c88b327.png bcca9e9dc3df4eaeb6984d4a780f2340.png

9260ff0573584f5fb7e84694dd986c49.png

磁盘,磁道,扇区概念6d48e2cc5e2a4165a40bbc3c6ff8bee9.png

扇区中每一个磁道所能存储的数据量是一样的。

c056f75bf2bb49cdbed68d32ebd6f085.png 03679073dea843eda574b8dfa232402b.png

ac9ddedc1bab49de919673c4da98f254.png

一次磁盘读写所需要的时间:d30d85ddfe384866af2973a3f07385cc.png

fe3e039f23da4fd299548e3d2d273bc5.png da3bb02cbf1c4e6b954f2138ea5ba65d.png 

磁盘调度算法: 先来先服务(FCFS),最短寻找时间优先(SSTF),扫描算法(SCAN),循环扫描算法(C-SCAN),LOOK调度算法,C-LOOK调度算法。

先来先服务(FCFS)

053d150f71e541ecb70eed789f413ea8.png

最短寻找时间优先(SSTF)f775c6c9a48e4114b74daeed9c2a1206.png

扫描算法(SCAN)

74f8932d09dc489ea5d0105d48e3e4c0.png

LOOK调度算法

ee2101bed8624713a85804f7ea0ac182.png

循环扫描算法(C-SCAN)

098babc494154329a5988f3cfcb1431a.png C-LOOK调度算法cfc52840a9d14f76b5c69e8c4c3fd7df.png

减少磁盘延迟时间的方法:有错位命名法(两个盘面同一位置的扇区编号不同)和交替编号法(同一个盘面扇区的编号不连续)6a44145128d449319cb7198213e6b646.png

即读取完一个扇区的磁道后,需要有一个扇区的处理时间之后才能继续读取。

1282469d4d534292afcd89ad36ac496b.png

磁盘地址结构的设计:c2bd112b2ea24407955462ecdabd4fa9.png b8a16faf2a264133ba4563d71130afd1.png

 c26b98a85ccc411bb095c5cc9700d4f7.png

5733a91ff9e242fea5beb592fce080f1.png40bb7fe9235a40639e4c2dfd26e7bdf1.png

 磁盘初始化:8c0c8cf6d55c4e66a3390467154a9d63.png

磁盘在制造出来时就被划分好了磁道,但此时还不能出厂还需要经历物理格式化的步骤才行。

引导块:eab744f8845d42fa9f7f992e395064b6.png ec2c4b4508d940daa4ac8e28af405731.png 坏块的管理:18e13c22086c4de7a5f1a740ade6c024.png

 固态硬盘(SSD):063e11224abc45ee9d45f2ad3586a663.png

ed5f2d487f9046c1afd0fcfb666ef1be.png固态硬盘的读写是以页为单位的,而机械硬盘的读写是以块为单位的,所以机械硬盘中的块等于固态硬盘中的页,机械硬盘中的磁道等于固态硬盘中的块。闪存翻译层相当于操作系统中的地址转换功能,负责把操作系统要读写的逻辑地址转化为物理地址(从这里可以看出操作系统映射的地址也依旧是逻辑地址)。

固态硬盘读写数据是以页为单位的,擦除数据是以块为单位的,所以如果想写入的页已经有了数据但还想继续写入的化只能把整个块的数据都擦除后写入。所以说每个一个页可以写入一次读取无数次,还想写入只能擦除。虽说可以把块进行擦除但是这样做的化其它页的数据也没有了,所以不会直接把块进行擦除而是把原有的所以页迁移到另一个擦除过的块中,并写入新的页最后在把之前的块进行擦除就完成了数据的写入。但这样做的话原有页的映射关系需要进行修改因为位置变了。

固态硬盘支持随机访问数据,不需要向机械硬盘一样移动磁臂所以读写数据的速度比机械硬盘快的多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值