diff --git a/Operate-System/3-file-management.md b/Operate-System/3-file-management.md index b20aaa0..ae3687b 100644 --- a/Operate-System/3-file-management.md +++ b/Operate-System/3-file-management.md @@ -382,11 +382,13 @@ + 基于索引结点的共享方式:硬链接。 + 基于符号链的共享方式:软链接。 +索引结点中设置一个链接计数变量$count$,用于表示链接到本索引结点上的用户目录项数。 + #### 硬链接 + 在文件目录中提到,索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。 -+ 索引结点中设置一个链接计数变量$count$,用于表示链接到本索引结点上的用户目录项数。 + 不同目录下对于同一个文件的索引结点的命名可以是不同的。 ++ 创建硬链接时$count+1$。 若某个用户决定“删除”该文件: @@ -399,18 +401,28 @@ + 软链接就是共享时建立一个$Link$类型的文件,文件记录了要共享的文件的存放路径或任意一条硬链接路径,类似$Windows$系统的快捷方式。 + 文件拥有者才拥有指向其索引结点的指针,而共享该文件的其他用户只有该文件的路径名。 + 当访问共享文件时,先判断这个文件属于$Link$类型文件,然后根据其中记录的路径层层查找路径找到索引结点。 -+ 优点: - + 网络共享只用提供文件所在机器的网络地址和文件路径。 - + 若共享文件被删除了,则软链接失效。删除软链接则无影响。 -+ 缺点: - + 当共享文件删除,而其他用户新建一个相同路径的文件则原链接指向的是新文件而不是原文件。 - + 因为软链接访问共享文件时需要查询多层目录,所以有多层$I/O$操作,从而软链接访问速度慢于硬链接。 ++ 创建软链接时$count$直接复制。 + +若某个用户决定“删除”该文件: + ++ 由于删除操作对软链接不可见,所以$count$值不变。 ++ 当以后通过符号链接再次访问时发现文件不存在再直接删除软链接。 + +优点: + ++ 网络共享只用提供文件所在机器的网络地址和文件路径。 ++ 若共享文件被删除了,则软链接失效。删除软链接则无影响。 + +缺点: + ++ 当共享文件删除,而其他用户新建一个相同路径的文件则原链接指向的是新文件而不是原文件。 ++ 因为软链接访问共享文件时需要查询多层目录,所以有多层$I/O$操作,从而软链接访问速度慢于硬链接。 硬链接和软链接都是静态共享方式,都存在一个共同的问题,每个共享文件都有几个文件名,从而每增加一条文件名,当遍历整个文件系统时会多次遍历到该共享文件。 多个进程同时对同一个文件操作称为动态共享。 -## 磁盘系统 +## 文件系统管理 ### 系统层次结构 @@ -435,9 +447,11 @@ 6. 要删除这条记录,必定要对磁盘设备发出请求――设备管理程序模块。 7. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收――辅助分配模块。 -### 存储空间管理 +### 外存空闲空间管理 -即对空闲空间的管理。 +包含文件系统的分区称为卷。 + +同一个卷中存放数据的空间(文件区)和$FCB$的空间(目录区)是分离的。 #### 存储空间划分与初始化 @@ -449,6 +463,8 @@ #### 空闲表法 +是连续分配方式。 + + 拥有一个空闲盘块表,包括空闲区间的起始位置(第一个空闲盘块号)和空闲空间长度(空闲盘块数)。 + 适用于连续分配方式。 + 如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。 @@ -503,6 +519,41 @@ 1. 如果块内回收后余留,则修改数据。 2. 若回收数量大于等于余下,需要将超级块中的数据复制到新回收的块中,并修改超级块的内容,让新回收的块成为第一个分组。 +### 文件系统分布 + +文件系统存放在磁盘上,多数磁盘划分分区,每个分区都有独立的文件系统。 + +#### 文件系统结构 + ++ 主引导记录($Master\,Boot\,Record$,$MBR$),位于磁盘的0号扇区,用来引导计算机,$MBR$后面是分区表,该表给出每个分区的起始和结束地址。表中的一个分区被标记为活动分区,当计算机启动时,BIOS读入并执行$MBR$。$MBR$做的第一件事是确定活动分区,读入它的第一块,即引导块。 ++ 引导块($boot\,block$),$MBR$执行引导块中的程序后,该程序负责启动该分区中的操作系统。为统一起见,每个分区都从一个引导块开始,即使它不含有一个可启动的操作系统,也不排除以后会在该分区安装一个操作系统。$Windows$系统称之为分区引导扇区。除了从引导块开始,磁盘分区的布局是随着文件系统的不同而变化的。 ++ 超级块($super\,block$),包含文件系统的所有关键信息,在计算机启动时,或者在该文件系统首次使用时,超级块会被载入内存。超级块中的典型信息包括分区的块的数量、块的大小、空闲块的数量和指针、空闲的$FCB$数量和$FCB$指针等。 ++ 文件系统中空闲块的信息,可以使用位示图或指针链接的形式给出。后面也许跟的是一组i结点,每个文件对应一个结点,i结点说明了文件的方方面面。接着可能是根目录,它存放文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。 + +#### 文件系统内存结构 + +内存中的信息用于管理文件系统并通过缓存来提高性能。 + ++ 内存中的安装表($mount\,table$),包含每个已安装文件系统分区的有关信息。 ++ 内存中的目录结构的缓存包含最近访问目录的信息。对安装分区的目录,它可以包括一个指向分区表的指针。 ++ 整个系统的打开文件表,包含每个打开文件的$FCB$副本及其他信息。 ++ 每个进程的打开文件表,包含一个指向整个系统的打开文件表中的适当条目的指针与其他信息。 + +### 虚拟文件系统 + +即$VFS$,为用户程序提供了文件系统操作的统一接口(统一调用函数)屏蔽了不同文件系统的差异。 + +$Linux$实现$VFS$提供四个对象: + ++ 超级块对象:表示已安装或挂载的特定文件系统。 ++ 索引结点对象:表示一个特定的文件。 ++ 目录项对象:表示特定的目录项。 ++ 文件对象:表示一个与进程相关的已打开文件。 + +$VFS$可以提高系统性能,只存在内存中,系统启动建立,关闭时消亡。 + +## 磁盘系统 + ### 磁盘结构 + 磁盘由空气过滤片、主轴、音圈马达、永磁铁、磁盘、磁头、磁头臂组成。 diff --git a/Operate-System/4-device-management.md b/Operate-System/4-device-management.md index 6047c1b..49b4328 100644 --- a/Operate-System/4-device-management.md +++ b/Operate-System/4-device-management.md @@ -2,10 +2,16 @@ ## I/O概述 -### I/O设备的基本概念 +### I/O设备基本概念 + +#### I/O设备定义 + “$I/O$”就是“输入/输出”($Input/Output$)。$I/O$设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机中的硬件部件。 + $UNIX$系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。 ++ 计算机系统为每台设备确定一个编号以便区分和识别设备,这个确定的编号称为设备的**绝对号**。 + +#### I/O设备分类 + + 按使用特性分类: + 人机交互类外部设备:数据传输速度慢,如鼠标、键盘。 + 存储设备:数据传输速度块,如移动硬盘。 @@ -15,9 +21,8 @@ + 中速设备:打印机。 + 高速设备:硬盘。 + 按信息交换的单位分类: - + 块设备:传输速率较高,可寻址,即对它可随机地读/写任一块,如硬盘、磁盘。 - + 字符设备:传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式,键盘、鼠标。 -+ 计算机系统为每台设备确定一个编号以便区分和识别设备,这个确定的编号称为设备的**绝对号**。 + + 块设备:有结构设备,传输速率较高,可寻址,即对它可随机地读/写任一块,如硬盘、磁盘。 + + 字符设备:无结构设备,传输速率较慢,不可寻址,在输入/输出时常采用中断驱动方式,键盘、鼠标。 ### I/O控制器 @@ -25,19 +30,33 @@ + $I/O$设备的机械部件主要用来执行具体$I/O$操作。如鼠标/键盘的按钮,显示器的$LED$屏,移动硬盘的磁臂、磁盘盘面。 + $I/O$设备的电子部件通常是一块插入主板扩充槽的印刷电路板。 + $CPU$无法直接控制$I/O$设备的机械部件,因此$I/O$设备还要有一个电子部件作为$CPU$和$I/O$设备机械部件之间的“中介”,用于实现$CPU$对设备的控制。 -+ $I/O$控制器的功能: - + 接受和识别$CPU$发出的命令:如$CPU$发来的$Read/Write$命令,$I/O$控制器中会有相应的**控制寄存器**来存放命令和参数。 - + 向$CPU$报告设备的状态:$I/O$控制器中会有相应的**状态寄存器**,用于记录$I/O$设备的当前状态。如$1$表示空闲,$0$表示忙碌。 - + 数据交换:$I/O$控制器中会设置相应的**数据寄存器**。输出时,数据寄存器用于暂存$CPU$发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后$CPU$从数据寄存器中取走数据。 - + 地址识别:类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。$I/O$控制器通过$CPU$提供的“地址”来判断$CPU$要读/写的是哪个寄存器。 -+ $I/O$控制器的组成: - + $CPU$与控制器的接口:用于实现$CPU$与控制器之间的通信。$CPU$通过控制线发出命令,通过地址线指明要操作的设备,通过数据线来取出(输入)数据,或放入(输出)数据。 - + $I/O$逻辑:负责接收和识别$CPU$的各种命令(如地址译码),并负责对设备发出命令。 - + 控制器与设备的接口:用于实现控制器与设备之间的通信,包括数据、状态和控制。 + +#### I/O$控制器功能 + ++ 接受和识别$CPU$发出的命令:如$CPU$发来的$Read/Write$命令,$I/O$控制器中会有相应的**控制寄存器**来存放命令和参数。 ++ 向$CPU$报告设备的状态:$I/O$控制器中会有相应的**状态寄存器**,用于记录$I/O$设备的当前状态。如$1$表示空闲,$0$表示忙碌。 ++ 数据交换:$I/O$控制器中会设置相应的**数据寄存器**。输出时,数据寄存器用于暂存$CPU$发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后$CPU$从数据寄存器中取走数据。 ++ 地址识别:类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”。$I/O$控制器通过$CPU$提供的“地址”来判断$CPU$要读/写的是哪个寄存器。 + +#### I/O接口 + +负责与$CPU$和设备进行通信: + ++ $CPU$与控制器的接口:用于实现$CPU$与控制器之间的通信。$CPU$通过控制线发出命令,通过地址线指明要操作的设备,通过数据线来取出(输入)数据,或放入(输出)数据。 ++ $I/O$逻辑:负责接收和识别$CPU$的各种命令(如地址译码),并负责对设备发出命令。 ++ 控制器与设备的接口:用于实现控制器与设备之间的通信,包括数据、状态和控制。 + 一个$I/O$控制器可能会对应多个设备。 -+ 数据寄存器、控制寄存器、状态寄存器可能有多个(如每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便$CPU$操作。 - + 有的计算机会让这些寄存器占用内存地址的一部分,称为**内存映像$I/O$**,优点是简化了指令。可以采用对内存进行操作的指令来对控制器进行操作。 - + 另一些计算机则采用$I/O$专用地址,即**寄存器独立编址**,缺点是需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号。 + +#### I/O端口 + ++ 数据寄存器。 ++ 控制寄存器。 ++ 状态寄存器:可能有多个(如每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便$CPU$操作。 + +实现$CPU$与$I/O$端口通信,使用不同编址方式: + ++ 统一编址:有的计算机会让这些寄存器占用内存地址的一部分,称为**内存映像$I/O$**,优点是简化了指令。可以采用对内存进行操作的指令来对控制器进行操作。 ++ 独立编址:另一些计算机则采用$I/O$专用地址,即**寄存器独立编址**,缺点是需要设置专门的指令来实现对控制器的操作,不仅要指明寄存器的地址,还要指明控制器的编号。 ### I/O控制方式 @@ -116,7 +135,7 @@ $DMA$的控制器与$CPU$分时使用内存,通常采用以下三种方法:停止$CPU$访内存、周期挪用、$DMA$与$CPU$交替访内存。(计算机组成原理会具体讲到) + 数据块传送方式:在$I/O$接口电路中设置一个比较大的数据缓冲区,一般能存放一个数据块,$I/O$接口电路与内存之间的数据交换以数据块为单位。总线仲裁器判定究竟是$DMA$控制器还是$CPU$能获得总线的使用权。 -+ 周期挪用方式:当$I/O$接口没有$DMA$请求时,$CPU$按程序要求访问内存;一旦$I/O$接口有$DMA$请求,则$I/O$接口挪用一个或几个周期。缺点是:数据输入或庶出过程中实际占用了$CPU$时间。 ++ 周期挪用方式:当$I/O$接口没有$DMA$请求时,$CPU$按程序要求访问内存;一旦$I/O$接口有$DMA$请求,则$I/O$接口挪用一个或几个周期。缺点是:数据输入或输出过程中实际占用了$CPU$时间。 + 交替访存方式:$CPU$与$DMA$控制器交替访问内存。不需要总线使用权的申请、建立和归还过程。 效率高,但实现起来有困难,基本上不被使用。 @@ -185,6 +204,15 @@ $I/O$软件结构层次: 2. 如果正常结束则从设备中读入一个字的数据并由$CPU$放入内存缓冲区中。交给上一层处理。 3. 如果异常结束则根据异常原语进行处理。 +### 应用程序I/O接口 + +即$I/O$系统与高层软件之间的接口 + ++ 字符设备接口。 ++ 块设备接口。 ++ 网络设备接口。 ++ 阻塞或非阻塞$I/O$。 + ## I/O核心子系统 ### I/O核心子系统概述