I/O文件的具体操作

对于一个磁盘来说,文件系统是通过文件目录从文件名来进行映射,从而得到了文件的空间分配,比如说MS-DOS将文件名映射为一个数,这个数显示了文件访问表的一个条目,这个条目说明了哪些磁盘块被分配给文件。在UNIX当中将文件名映射为inode号,相应的inode包含了空间分配信息

从文件名到磁盘控制器的连接是如何建立的?下面就举个例子来说明

在MS-DOS当中,其文件名在冒号前的部分有一个字符串比如说C:\asbc\ass.html,这里的C就可以用来表示特定的硬件设备,就比如说操作系统可以规定C:代表的就是我整个磁盘设备当中的第一个磁盘,然后可以通过C:这个字符串去通过设备表的映射去找到一个特定的端口,就可以去找到这个磁盘控制器

在UNIX当中的路径名是不区分设备部分的也就是说没有冒号这一说,但是在UNIX当中有一个装配表,用这个可以将路径名的前缀和特定设备的名称相连接,然后去解析这个录节目的时候,UNIX会检查装配表内的名称以找到最长的匹配前缀

装配表当中的相应的条目就会给出设备的名称,这个设备的名称在文件系统名称空间当中还有一个名称,当UNIX在文件系统目录结构当中找到这个名称的时候,得到的不是inode号,而是设备号<主,次>,然后主设备号表示处理该设备I/O的设备驱动程序,次设备号是传递给设备驱动程序以查找设备表,设备表内的相应条目会给出设备控制器的端口地址或者是内存映射地址

目前现代的操作系统通过对请求与物理设备控制器之间的多级表查找,可以获得巨大的灵活性。应用程序与驱动程序之间的请求传递机制是通用的,因此,不必重新编译内核也能为计算机引入新设备和新的驱动程序

有的操作系统是按需加载设备驱动程序的,在启动的时候,系统胡先去检测硬件总线以确定有哪些设备,然后接着操作系统就马上或等待第一次I/O骑牛的时候装入所需的驱动程序

下面是关于一个阻塞I/O的read请求的图

这里写图片描述
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/zcmuczx/article/details/80722814