王道操作系统笔记第五章-I/O管理(非常完整!包学包会!融入笔者自己的思考!)

5.1.1、IO设备的概念和分类

image-20250104014008134image-20250104014047416

image-20250104014118083

image-20250104014204187

image-20250104014232860

image-20250104014309836

image-20250104014407563

5.1.2、IO控制器

image-20250104014500552

image-20250104014536748

image-20250104015034639

image-20250104021732595

image-20250104021812727

image-20250104022002079

image-20250104022037456

5.1.3、IO控制方式

image-20250104022134303

image-20250104022345469

image-20250104022446621

image-20250104022714751

image-20250104022830418

image-20250104195855712

每次发生中断,cpu只能从I/O控制器读入一个字的数据,如果要读入大量的数据,那显然要发生大量中断,这样会导致系统的性能降低。

疑问:每次只读一个字???

image-20250104200116846

image-20250104200537676

每一种控制器都可能有多个。每一种控制器都可能有多个。

image-20250104200856846

DMA读数据的时候并不是每次直接读入一整块的数据(把一整块数据直接放入内存),其实也是一个字一个字读的,每次读完一个字先写到DR里,然后再从DR写到内存里,然后再读下一个字,最终完成一个或多个连续的块的读入,都读入完之后才会发出中断信号通知cpu。 之前中断驱动每读完一个字都会通知一次cpu。

image-20250104204036525

image-20250104204221436

image-20250104204337811

5.1.4、IO软件层次结构

image-20250104204742831

image-20250104204911929

image-20250106193702286

image-20250104205606244image-20250106193811515

image-20250104205918637

image-20250104205928139

image-20250104205944984

image-20250104210007983

image-20250104210032005

image-20250104210117941

image-20250104210213643

image-20250104210316897

image-20250104210416681

5.1.5、输入输出应用程序接口和驱动程序接口

image-20250104210539453

image-20250104210728955

image-20250104210950730

下面这个例子讲解如何使用网络设备接口

image-20250104215247195

P3进程要进行网络通信,可以先使用socket系统调用来创建一个网络套接字(可以理解为申请一片内核空间,这片空间用于接收或者发送数据),socket系统调用会给用户进程返回一个描述符(可以理解为指向套接字的一个指针),有了这个套接字对象之后,需要将该对象绑定到本地的某个端口如6666,这样,p3创建的套接字就可以等待被连接。P1也是同理。

现在,两个主机都有了套接字,同时也确定了数据收发的端口号,接下来可以使用系统调用把本机的套接字连接到另一台机器的套接字上。

image-20250104215704965

P1使用connect系统调用,指明将fd指向的套接字连接到168.98.xxx.xxx主机6666端口的套接字上,这样两个主机就可以建立起应用层的连接。

image-20250104220618611

P1想给P3发送一个数据包,那么P1首先在自己的用户区准备好数据,然后使用write系统调用指明往fd指向的套接字写入xxx数据,设备独立软件接收到write系统调用后,就会把用户进程准备好的数据复制到套接字对应的内核缓冲区中,然后设备独立性软件会调用网络控制器的驱动程序来处理数据,驱动程序会负责把准备好的数据输出到网络设备上,接下来网络控制器就会把网络包发送到网络上。数据在网络上的发送使用TCP/IP协议或其他协议。然后数据包就会被发送到指定ip上,指定ip的网络控制器接收到数据包后,会向主机发送一个中断信号,然后中断处理程序就会工作,然后中断处理程序会调用网络控制器驱动程序,来把网络控制器收到的数据搬到内核的6666端口对应的套接字缓冲区里,接下来P3进程使用read系统调用指明从fd所指的套接字中读出一个数据包。然后设备独立性软件会从缓冲区里把数据复制到用户进程的用户区中,这样P3就可以使用它收到的数据了。

image-20250104220724788

如果P2进程也想建立通信,则其建立一个新的socket并绑定到其他端口即可。其余流程不再赘述。

image-20250104221047711

使用write系统调用后会迅速返回,无需等待,即便磁盘正在忙碌,设备独立性软件也会迅速响应把数据从用户区复制到内核区,接下来内核慢慢地把数据写入到磁盘即可。

image-20250104221328918image-20250104221355671

image-20250104221423368

5.2.1、IO核心子系统

image-20250104221546726

image-20250104221620134

image-20250104221708707

这些算法前面都有介绍,所以不再赘述。

image-20250104221821192

5.2.2、假脱机技术

image-20250104222309799

image-20250104222338816

image-20250104222443437

image-20250104223044481

image-20250104223101622

image-20250104223120566

image-20250104223305721

image-20250104223516930

image-20250104223550156

image-20250104223621506

5.2.3、设备的分配与回收

image-20250104223717275

image-20250104231558827

image-20250104231616374

image-20250104231812746

image-20250104231852925

image-20250104231940091

一个系统中可能会有多个通道。

image-20250104232134653

image-20250104232233423

image-20250104232400613

image-20250104232452894

image-20250104232901362

image-20250104233034641

image-20250104233857809

只有进程第一次通过逻辑设备名申请使用一个设备时,os才会来查询系统设备表。如果之后进程再次以相同的设备名来请求使用设备的话,os首先做得是在逻辑设备表中查找这个逻辑设备对应的物理设备,找到相应的表项之后就可以找到设备对应的驱动程序了。

疑问:这样的话,1、系统中有多个打印机,但在LUT中,只能有一个吗?因为设备类型就是逻辑设备名,那不同用户使用不同打印机时,LUT怎么办?2、只有第一次才会查系统设备表?那么如果LUT中查出来的设备被占用了,进程不能去查一下别的空闲的同类型设备吗???

image-20250104234018651

5.2.4、缓冲区管理

image-20250104234108407

image-20250105004507616

image-20250105004705129

image-20250105004743328

image-20250105004959368

image-20250105005146994

image-20250105005159898

image-20250105005348370

image-20250105005404747

所以T时刻其实就回到了我们假设的初始状态,即一个缓冲区满,另一个空。

image-20250105113243504

这种情况下很难找到与初始状态一模一样的状态。但是观察可以发现,其实每经过(M+C)时间,就会有一块数据被处理完毕

image-20250105113509529

image-20250105113657984image-20250105113728445

image-20250105113821136

image-20250105113947098

image-20250105114041811

image-20250105114155824

image-20250105114231191

image-20250105114301275

image-20250105114325645

5.3.1、磁盘的结构

image-20250105114447042

image-20250105114636526

image-20250105114745968

image-20250105114933021image-20250105115150770

image-20250105115227532

每个盘面都有只是没再画

image-20250105115301392

image-20250105115341395

5.3.2、磁盘调度算法

image-20250105115435774

image-20250105115603001

image-20250105115749876

image-20250105120054957

image-20250105120142603

image-20250105120159135

image-20250105120332425

image-20250105120524176

image-20250105120918486

image-20250105121008878

image-20250105121147254

image-20250105121229079

image-20250105121319910

5.3.3、减少磁盘延迟时间的方法

image-20250105121427493

image-20250105132134824

image-20250105133212381

0号盘面0号柱区的这八个扇区要转两圈是因为,磁头读入扇区数据后需要一小段时间做处理,所以第一圈读0、1、2、3,第二圈读4、5、6、7。

image-20250105133340765

image-20250105133358870

image-20250105134305753

即0号盘面的0号扇区下面正对着1号盘面的0号扇区

image-20250105134438203

image-20250105134533077

0号盘面的0号扇区下面正对着1号盘面的7号扇区

5.3.4、磁盘的管理

image-20250105134645530

image-20250105134742423

image-20250105134753319

刚制作出来时长这样。

image-20250105135003250

链接方式存放数据块时,头指针放在头区域,尾指针放在尾区域,所以就不占用数据区域了,解决了前面的疑惑。

image-20250105135041080

image-20250105135058352

image-20250105135230604

image-20250105135521003

image-20250105135624743

image-20250105135653589

5.3.5、固态硬盘SSD

image-20250105135906764image-20250105135924917

image-20250105140237687

固态硬盘的读写是以页为单位的。

image-20250105140551876

闪存翻译层次会更改逻辑地址到物理地址的映射。

image-20250105141124651

剩余章节:王道操作系统笔记(非常完整!包学包会!融入笔者自己的思考!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

约束112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值