北邮 操作系统(七)

第七章 I/O管理

之所以不一来就讲解文件系统,是因为本质上文件系统是基于硬件系统的,有必要具备一些硬件知识,硬件的一些特性能帮助开发者开发更好的软件系统;

本章将讨论操作系统对于设备的管理以及它为用户程序提供服务的作用;

1.I/O系统

计组中涉及一部分的I/O系统,学习这部分内容之前可以先看一看计组期末复习笔记 - Tintoki_blog (gintoki-jpg.github.io)(需要注意的是我们在计算机组成原理课程中介绍的实际大部分是I/O系统的硬件部分,仅仅只是I/O系统非常小的一部分,我们在操作系统中介绍的I/O子系统更多的是偏向操作系统软件的部分)

1.1 I/O设备

I/O设备按照使用特性可分为以下类型:

​ 1)人机交互类外部设备。用于与计算机用户之间交互的设备,如打印机、显示器、鼠标、键盘等。这类设备的数据交换速度相对较慢,通常是以字节为单位进行数据交换的。
​ 2)存储设备。用于存储程序和数据的设备,如磁盘、磁带、光盘等。这类设备用于数据交换,速度较快,通常以多字节组成的块为单位进行数据交换。
​ 3)网络通信设备。用于与远程设备通信的设备,如各种网络接口、调制解调器等。其速度介于前两类设备之间。网络通信设备在使用和管理上与前两类设备也有很大不同。

I/O设备按照传输速率可分为以下类型:

​ 1)低速设备。传输速率仅为每秒几字节到数百字节的一类设备,如键盘、鼠标等。
​ 2)中速设备。传输速率为每秒数千字节至数万字节的一类设备,如行式打印机、激光打印机等。
​ 3)高速设备。传输速率在数百千字节至千兆字节的一类设备,如磁带机、磁盘机、光盘机等。

I/O设备按照信息交换的单位可分为以下类型:

​ 1)块设备。由于信息的存取总是以数据块为单位的,所以存储信息的设备称为块设备。它属于有结构设备,如磁盘等。磁盘设备的基本特征是传输速率较高、可寻址,即对它可随机地读/写任一块。
​ 2)字符设备。用于数据输入/输出的设备为字符设备,因为其传输的基本单位是字符。它属于无结构类型,如交互式终端机、打印机等。它们的基本特征是传输速率低、不可寻址,并且在输入/输出时常采用中断驱动方式。

1.2 I/O控制方式

设备管理的主要任务之一是控制外部设备和内存或处理机之间的数据传送,主要有四种控制方式,具体参照计组期末复习笔记 - Tintoki_blog (gintoki-jpg.github.io)

2.I/O子系统

整个I/O系统可以视为具有如下层次的系统结构,各层次及其功能如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CvO8ydcI-1677487302021)(null)]

  • 用户层I/O软件:实现与用户交互的接口;

  • 设备独立性软件:用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护以及设备分配与释放等,同时为设备管理和数据传送提供必要的存储空间;设备独立性也称为设备无关性,使得应用程序独立于具体使用的物理设备;

  • 设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序;

  • 中断处理程序:用于保存被中断进程的CPU环境,转入相应的中断处理程序进行处理,处理完并恢复被中断进程的现场后,返回到被中断进程;

  • 硬件设备:I/O设备通常包括一个机械部件和一个电子部件。为了达到设计的模块性和通用性,一般将其分开:

    • 电子部件称为设备控制器(或适配器),在个人计算机中,通常是一块插入主板扩充槽的印制电路板;
    • 机械部件则是设备本身;

I/O子系统不同于I/O系统,I/O子系统是操作系统中负责和I/O设备打交道的子系统(也就是说操作系统中负责I/O管理部分的就是I/O子系统),而I/O系统是由输入输出控制系统和外围设备两部分组成的一个系统;

下面我们介绍I/O子系统提供的主要服务:

2.1 I/O调度

I/O调度就是确定一个好的顺序来执行这些I/O请求。应用程序所发布的系统调用的顺序不一定总是最佳选择,所以需要I/O调度来改善系统整体性能,使进程之间公平地共享设备访问,减少I/O完成所需要的平均等待时间;

2.2 磁盘高速缓存

I/O子系统还可使用主存或磁盘上的存储空间的技术,如缓冲、高速缓存、假脱机等来改善计算机效率;

磁盘高速缓存技术不同于常规意义下的介于CPU与内存之间的小容量高速存储器(Cache,注意这里的Cache是一种硬件,由SRAM组成),磁盘高速缓存逻辑上属于磁盘,物理上是驻留在内存中的盘块;

磁盘高速缓存在内存中分为两种形式:

  • 一种是在内存中开辟一个单独的存储空间作为磁盘高速缓存,大小固定;
  • 另一种是把未利用的内存空间作为一个缓冲池,供请求分页系统和磁盘I/O时共享;

Q:是不是觉得很神奇,这和我们计组学的Cache不一样啊,我不能接受!

A:现在Cache的概念已经被扩充了:不仅在CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘高速缓存),乃至在硬盘与网络之间也有某种意义上的“Cache”(Inter临时文件夹),因此Cache现在的定义为:凡是位于速度相差较大的两种硬件之间的,用于协调两者数据传输速度差异的结构,均可称之为Cache;


2.3 缓冲区

在设备管理子系统中,引入缓冲区的目的主要如下:
1)缓和CPU与1O设备间速度不匹配的矛盾。
2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制。
3)解决基本数据单元大小(即数据粒度)不匹配的问题。
4)提高CPU 和I/O设备之间的并行性。

其实现方法如下:
1)采用硬件缓冲器,但由于成本太高,除一些关键部位外,一般不采用硬件缓冲器。
2)采用缓冲区(位于内存区域)。

缓冲区有一个特点,即当缓冲区的数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满后,才能从缓冲区把数据传出;

学习了磁盘高速缓存和缓冲区之后,我们会产生疑问,这两东西真的好像,下面我们给出表格区分:

2.4 设备分配

设备分配是指根据用户的I/O请求分配所需的设备。分配的总原则是充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁。从设备的特性来看,采用下述三种使用方式的设备分别称为独占设备、共享设备和虚拟设备:

  • 独占式使用设备:在申请设备时,若设备空闲则将其独占,不再允许其他进程申请使用,直到该设备被释放才允许其他进程申请使用;
  • 分时式共享使用设备:独占式使用设备时,设备利用率很低,当设备没有独占使用的要求时,可以通过分时共享使用提高利用率。例如,对磁盘设备的I/O操作,各进程的每次I/O操作请求可以通过分时来交替进行。
  • 以Spooling方式使用设备:假脱机I/O技术是在批处理操作系统时代引入的,这种技术对I/O技术进行批处理,实质上这是一种以空间换取时间的技术;

3.设备驱动

上面我们只是在理论层面介绍了I/O子系统提供的一些服务,现在我们真正用实例来体验一下操作系统如何参与控制I/O设备工作(这一小节在哈工大的教材是单独作为一个章节罗列出来的,本质上这个小节的内容是为了下一章的文件系统做铺垫);


完成CPU和内存这两个计算机核心设备的管理以后,操作系统的最后一项重要任务就是管理计算机外部设备,外部设备也称为输入输出(I/O)设备,通过总线和CPU、内存连接在一起;

外设的工作模式非常直观:

  1. CPU通过端口地址发送对外设的工作要求"out ax,端口号";
  2. 外设开始工作,工作完成后使用中断机制告诉CPU,CPU会在中断处理程序中处理外设的工作结果;

上述两个步骤是操作系统使用外设的核心主线,但外设管理不只包括外设的使用,还包括外设使用效率的提高;

操作系统引入文件视图的概念,使得所有外设的使用都被统一为对文件视图的使用,文件视图给上层用户提供了一个统一的接口,屏蔽了细节;文件视图背后根据外设各自的特点实现缓冲机制、排队调度等来提高外设的工作效率;

3.1 外设工作

CPU对外设的使用主要由以下两条主线构成(有点啰嗦,但是这两条主线就是外设管理的整个核心):

  1. 从CPU开始,CPU发送命令给外设,最终表现为CPU执行指令"out ax,端口号" —— 发出命令
  2. 从外设开始,外设在完成工作后或出现状态变化时通过中断通知CPU,CPU通过中断处理程序完成后续工作 —— 中断处理

3.2 文件视图

如果按照8.1的方式来使用外设,需要知道外设的端口地址、设备操控指令的详细格式和指令流程等信息,这对一个普通程序员来说是很困难的,让应用程序员通过命令直接操作计算机外设的想法几乎不可行;

文件视图应运而生,不管是什么样的外设,操作系统都将其抽象为一个文件,程序员只需要通过文件接口open、read、write来使用这些外设;

有了文件视图之后,上层用户操作外设和对文件的操作完全一样(外设端口号、设备指令格式等细节交给操作系统完成),操作系统负责将上层接口展开形成对设备的具体操作,形成一系列out语句;

操作系统进行外设管理的核心就是构建两条路线:

  • 从文件读写到设备命令 —— 显示器驱动;
  • 从设备驱动回到文件读写 —— 键盘驱动;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aOfnxjIL-1677487299776)(https://img2023.cnblogs.com/blog/2922190/202301/2922190-20230110205448216-1094069147.png)]

3.2.1 显示器驱动

printf是一个库函数,该库函数会调用系统调用write,write的内核实现是sys_write;

sys_write首先需要找到所写文件的属性,以区分它究竟是普通文件还是设备文件:

  • 如果是设备文件,则sys_write根据设备文件中存放的设备属性转到相应的操作命令;

设备属性被存放在一个数据结构中(该数据结构描述了文件),这个数据结构就是FCB文件控制块,因此sys_write的第一步就是找到要写的目标文件(当然这里的文件就是设备文件)的FCB;为了找到FCB,需要从当前进程的PCB中找到文件的句柄标识fd,根据fd就可以找到文件的FCB;

int sys_write(unsigned int fd,char *buf,int count)
{
    struct file*file;
    file=current->filp[fd];//current是当前进程,current->filp存放了当前进程打开的文件,根据fd可以在文件FCB数组中找到我们需要的目标文件的FCB
    inode=file->f_inode;   //inode变量就是文件的FCB,file中的属性信息被存储在inode变量中
    ...
}

我们已经获得inode变量,首先根据inode中的信息来判断该文件对应的设备是否是一个字符设备(显示器就是一个字符设备):

  • 如果是字符设备则继续向下执行相应的字符设备处理代码;

接下来的函数根据是设备读操作还是设备写操作继续分支(显示器只写,键盘只读):

  • 显示器和键盘合在一起构成终端设备tty,显示器写操作将调用函数tty_write

tty_write函数向显示器进行输出,之后的过程我们就不再细讲,感兴趣可以见书P205自学;


Q:为什么显示器是写操作,不是显示给用户吗?

A:我们将显示器理解为一个设备文件,要让显示器显示东西那么这个设备文件中一定要有东西才行,所以显示器对应写操作;


整个文件视图路线总结如下:

3.2.2 键盘驱动

按下键盘会产生0x21号中断,所以先来看0x21号中断的中断处理函数;

CPU向设备写的最终命令是"out",相应的,读设备的第一步是"in"即从设备上取出内容交给CPU;

整个文件视图路线总结如下:

4.I/O栈&文件系统

(本节直接从课堂上的PPT总结,主要目的就是为了承上启下引出文件系统)

I/O栈非常复杂,利用计算机系统中常规的分层思想我们大致可以将其分为如下(I/O栈本质上就是用户从应用的层次对磁盘进行读写如何影响到最终磁盘的读写)

我们仅介绍其中最核心的文件系统,文件系统的主要功能(也是设计一个文件系统需要具备的最基本的功能)如下

结论:

  • 一切文件系统的操作都是以block为单位,一个文件就是多个block的集合;
  • block是逻辑上的单位,扇区是物理上的单位,一般一个block的大小大于等于一个扇区的大小;

其中Naming是文件系统最基本的功能,课堂上老师讲解文件系统的流程也是按照Naming的两个阶段进行

操作系统打开(open)一个文件的时候会对文件名做一个解析,将文件名转换为文件号,操作系统赋予该文件一个文件描述符并返回一个句柄,之后所有的操作(read、write)都是基于句柄操作,将操作映射到文件描述符和磁盘块上;

该过程主要分为两个阶段,目录承担了文件名到文件号的映射阶段的任务,文件承担了文件号到磁盘块的映射阶段的任务;


目录对任何文件数据都认为是<文件名:文件号>的对,目录对文件名的映射过程如下(实际上就是根据目录结构对文件进行查找)

通过对目录结构的改进可以得到更高效的查找效率(如B+树的结构)

这部分的考点是计算将文件名映射为文件号需要做多少次的磁盘访问(文件号也是保存在磁盘中的)


第二阶段,从文件号到磁盘块的映射,我们将在下面章节10.常见文件系统一节进行介绍,分文件系统对这部分知识点讲解(因为常见文件系统的区别也主要就体现在从文件号到磁盘块的映射)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

坂.y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值