diff --git a/Operate-System/3-file-management.md b/Operate-System/3-file-management.md index 5e3780f..c0c6208 100644 --- a/Operate-System/3-file-management.md +++ b/Operate-System/3-file-management.md @@ -84,9 +84,15 @@ 1. 文件存放路径。 2. 文件名。 3. 要对文件的操作类型(如:$r$只读;$rw$读写等)。 -+ 操作系统在处理$open$系统调用时,主要做了几件事: - 1. 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的的目录项,并检查该用户是否有指定的操作权限。 - 2. 将目录项$FCB$复制到内存中的“打开文件表”(活跃文件目录表)中。并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件。 ++ 操作系统在处理$open$系统调用: + 1. 将文件名传递给逻辑文件系统。 + 2. 搜索系统打开文件表。 + 3. 如果已打开,则在进程打开文件表种创建新目录指向系统打开文件表对应条目。 + 4. 如果未打开,根据文件名搜索目录结构,并检查该用户是否有指定的操作权限。(部分文件目录会缓存到内存中以加快检索) + 5. 找到文件后将目录项$FCB$复制到系统打开文件表(活跃文件目录表)中。 + 6. 进程打开文件表中创建一个条目,然后通过指针将系统打开文件表条目和其他域相联。 + 7. 返回一个指向进程打开文件表条目的指针,通过指针操作文件。 + 8. 打开文件后内核不能通过文件名访问文件,只能通过文件描述符(文件句柄)访问。 + 打开文件表分为两种: 1. 系统打开文件表,只有一张,包括编号、文件名、外存地址、打开计数器(多少个进程打开了次文件)等。 2. 每一个进程的打开文件表,包括编号、文件名、读写指针、访问权限、系统表索引号等。 @@ -396,9 +402,12 @@ + 在文件目录中提到,索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。 + 不同目录下对于同一个文件的索引结点的命名可以是不同的。 + +创建硬链接时: + + 创建硬链接时$count+1$。 -若某个用户决定“删除”该文件: +删除文件时: + 则只是要把用户目录中与该文件对应的目录项删除,且索引结点的$count$值减$1$。 + 若$count>0$,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。 @@ -409,9 +418,13 @@ + 软链接就是共享时建立一个$Link$类型的文件,文件记录了要共享的文件的存放路径或任意一条硬链接路径,类似$Windows$系统的快捷方式。 + 文件拥有者才拥有指向其索引结点的指针,而共享该文件的其他用户只有该文件的路径名。 + 当访问共享文件时,先判断这个文件属于$Link$类型文件,然后根据其中记录的路径层层查找路径找到索引结点。 -+ 创建软链接时$count$直接复制。 -若某个用户决定“删除”该文件: +创建软链接时: + ++ $count$直接复制。 ++ 计算$count$值时忽略所有软链接。 + +若决定“删除”该文件: + 由于删除操作对软链接不可见,所以$count$值不变。 + 当以后通过符号链接再次访问时发现文件不存在再直接删除软链接。 @@ -435,15 +448,19 @@ ### 系统层次结构 1. 设备。 -2. 相关模块 +2. $I/O$控制: + + 包括设备驱动程序和中断处理程序,在内存和磁盘系统之间传输信息。 + + 设备驱动程序将输入的命令翻译成底层硬件的特定指令,硬件控制器利用这些指令使$I/O$设备与系统交互。 + + 设备驱动程序告诉$I/O$控制器对设备的什么位置采取什么动作。 +3. 相关模块: + 辅助分配模块:管理辅存空间。即负责分配和回收存储空间。 + 设备管理模块:管理设备。直接与硬件交互,负责和硬件直接相关的一些管理工作。如分配设备、分配设备缓冲区、磁盘调度、启动设备、释放设备等。 -3. 物理文件系统:物理地址转换。这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址。 -4. 逻辑文件系统与文件信息缓冲区:逻辑地址转换。用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址。文件信息缓冲区用来在调入索引表到内存时暂存索引表的内容。 -5. 存取控制模块:文件保护。为了保证文件数据的安全,还需要验证用户是否有访问权限。 -6. 文件目录系统:管理文件目录。用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的$FCB$或索引结点。所有和目录、目录项相关的管理工作都在本层完成,如管理活跃的文件目录表、管理打开文件表等。 -7. 用户接口:向用户提供文件目录相关功能接口。这层就是用于处理用户发出的系统调用请求($read$、$write$、$open$、$close$等系统调用)。 -8. 用户/应用程序。 +4. 物理文件系统:物理地址转换。这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址。 +5. 逻辑文件系统与文件信息缓冲区:逻辑地址转换。用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址。文件信息缓冲区用来在调入索引表到内存时暂存索引表的内容。 +6. 存取控制模块:文件保护。为了保证文件数据的安全,还需要验证用户是否有访问权限。 +7. 文件目录系统:管理文件目录。用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的$FCB$或索引结点。所有和目录、目录项相关的管理工作都在本层完成,如管理活跃的文件目录表、管理打开文件表等。 +8. 用户接口:向用户提供文件目录相关功能接口。这层就是用于处理用户发出的系统调用请求($read$、$write$、$open$、$close$等系统调用)。 +9. 用户/应用程序。 假设某用户请求删除文件“$D:$/工作目录/学生信息.$xlsx$”的最后$100$条记录: @@ -455,6 +472,26 @@ 6. 要删除这条记录,必定要对磁盘设备发出请求――设备管理程序模块。 7. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收――辅助分配模块。 +### 文件系统分布 + +文件系统存放在磁盘上,多数磁盘划分分区,每个分区都有独立的文件系统。 + +#### 文件系统磁盘结构 + ++ 主引导记录($Master\,Boot\,Record$,$MBR$),位于磁盘的0号扇区,用来引导计算机,$MBR$后面是分区表,该表给出每个分区的起始和结束地址。表中的一个分区被标记为活动分区,当计算机启动时,BIOS读入并执行$MBR$。$MBR$做的第一件事是确定活动分区,读入它的第一块,即引导块。 ++ 引导块($boot\,block$),$MBR$执行引导块中的程序后,该程序负责启动该分区中的操作系统。为统一起见,每个分区都从一个引导块开始,即使它不含有一个可启动的操作系统,也不排除以后会在该分区安装一个操作系统。$Windows$系统称之为分区引导扇区。除了从引导块开始,磁盘分区的布局是随着文件系统的不同而变化的。 ++ 超级块($super\,block$),包含文件系统的所有关键信息,在计算机启动时,或者在该文件系统首次使用时,超级块会被载入内存。超级块中的典型信息包括分区的块的数量、块的大小、空闲块的数量和指针、空闲的$FCB$数量和$FCB$指针等。 ++ 文件系统中空闲块的信息,可以使用位示图或指针链接的形式给出。后面也许跟的是一组i结点,每个文件对应一个结点,i结点说明了文件的方方面面。接着可能是根目录,它存放文件系统目录树的根部。最后,磁盘的其他部分存放了其他所有的目录和文件。 + +#### 文件系统内存结构 + +内存中的信息用于管理文件系统并通过缓存来提高性能。 + ++ 内存中的安装表($mount\,table$),包含每个已安装文件系统分区的有关信息。 ++ 内存中的目录结构的缓存包含最近访问目录的信息。对安装分区的目录,它可以包括一个指向分区表的指针。 ++ 整个系统的打开文件表,包含每个打开文件的$FCB$副本及其他信息。 ++ 每个进程的打开文件表,包含一个指向整个系统的打开文件表中的适当条目的指针与其他信息。 + ### 外存空闲空间管理 包含文件系统的分区称为卷。 @@ -527,26 +564,6 @@ 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$,为用户程序提供了文件系统操作的统一接口(统一调用函数)屏蔽了不同文件系统的差异。 diff --git a/Operate-System/4-device-management.md b/Operate-System/4-device-management.md index 4598eb9..6aba749 100644 --- a/Operate-System/4-device-management.md +++ b/Operate-System/4-device-management.md @@ -27,6 +27,7 @@ ### I/O控制器 + $I/O$设备由机械部件和电子部件($I/O$控制器或设备控制器)组成。 ++ 通过$I/O$逻辑实现设备控制。 + $I/O$设备的机械部件主要用来执行具体$I/O$操作。如鼠标/键盘的按钮,显示器的$LED$屏,移动硬盘的磁臂、磁盘盘面。 + $I/O$设备的电子部件通常是一块插入主板扩充槽的印刷电路板。 + $CPU$无法直接控制$I/O$设备的机械部件,因此$I/O$设备还要有一个电子部件作为$CPU$和$I/O$设备机械部件之间的“中介”,用于实现$CPU$对设备的控制。 @@ -60,6 +61,8 @@ ### I/O控制方式 +用于控制主存和外设之间的输入输出控制方式。 + #### 程序直接控制方式 + 完成读写的流程: @@ -261,19 +264,20 @@ $I/O$软件结构层次: + 减少对$CPU$的中断频率,放宽对$CPU$中断相应时间的限制。 + 解决数据粒度不匹配的问题。 + 提高$CPU$与$I/O$设备之间的并行性。 ++ $T$代表输入时间(把数据传入缓冲区)、$M$代表传输时间(把缓冲区数据传入用户区)、$C$代表处理时间($CPU$对数据进行处理)。 #### 单缓冲 + 假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。 + 当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。 + 常考题型:计算每处理一块数据平均需要多久?技巧:假定一个初始状态(如工作区满、缓冲区空),分析下次到达相同状态需要多少时间,这就是处理一块数据平均所需时间。 -+ 处理一块数据平均耗时$\max(C,T)+M$。其中$C$代表处理时间、$M$代表传输时间、$T$代表输入时间。 ++ 处理一块数据平均耗时$\max(C,T)+M$。 #### 双缓冲 + 假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)。 -+ 一块存,一块可以取,处理一块数据平均耗时$\max(T,(C+M))$。其中$C$代表处理时间、$M$代表传输时间、$T$代表输入时间。 + 若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。否则单缓冲区只能单向数据传输。 ++ 一块存,一块可以取,处理一块数据平均耗时$\max(T,(C+M))$。 #### 循环缓冲 @@ -310,6 +314,12 @@ $I/O$软件结构层次: + 动态分配:主要是共享设备的分配,进程执行期间进行,通过系统调用提出设备请求,可能死锁。 + $SPOOLing$技术:主要是虚拟设备的分配,实现了虚拟设备,让设备可同时被分配给多个进程。 +或者: + ++ 独享分配。 ++ 共享分配。 ++ 虚拟分配。 + #### 设备分配考虑因素 + 固有属性: @@ -469,10 +479,12 @@ $I/O$软件结构层次: + 一个闪存由$B$块组成,每块由$P$页组成。存取以页为单位,一般每页$512B\sim4KB$,每块$32\sim128$页,每块$16KB\sim512KB$。 + 闪存磨损速度很快,为了弥补寿命缺陷其磨损均衡技术分为两种: + 动态磨损均衡:自动选择较新块写入。 - + 静态磨损均衡:$SSD$自动检测并数据分配。 + + 静态磨损均衡:$SSD$自动检测并数据分配。(更好) ### 磁盘操作时间 +#### 基本时间度量 + + 寻找时间(寻道时间)$T_s=s+m\times n$:在读/写数据前,将磁头移动到指定磁道所花的时间: + 启动磁头臂是需要时间的。假设耗时为$s$。 + 移动磁头也是需要时间的。假设磁头匀速移动,每跨越一个磁道耗时为$m$,总共需要跨越$n$条磁道。 @@ -486,6 +498,12 @@ $I/O$软件结构层次: + 操作时间=寻道时间$T_s$+延迟时间$T_r$+传输时间$T_t$。 + 延迟时间和传输时间都与磁盘转速相关,且为线性相关。而转速是硬件的固有属性,因此操作系统也无法优化延迟时间和传输时间,操作系统只能通过磁盘调度算法优化寻道时间。 +#### 优化方法 + ++ 提前读:在读磁盘当前块时,把下一磁盘块也读入内存缓冲区。 ++ 延迟写:仅在缓冲区首部设置延迟写标志,然后释放此缓冲区并将其链入空闲缓冲区链表的尾部,当其他进程申请到此缓冲区时,才真正把缓冲区信息写入磁盘块。 ++ 虚拟盘:是指用内存空间去仿真磁盘,又叫$RAM$盘。虚拟盘是一种易失性存储器。虚拟盘常用于存放临时文件。 + ### 磁盘调度算法 磁盘调度算法用来优化寻道时间。 @@ -527,7 +545,7 @@ $I/O$软件结构层次: #### LOOK调度算法 + 为了解决必须移动到两边磁道的缺点,$LOOK$规定如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。 -+ 优点:比起$SCAN$算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短。 ++ 优点:比起$SCAN$算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短。 对于例题,按照$LOOK$规则,到了$184$就可以立刻回头,所以移动顺序为$150$、$160$、$184$、$90$、$58$、$55$、$39$、$38$、$18$。一共移动了$250$个磁道,平均寻找长度为$27.5$。 @@ -581,6 +599,13 @@ $I/O$软件结构层次: ### 磁盘的管理 +#### 安装操作系统顺序 + +1. $ROM$引导程序。 +2. 磁盘引导程序。 +3. 分区引导程序。 +4. 操作系统初始化程序。 + #### 磁盘初始化 1. 进行低级格式化(物理格式化),将磁盘的各个磁道划分为扇区。一个扇区通常可分为头、数据区域(如$512B$大小)、尾三个部分组成。管理扇区所需要的各种数据结构一般存放在头、尾两个部分,包括扇区校验码(如奇偶校验、$CRC$循环冗余校验码等,校验码用于校验扇区中的数据是否发生错误)。