mirror of
https://github.com/Didnelpsun/CS408.git
synced 2026-11-02 21:33:44 +08:00
更新
This commit is contained in:
@@ -38,76 +38,6 @@ $D.$用户
|
||||
|
||||
解:$D$。文件结构包括逻辑结构和物理结构。逻辑结构是用户组织数据的结构形式,数据组织形式来自需求,而物理结构是操作系统组织物理存储块的结构形式。因此说,逻辑文件的组织形式取决于用户,物理结构的选择取决于文件系统设计者针对硬件结构(如磁带介质很难实现链接结构和索引结构)所采取的策略(即$A$和$B$选项)。
|
||||
|
||||
### 文件共享
|
||||
|
||||
**例题** 若文件$f1$的硬链接为$f2$,两个进程分别打开$f1$和$f2$,获得对应的文件描述符为$fd1$和$fd2$,则下列叙述中正确的是()。
|
||||
|
||||
Ⅰ.$f1$和$f2$的读写指针位置保持相同
|
||||
|
||||
Ⅱ.$f1$和$f2$共享同一个内存索引结点
|
||||
|
||||
Ⅲ.$fd1$和$fd2$分别指向各自的用户打开文件表中的一项
|
||||
|
||||
$A.$仅Ⅲ
|
||||
|
||||
$B.$仅Ⅱ、Ⅲ
|
||||
|
||||
$c.$仅Ⅰ、Ⅱ
|
||||
|
||||
$D.$Ⅰ和Ⅱ、Ⅲ
|
||||
|
||||
解:$B$。硬链接指通过索引结点进行连接。一个文件在物理存储器上有一个索引结点号。存在多个文件名指向同一个索引结点的情况,Ⅱ正确。两个进程各自维护自己的文件描述符,Ⅲ正确,Ⅰ错误。
|
||||
|
||||
**例题** 若多个进程共享同一个文件$F$,则下列叙述中,正确的是()。
|
||||
|
||||
$A.$各进程只能用“读”方式打开文件$F$
|
||||
|
||||
$B.$在系统打开文件表中仅有一个表项包含$F$的属性
|
||||
|
||||
$C.$各进程的用户打开文件表中关于$F$的表项内容相同
|
||||
|
||||
$D.$进程关闭$F$时,系统删除$F$在系统打开文件表中的表项
|
||||
|
||||
解:$B$。多个进程可以同时以“读”或“写”的方式打开文件,操作系统并不保证写操作的互斥性,进程可通过系统调用对文件加锁,保证互斥写(读者-写者问题),$A$错误。整个系统只有一个系统打开文件表,同一个文件打开多次只需改变引用计数,$B$正确。用户进程的打开文件表关于同一个文件不一定相同,例如读写指针位置不一定相同,$C$错误。进程关闭文件时,文件的引用计数减$1$,引用计数变为$0$时才删除系统打开文件表中的表项,$D$错误。
|
||||
|
||||
### 文件保护
|
||||
|
||||
**例题** 对一个文件的访问,常由()共同限制。
|
||||
|
||||
$A.$用户访问权限和文件属性
|
||||
|
||||
$B.$用户访问权限和用户优先级
|
||||
|
||||
$C.$优先级和文件属性
|
||||
|
||||
$D.$文件属性和口令
|
||||
|
||||
解:$A$。对于这道题,只要能区分用户的访问权限和用户优先级,就能得到正确的答案。用户访问权限是指用户有没有权限访问该文件,而用户优先级是指在多个用户同时请求该文件时应该先满足谁。比如,图书馆的用户排队借一本书,某用户可能有更高的优先级,即他排在队伍的前面,但有可能轮到他时被告知他没有借阅那本书的权限。文件的属性包括保存在$FCB$中对文件访问的控制信息。
|
||||
|
||||
**例题** 加密保护和访问控制两种机制相比,()。
|
||||
|
||||
$A.$加密保护机制的灵活性更好
|
||||
|
||||
$B.$访问控制机制的安全性更高
|
||||
|
||||
$C.$加密保护机制必须由系统实现
|
||||
|
||||
$D.$访问控制机制必须由系统实现
|
||||
|
||||
解:$D$。相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性相对较高。若访问控制不由系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密方法将无法扩展。
|
||||
|
||||
**例题** 某文件系统中,针对每个文件,用户类别分为$4$类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为$5$种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为()。
|
||||
|
||||
$A.5$
|
||||
|
||||
$B.9$
|
||||
|
||||
$C.12$
|
||||
|
||||
$D.20$
|
||||
|
||||
解:$D$。同一类用户可能有所有可能的权限中的任一组合,所以可以把用户访问权限抽象为一个矩阵,行代表用户,列代表访问权限。这个矩阵有$4$行$5$列,$1$代表$true$,$0$代表$false$,所以需要$4\times5=20$位,选$D$。
|
||||
|
||||
### 文件物理结构
|
||||
|
||||
#### 链接分配
|
||||
@@ -202,6 +132,18 @@ $D.2^{64}$
|
||||
|
||||
解:$B$。此题容易按照$60$位来计算,任务$60$字节就可以表示出$2^{60}$种不同的名称组合。但是实际上只需要看索引节点长度,因为索引长度代表可支持的索引数量的数量大小,而不同的文件目录可以同名,所以只用看索引节点的个数就可以了,$4B=32bit$,所以就是$2^{32}$个。
|
||||
|
||||
**例题** 在文件的案引结点中存放直接索引指针$10$个,一级和二级索引指针各$1$个,磁盘块大小为$1KB$,每个索引指针占$4B$。若某文件的索引结点已在内存中,则把该文件偏移量(按字节编址)为$1234$和$307400$处所在的磁盘块读入内存,需访问的磁盘块个教分别是()。
|
||||
|
||||
$A.1,2$
|
||||
|
||||
$B.1,3$
|
||||
|
||||
$C.2,3$
|
||||
|
||||
$D.2,4$
|
||||
|
||||
解:$B$。一个磁盘可以存放$1KB/4=256$个指针,直接索引指针为$10$个,代表偏移量在$0\sim256\times10=2560$之间的都可以通过直接索引得到。 一级索引指针$1$个,$256\times256=65536$,在$2561\sim65536+2560=68096$之间需要访问两个磁盘块。 二级索引指针$1$个,所以在$68096\sim256^3+68096$之间需要访问三个磁盘块。
|
||||
|
||||
#### 混合分配
|
||||
|
||||
**例题** 有一个文件系统如图所示。图中的方框表示目录,圆圈表示普通文件。根目录常驻内存,目录文件组织成链接文件,不设$FCB$,普通文件组织成索引文件。目录表指示下一级文件名及其磁盘地址(各占$2B$,共$4B$)。下级文件是目录文件时,指示其第一个磁盘块地址。下级文件是普通文件时,指示其$FCB$的磁盘地址。每个目录的文件磁盘块的最后$4B$供拉链使用。下级文件在上级目录文件中的次序在图中为从左至右。每个磁盘块有$512B$,与普通文件的一页等长。
|
||||
@@ -280,6 +222,76 @@ $D.$利用顺序检索法查找完成后,即可得到文件的物理地址
|
||||
|
||||
所以$\dfrac{m+3}{2}<\dfrac{n+1}{2}$,即$m<n-2$。
|
||||
|
||||
### 文件保护
|
||||
|
||||
**例题** 对一个文件的访问,常由()共同限制。
|
||||
|
||||
$A.$用户访问权限和文件属性
|
||||
|
||||
$B.$用户访问权限和用户优先级
|
||||
|
||||
$C.$优先级和文件属性
|
||||
|
||||
$D.$文件属性和口令
|
||||
|
||||
解:$A$。对于这道题,只要能区分用户的访问权限和用户优先级,就能得到正确的答案。用户访问权限是指用户有没有权限访问该文件,而用户优先级是指在多个用户同时请求该文件时应该先满足谁。比如,图书馆的用户排队借一本书,某用户可能有更高的优先级,即他排在队伍的前面,但有可能轮到他时被告知他没有借阅那本书的权限。文件的属性包括保存在$FCB$中对文件访问的控制信息。
|
||||
|
||||
**例题** 加密保护和访问控制两种机制相比,()。
|
||||
|
||||
$A.$加密保护机制的灵活性更好
|
||||
|
||||
$B.$访问控制机制的安全性更高
|
||||
|
||||
$C.$加密保护机制必须由系统实现
|
||||
|
||||
$D.$访问控制机制必须由系统实现
|
||||
|
||||
解:$D$。相对于加密保护机制,访问控制机制的安全性较差。因为访问控制的级别和保护力度较小,因此它的灵活性相对较高。若访问控制不由系统实现,则系统本身的安全性就无法保证。加密机制若由系统实现,则加密方法将无法扩展。
|
||||
|
||||
**例题** 某文件系统中,针对每个文件,用户类别分为$4$类:安全管理员、文件主、文件主的伙伴、其他用户;访问权限分为$5$种:完全控制、执行、修改、读取、写入。若文件控制块中用二进制位串表示文件权限,为表示不同类别用户对一个文件的访问权限,则描述文件权限的位数至少应为()。
|
||||
|
||||
$A.5$
|
||||
|
||||
$B.9$
|
||||
|
||||
$C.12$
|
||||
|
||||
$D.20$
|
||||
|
||||
解:$D$。同一类用户可能有所有可能的权限中的任一组合,所以可以把用户访问权限抽象为一个矩阵,行代表用户,列代表访问权限。这个矩阵有$4$行$5$列,$1$代表$true$,$0$代表$false$,所以需要$4\times5=20$位,选$D$。
|
||||
|
||||
### 文件共享
|
||||
|
||||
**例题** 若文件$f1$的硬链接为$f2$,两个进程分别打开$f1$和$f2$,获得对应的文件描述符为$fd1$和$fd2$,则下列叙述中正确的是()。
|
||||
|
||||
Ⅰ.$f1$和$f2$的读写指针位置保持相同
|
||||
|
||||
Ⅱ.$f1$和$f2$共享同一个内存索引结点
|
||||
|
||||
Ⅲ.$fd1$和$fd2$分别指向各自的用户打开文件表中的一项
|
||||
|
||||
$A.$仅Ⅲ
|
||||
|
||||
$B.$仅Ⅱ、Ⅲ
|
||||
|
||||
$c.$仅Ⅰ、Ⅱ
|
||||
|
||||
$D.$Ⅰ和Ⅱ、Ⅲ
|
||||
|
||||
解:$B$。硬链接指通过索引结点进行连接。一个文件在物理存储器上有一个索引结点号。存在多个文件名指向同一个索引结点的情况,Ⅱ正确。两个进程各自维护自己的文件描述符,Ⅲ正确,Ⅰ错误。
|
||||
|
||||
**例题** 若多个进程共享同一个文件$F$,则下列叙述中,正确的是()。
|
||||
|
||||
$A.$各进程只能用“读”方式打开文件$F$
|
||||
|
||||
$B.$在系统打开文件表中仅有一个表项包含$F$的属性
|
||||
|
||||
$C.$各进程的用户打开文件表中关于$F$的表项内容相同
|
||||
|
||||
$D.$进程关闭$F$时,系统删除$F$在系统打开文件表中的表项
|
||||
|
||||
解:$B$。多个进程可以同时以“读”或“写”的方式打开文件,操作系统并不保证写操作的互斥性,进程可通过系统调用对文件加锁,保证互斥写(读者-写者问题),$A$错误。整个系统只有一个系统打开文件表,同一个文件打开多次只需改变引用计数,$B$正确。用户进程的打开文件表关于同一个文件不一定相同,例如读写指针位置不一定相同,$C$错误。进程关闭文件时,文件的引用计数减$1$,引用计数变为$0$时才删除系统打开文件表中的表项,$D$错误。
|
||||
|
||||
## 磁盘管理
|
||||
|
||||
### 磁盘操作时间
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
## 文件系统
|
||||
|
||||
文件系统不仅管理普通文件,对于$UNIX$系统所有设备都被视为特殊文件。
|
||||
|
||||
### 文件系统基础
|
||||
|
||||
#### 文件基本概念
|
||||
@@ -17,6 +19,8 @@
|
||||
|
||||
#### 文件基本属性
|
||||
|
||||
操作系统通过文件控制块$FCB$来保护文件元数据:
|
||||
|
||||
+ 文件名:由创建文件的用户决定文件名,主要是为了方便用户找到文件,同一目录下不允许有重名文件。
|
||||
+ 标识符:一个系统内的各文件标识符唯一,对用户来说毫无可读性,因此标识符只是操作系统用于区分各个文件的一种内部名称。
|
||||
+ 类型:指明文件的类型。
|
||||
@@ -27,6 +31,38 @@
|
||||
+ 文件所有者信息。
|
||||
+ 保护信息:对文件进行保护的访问控制信息。
|
||||
|
||||
#### 文件控制块
|
||||
|
||||
+ 目录本身就是一种有结构文件,由一条条记录组成。每条记录对应一个在该放在该目录下的文件。
|
||||
+ 目录文件中的一条记录就是一个**文件控制块**($FCB$)。$FCB$的有序集合就是文件目录,一个$FCB$就是一个文件目录项。
|
||||
+ $FCB$中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。最重要最基本的就是文件名和文件存放物理地址。
|
||||
+ $FCB$实现了文件名与文件之间的映射,使得用户(用户程序)可以实现按名存取。
|
||||
|
||||
#### 索引结点
|
||||
|
||||
+ 其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表“瘦身”来提升效率。
|
||||
+ 所以目录只包含文件名与索引结点指针,除了文件名之外的文件描述信息都存放在索引结点之中。索引结点是对$FCB$的改进。
|
||||
+ 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
|
||||
+ 假设一个$FCB$是$64B$,磁盘块的大小为$1KB$,则每个盘块中只能存放$16$个$FCB$。若一个文件目录中共有$640$个目录项,则共需要占用$640\div16=40$个盘块。因此按照某文件名检索该目录,使用折半查找平均需要查询$320$个目录项,平均需要启动磁盘$20$次(每次磁盘$I/O$读入一块)。
|
||||
+ 若使用索引结点机制,文件名占$14B$,索引结点指针站$2B$,则每个盘块可存放$64$个目录项,那么按文件名检索目录平均只需要读入$320\div64=5$个磁盘块。显然,这将大大提升文件检索速度。
|
||||
+ “磁盘索引结点”:存放在外存中的索引结点,每个文件有一个唯一的磁盘索引结点。
|
||||
+ 文件主标识符。
|
||||
+ 文件类型。
|
||||
+ 文件存取权限。
|
||||
+ 文件物理地址。
|
||||
+ 文件长度。
|
||||
+ 文件链接计数。
|
||||
+ 文件存取时间。
|
||||
+ “内存索引结点”:存放在内存中的索引结点,文件打开后将磁盘索引结点复制到内存中。
|
||||
+ 相比之下内存索引结点中需要增加一些信息:
|
||||
+ 索引结点编号。
|
||||
+ 状态。
|
||||
+ 访问计数。
|
||||
+ 逻辑设备号。
|
||||
+ 链接指针。
|
||||
|
||||
### 文件操作
|
||||
|
||||
#### 文件基本操作
|
||||
|
||||
+ 创建$create$。
|
||||
@@ -34,13 +70,14 @@
|
||||
2. 在目录中为新文件创建条目,记录文件名称、位置和其他信息。
|
||||
+ 删除$delete$:找到对应目录项,使其为空,并回收该文件所占存储空间。
|
||||
+ 截断:允许文件所有属性不变,删除文件内容,即设置长度归零并释放空间。
|
||||
+ 读文件$read$:执行一个系统调用,指明文件名和位置。系统维护一个读位置的指针,读时就更新读指针。
|
||||
+ 读文件$read$:执行一个系统调用,指明文件名和位置。系统维护一个读位置的指针,读时就更新读指针。需要的参数:
|
||||
1. 文件描述符。
|
||||
2. 缓冲区首址。
|
||||
3. 传输字节数。
|
||||
+ 写文件$write$:执行一个系统调用,指明文件名和内容。系统通过文件名搜索位置。系统需要为文件维护一个写位置的指针,当写时就更新写指针。
|
||||
+ 文件重定位(文件寻址):按条件搜索目录,将当前文件位置设置为给定值,不读写。
|
||||
|
||||
#### 文件打开关闭
|
||||
|
||||
打开文件:
|
||||
#### 文件打开
|
||||
|
||||
+ 在很多操作系统中,在对文件进行操作之前,要求用户先使用$open$系统调用“打开文件”,需要提供的几个主要参数:
|
||||
1. 文件存放路径。
|
||||
@@ -48,11 +85,11 @@
|
||||
3. 要对文件的操作类型(如:$r$只读;$rw$读写等)。
|
||||
+ 操作系统在处理$open$系统调用时,主要做了几件事:
|
||||
1. 根据文件存放路径找到相应的目录文件,从目录中找到文件名对应的的目录项,并检查该用户是否有指定的操作权限。
|
||||
2. 将目录项复制到内存中的“打开文件表”中。并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件。
|
||||
2. 将目录项$FCB$复制到内存中的“打开文件表”(活跃文件目录表)中。并将对应表目的编号返回给用户。之后用户使用打开文件表的编号来指明要操作的文件。
|
||||
+ 打开文件表分为两种:
|
||||
1. 系统打开文件表,只有一张,包括编号、文件名、外存地址、打开计数器(多少个进程打开了次文件)等。
|
||||
2. 每一个进程的打开文件表,包括编号、文件名、读写指针、访问权限、系统表索引号等。
|
||||
+ 打开文件时并不会把文件数据直接读入内存,而是提供索引号。“索引号”也称“文件描述符”。
|
||||
+ 打开文件时并不会把文件数据直接读入内存,而是提供索引号。“索引号”也称“文件描述符”或“文件句柄”。
|
||||
|
||||
每个打开文件都有如下关联信息:
|
||||
|
||||
@@ -63,7 +100,7 @@
|
||||
+ 系统范围的打开文件表,包括每个打开文件的$FCB$复制和其他信息。
|
||||
+ 单个进程的打开文件表,包括一个指向系统范围内已打开文件表中合适条目和其他信息的指针。
|
||||
|
||||
关闭文件:
|
||||
#### 文件关闭
|
||||
|
||||
+ 用户使用$close$系统调用“打开文件”,需要提供的几个主要参数:
|
||||
1. 文件存放路径。
|
||||
@@ -115,7 +152,7 @@
|
||||
|
||||
#### 索引文件
|
||||
|
||||
+ 为了解决顺序文件查找问题,建立一张索引表以加快文件检索速度。每条记录对应一个索引项。
|
||||
+ 为了解决顺序文件查找问题,建立一张索引表存放每个文件所存放的块盘地址,以加快文件检索速度。每条记录对应一个索引项。
|
||||
+ 记录可以离散存放,而索引表必须连续存放。
|
||||
+ 索引表包含索引号,长度,指针三个部分。其本身是定长长度的顺序文件,所以可以快速找到索引,通过指针随机访问。
|
||||
+ 可将关键字作为索引号内容,若按关键字顺序排列,则还可以支持按照关键字折半查找。
|
||||
@@ -139,151 +176,6 @@
|
||||
|
||||
散列文件有很高的存取速度,但是会引起冲突,即不同关键字的散列函数值相同。
|
||||
|
||||
### 文件目录
|
||||
|
||||
#### 文件控制块
|
||||
|
||||
+ 目录本身就是一种有结构文件,由一条条记录组成。每条记录对应一个在该放在该目录下的文件。
|
||||
+ 目录文件中的一条记录就是一个**文件控制块**($PCB$)。$FCB$的有序集合就是文件目录,一个$FCB$就是一个文件目录项。
|
||||
+ $FCB$中包含了文件的基本信息(文件名、物理地址、逻辑结构、物理结构等),存取控制信息(是否可读/可写、禁止访问的用户名单等),使用信息(如文件的建立时间、修改时间等)。最重要最基本的就是文件名和文件存放物理地址。
|
||||
+ $FCB$实现了文件名与文件之间的映射,使得用户(用户程序)可以实现按名存取。
|
||||
|
||||
#### 索引结点
|
||||
|
||||
+ 其实在查找各级目录的过程中只需要用到“文件名”这个信息,只有文件名匹配时,才需要读出文件的其他信息。因此可以考虑让目录表“瘦身”来提升效率。
|
||||
+ 所以目录只包含文件名与索引结点指针,除了文件名之外的文件描述信息都存放在索引结点之中。索引结点是对$FCB$的改进。
|
||||
+ 当找到文件名对应的目录项时,才需要将索引结点调入内存,索引结点中记录了文件的各种信息,包括文件在外存中的存放位置,根据“存放位置”即可找到文件。
|
||||
+ 假设一个$FCB$是$64B$,磁盘块的大小为$1KB$,则每个盘块中只能存放$16$个$FCB$。若一个文件目录中共有$640$个目录项,则共需要占用$640\div16=40$个盘块。因此按照某文件名检索该目录,使用折半查找平均需要查询$320$个目录项,平均需要启动磁盘$20$次(每次磁盘$I/O$读入一块)。
|
||||
+ 若使用索引结点机制,文件名占$14B$,索引结点指针站$2B$,则每个盘块可存放$64$个目录项,那么按文件名检索目录平均只需要读入$320\div64=5$个磁盘块。显然,这将大大提升文件检索速度。
|
||||
+ 存放在外存中的索引结点称为“磁盘索引结点”,当索引结点放入内存后称为“内存索引结点”。相比之下内存索引结点中需要增加一些信息,比如:文件是否被修改、此时有几个进程正在访问该文件等。
|
||||
|
||||
#### 目录结构
|
||||
|
||||
+ 单级目录结构:整个系统中只建立一张目录表,每个文件占一个目录项。
|
||||
+ 实现了“按名存取”,但是不允许文件重名。
|
||||
+ 在创建一个文件时,需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。
|
||||
+ 不适用于多用户操作系统。
|
||||
+ 两级目录结构:分为主文件目录($MFD$,$Master\,File\,Directory$)和用户文件目录($UFD$,$User\,Flie\,Directory$) 。
|
||||
+ 主文件目录记录用户名及相应用户文件目录的存放位置。
|
||||
+ 用户文件目录由该用户的文件$FCB$组成。
|
||||
+ 允许不同用户的文件重名。文件名虽然相司,但是对应的其实是不同的文件。
|
||||
+ 两级目录结构允许不同用户的文件重名,也可以在目录上实现实现访问限制(检查此时登录的用户名是否匹配)。
|
||||
+ 两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类。
|
||||
+ 多级目录结构(树形目录结构):
|
||||
+ 不同目录下的文件可以重名。
|
||||
+ 用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。
|
||||
+ 从根目录出发的路径称为绝对路径。
|
||||
+ 很多时候,用户会连续访问同一目录内的多个文件,显然,每次都从根目录开始查找,是很低效的。因此可以设置一个“当前目录”出发的相对路径。
|
||||
+ 树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。但是,树形结构不便于实现文件的共享,且查找文件需要逐级访问影响速度。为此,提出了“无环图目录结构”。
|
||||
+ 无环图目录结构:
|
||||
+ 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图。可以更方便地实现多个用户间的文件共享。
|
||||
+ 可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。
|
||||
+ 需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的$FCB$、并使共享计数器减$1$,并不会直接删除共享结点。
|
||||
+ 共享文件不同于复制文件。在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。
|
||||
+ 实现了文件共享,但是使得文件管理更复杂。
|
||||
|
||||
### 文件共享
|
||||
|
||||
多个用户共享同一个文件,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
|
||||
|
||||
文件共享方式分为:
|
||||
|
||||
+ 基于索引结点的共享方式:硬链接。
|
||||
+ 基于符号链的共享方式:软链接。
|
||||
|
||||
#### 硬链接
|
||||
|
||||
+ 在文件目录中提到,索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。
|
||||
+ 索引结点中设置一个链接计数变量$count$,用于表示链接到本索引结点上的用户目录项数。
|
||||
+ 不同目录下对于同一个文件的索引结点的命名可以是不同的。
|
||||
+ 若某个用户决定“删除”该文件,则只是要把用户目录中与该文件对应的目录项删除,且索引结点的$count$值减$1$。
|
||||
+ 若$count>0$,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
|
||||
+ 若$count=0$,则系统需要删除文件。
|
||||
|
||||
#### 软链接
|
||||
|
||||
+ 软链接就是共享时建立一个$Link$类型的文件,文件记录了要共享的文件的存放路径或任意一条硬链接路径,类似$Windows$系统的快捷方式。
|
||||
+ 文件拥有者才拥有指向其索引结点的指针,而共享该文件的其他用户只有该文件的路径名。
|
||||
+ 当访问共享文件时,先判断这个文件属于$Link$类型文件,然后根据其中记录的路径层层查找路径找到索引结点。
|
||||
+ 优点:
|
||||
+ 网络共享只用提供文件所在机器的网络地址和文件路径。
|
||||
+ 若共享文件被删除了,则软链接失效。删除软链接则无影响。
|
||||
+ 缺点:
|
||||
+ 当共享文件删除,而其他用户新建一个相同路径的文件则原链接指向的是新文件而不是原文件。
|
||||
+ 因为软链接访问共享文件时需要查询多层目录,所以有多层$I/O$操作,从而软链接访问速度慢于硬链接。
|
||||
|
||||
硬链接和软链接都是静态共享方式,都存在一个共同的问题,每个共享文件都有几个文件名,从而每增加一条文件名,当遍历整个文件系统时会多次遍历到该共享文件。
|
||||
|
||||
多个进程同时对同一个文件操作称为动态共享。
|
||||
|
||||
### 文件保护
|
||||
|
||||
口令保护和加密保护是为了防止用户文件被他人存取,而访问控制用于控制用户对文件的访问方式。
|
||||
|
||||
#### 口令保护
|
||||
|
||||
+ 为文件设置一个“口令”,用户请求访问该文件时必须提供“口令”。
|
||||
+ 口令一般存放在文件对应的$FCB$或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与$FCB$中存储的口令进行对比,如果正确,则允许该用户访问文件。
|
||||
+ 优点:保存口令的空间开销不多,验证口令的时间开销也很小。
|
||||
+ 缺点:正确的“口令”存放在系统内部,不够安全。
|
||||
|
||||
#### 加密保护
|
||||
|
||||
+ 使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。
|
||||
+ 系统并不保存原始数据,而是加密过的数据。
|
||||
+ 加密方式有异或加密等。
|
||||
+ 优点:保密性强,不需要在系统中存储“密码”。
|
||||
+ 缺点:编码/译码,或者说加密/解密要花费一定时间。
|
||||
|
||||
#### 访问控制
|
||||
|
||||
+ 在每个文件的$FCB$(或索引结点)中增加一个访问控制列表($AccessControl\,List$,$ACL$),该表中记录了各个用户可以对该文件执行哪些操作。
|
||||
+ 访问类型包括:
|
||||
+ 读:从文件中读数据。
|
||||
+ 写:向文件中写数据。
|
||||
+ 执行:将文件装入内存并执行。
|
||||
+ 添加:将新信息添加到文件结尾部。
|
||||
+ 删除:删除文件,释放空间。
|
||||
+ 列表清单:列出文件名和文件属性。
|
||||
+ 优点:可以使用复杂的访问方法。
|
||||
+ 缺点:长度无法余集且可能导致复杂的空间管理。
|
||||
+ 有的计算机可能会有很多个用户,因此访问控制列表可能会很大,可以用精简的访问列表解决这个问题。
|
||||
+ 精简的访问列表:以“组”为单位,标记各“组”用户可以对文件执行哪些操作。当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。所以系统也需要管理分组的信息。
|
||||
+ 用户类型:
|
||||
+ 拥有者:创建文件用户。
|
||||
+ 组:一组需要共享文件且拥有类似访问的用户。
|
||||
+ 其他:系统内其他所有用户。
|
||||
+ 若想要让某个用户能够获取某种权限,需要把该用户放入有该权限的分组即可。
|
||||
+ 如果对某个目录进行了访问权限的控制,那也要对目录下的所有文件进行相同的访问权限控制。
|
||||
|
||||
### 文件系统层次结构
|
||||
|
||||
1. 设备。
|
||||
2. 相关模块
|
||||
+ 辅助分配模块:管理辅存空间。即负责分配和回收存储空间。
|
||||
+ 设备管理模块:管理设备。直接与硬件交互,负责和硬件直接相关的一些管理工作。如分配设备、分配设备缓冲区、磁盘调度、启动设备、释放设备等。
|
||||
3. 物理文件系统:物理地址转换。这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址。
|
||||
4. 逻辑文件系统与文件信息缓冲区:逻辑地址转换。用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址。文件信息缓冲区用来在调入索引表到内存时暂存索引表的内容。
|
||||
5. 存取控制模块:文件保护。为了保证文件数据的安全,还需要验证用户是否有访问权限。
|
||||
6. 文件目录系统:管理文件目录。用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的$FCB$或索引结点。所有和目录、目录项相关的管理工作都在本层完成,如管理活跃的文件目录表、管理打开文件表等。
|
||||
7. 用户接口:向用户提供文件目录相关功能接口。这层就是用于处理用户发出的系统调用请求($read$、$write$、$open$、$close$等系统调用)。
|
||||
8. 用户/应用程序。
|
||||
|
||||
假设某用户请求删除文件“$D:$/工作目录/学生信息.$xlsx$”的最后$100$条记录:
|
||||
|
||||
1. 用户需要通过操作系统提供的接口发出上述请求——用户接口。
|
||||
2. 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项――文件目录系统
|
||||
3. 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限―-存取控制模块(存取控制验证层)。
|
||||
4. 验证了用户的访问权限之后,需要把用户提供的“记录号”转变为对应的逻辑地址――逻辑文件系统与文件信息缓冲区。
|
||||
5. 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址――物理文件系统。
|
||||
6. 要删除这条记录,必定要对磁盘设备发出请求――设备管理程序模块。
|
||||
7. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收――辅助分配模块。
|
||||
|
||||
目录实现:
|
||||
|
||||
+ 线性列表。
|
||||
+ 哈希表。
|
||||
|
||||
### 文件物理结构
|
||||
|
||||
文件物理结构即文件分配方式,是对非空间磁盘块的管理。
|
||||
@@ -361,16 +253,189 @@
|
||||
+ 采用$K$层索引结构,且顶级索引表未调入内存,则访问一个数据块只需要$K+1$次读磁盘操作。
|
||||
+ 缺点:即使是小文件页需要$K+1$次读磁盘操作。
|
||||
+ 混合索引:
|
||||
+ 多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)。
|
||||
+ 多种索引分配方式的结合。例如,一个文件的顶级索引表中,既包含直接地址索引(直接指向数据块),又包含一级间接索引(指向单层索引表)、还包含两级间接索引(指向两层索引表)等。
|
||||
+ 优点:对于小文件,只需较少的读磁盘次数就可以访问目标数据块。(一般计算机中小文件更多)。
|
||||
|
||||
如一共十三个地址项,前十个为直接地址,后面三个为一级间址、二级间址、三级间址。每个盘块的大小为$4KB$,索引块大小为$4B$。
|
||||
|
||||
所以文件不大于$4\times10=40KB$时可以直接读出。一个一级间址块中能包含$4KB\div4B=1K=2^{10}$个索引,所以能索引出$2^{10}\times4KB=4MB$的空间。同理,若文件长度大于$4MB+40KB$时可以使用二级间址块,索引出$4GB$的空间,三级间址能索引出$4TB$的空间。
|
||||
|
||||
|访问第n条记录|优点|缺点
|
||||
:----:|:----------:|:---:|:--:
|
||||
连续分配|需访问磁盘1次|顺序存取时速度快,文件定长时可根据文件起始地址及记录长度进行随机访问|文件存储要求连续的存储空间,会产生碎片,不利于文件的动态扩充
|
||||
链接分配|需访问磁盘n次|可解决外存的碎片问题,提高外存空问的利用率,动态增长较方便|只能按照文件的指针链顺序访问,查找效率低,指针信息存放消耗外存空间
|
||||
索引分配|m级需访问磁盘m+1次|可以随机访问,文件易于增删|索引表增加存储空间的开销,索引表的查找策略对文件系统效率影响较大
|
||||
|
||||
### 文件存储空间管理
|
||||
### 文件保护
|
||||
|
||||
口令保护和加密保护是为了防止用户文件被他人存取,而访问控制用于控制用户对文件的访问方式。
|
||||
|
||||
#### 口令保护
|
||||
|
||||
+ 为文件设置一个“口令”,用户请求访问该文件时必须提供“口令”。
|
||||
+ 口令一般存放在文件对应的$FCB$或索引结点中。用户访问文件前需要先输入“口令”,操作系统会将用户提供的口令与$FCB$中存储的口令进行对比,如果正确,则允许该用户访问文件。
|
||||
+ 优点:保存口令的空间开销不多,验证口令的时间开销也很小。
|
||||
+ 缺点:正确的“口令”存放在系统内部,不够安全。
|
||||
|
||||
#### 加密保护
|
||||
|
||||
+ 使用某个“密码”对文件进行加密,在访问文件时需要提供正确的“密码”才能对文件进行正确的解密。
|
||||
+ 系统并不保存原始数据,而是加密过的数据。
|
||||
+ 加密方式有异或加密等。
|
||||
+ 优点:保密性强,不需要在系统中存储“密码”。
|
||||
+ 缺点:编码/译码,或者说加密/解密要花费一定时间。
|
||||
|
||||
#### 访问控制
|
||||
|
||||
+ 在每个文件的$FCB$(或索引结点)中增加一个访问控制列表($AccessControl\,List$,$ACL$),该表中记录了各个用户可以对该文件执行哪些操作。
|
||||
+ 访问类型包括:
|
||||
+ 读:从文件中读数据。
|
||||
+ 写:向文件中写数据。
|
||||
+ 执行:将文件装入内存并执行。
|
||||
+ 添加:将新信息添加到文件结尾部。
|
||||
+ 删除:删除文件,释放空间。
|
||||
+ 列表清单:列出文件名和文件属性。
|
||||
+ 优点:可以使用复杂的访问方法。
|
||||
+ 缺点:长度无法余集且可能导致复杂的空间管理。
|
||||
+ 有的计算机可能会有很多个用户,因此访问控制列表可能会很大,可以用精简的访问列表解决这个问题。
|
||||
+ 精简的访问列表:以“组”为单位,标记各“组”用户可以对文件执行哪些操作。当某用户想要访问文件时,系统会检查该用户所属的分组是否有相应的访问权限。所以系统也需要管理分组的信息。
|
||||
+ 用户类型:
|
||||
+ 拥有者:创建文件用户。
|
||||
+ 组:一组需要共享文件且拥有类似访问的用户。
|
||||
+ 其他:系统内其他所有用户。
|
||||
+ 若想要让某个用户能够获取某种权限,需要把该用户放入有该权限的分组即可。
|
||||
+ 如果对某个目录进行了访问权限的控制,那也要对目录下的所有文件进行相同的访问权限控制。
|
||||
|
||||
#### Linux文件权限
|
||||
|
||||
命令格式`chmod 权限 文件名`。
|
||||
|
||||
一共九位,从左至右分为三组,$1-3$位数字代表文件所有者的权限,$4-6$位数字代表同组用户的权限,$7-9$数字代表其他用户的权限。每一组的第一位表示可读,第二位表示可写,第三位表示可执行。
|
||||
|
||||
如$755$,第一组的$7=4+2+1$表示所有者可读可写可执行,$5=4+0+1$表示同组用户和其他用户可读可执行但是不可写。
|
||||
|
||||
## 目录系统
|
||||
|
||||
### 目录结构
|
||||
|
||||
#### 单级目录结构
|
||||
|
||||
整个系统中只建立一张目录表,每个文件占一个目录项。
|
||||
|
||||
+ 实现了“按名存取”,但是不允许文件重名。
|
||||
+ 在创建一个文件时,需要先检查目录表中有没有重名文件,确定不重名后才能允许建立文件,并将新文件对应的目录项插入目录表中。
|
||||
+ 不适用于多用户操作系统。
|
||||
|
||||
#### 两级目录结构
|
||||
|
||||
分为主文件目录($MFD$,$Master\,File\,Directory$)和用户文件目录($UFD$,$User\,Flie\,Directory$):
|
||||
|
||||
+ 主文件目录记录用户名及相应用户文件目录的存放位置。
|
||||
+ 用户文件目录由该用户的文件$FCB$组成。
|
||||
+ 允许不同用户的文件重名。文件名虽然相同,但是对应的其实是不同的文件。
|
||||
+ 两级目录结构允许不同用户的文件重名,也可以在目录上实现实现访问限制(检查此时登录的用户名是否匹配)。
|
||||
+ 两级目录结构依然缺乏灵活性,用户不能对自己的文件进行分类。
|
||||
|
||||
#### 多级目录结构
|
||||
|
||||
即树形目录结构:
|
||||
|
||||
+ 不同目录下的文件可以重名。
|
||||
+ 用户(或用户进程)要访问某个文件时要用文件路径名标识文件,文件路径名是个字符串。各级目录之间用“/”隔开。
|
||||
+ 从根目录出发的路径称为绝对路径。
|
||||
+ 很多时候,用户会连续访问同一目录内的多个文件,显然,每次都从根目录开始查找,是很低效的。因此可以设置一个“当前目录”出发的相对路径。
|
||||
+ 树形目录结构可以很方便地对文件进行分类,层次结构清晰,也能够更有效地进行文件的管理和保护。
|
||||
+ 但是,树形结构不便于实现文件的共享,且查找文件需要逐级访问影响速度。为此,提出了“无环图目录结构”。
|
||||
|
||||
#### 无环图目录结构
|
||||
|
||||
+ 在树形目录结构的基础上,增加一些指向同一节点的有向边,使整个目录成为一个有向无环图。可以更方便地实现多个用户间的文件共享。
|
||||
+ 可以用不同的文件名指向同一个文件,甚至可以指向同一个目录(共享同一目录下的所有内容)。
|
||||
+ 需要为每个共享结点设置一个共享计数器,用于记录此时有多少个地方在共享该结点。用户提出删除结点的请求时,只是删除该用户的$FCB$、并使共享计数器减$1$,并不会直接删除共享结点。
|
||||
+ 共享文件不同于复制文件。在共享文件中,由于各用户指向的是同一个文件,因此只要其中一个用户修改了文件数据,那么所有用户都可以看到文件数据的变化。
|
||||
+ 实现了文件共享,但是使得文件管理更复杂。
|
||||
|
||||
### 目录操作
|
||||
|
||||
#### 目录基本操作
|
||||
|
||||
+ 搜索:首先要找到对应目录项。
|
||||
+ 创建文件。
|
||||
+ 删除文件。
|
||||
+ 创建目录。
|
||||
+ 删除目录:包括不删除非空目录和可删除非空目录两种。
|
||||
+ 移动目录。
|
||||
+ 显示目录。
|
||||
+ 修改目录。
|
||||
|
||||
#### 目录实现
|
||||
|
||||
+ 线性列表。
|
||||
+ 哈希表。
|
||||
|
||||
### 文件目录共享
|
||||
|
||||
多个用户共享同一个文件或目录,意味着系统中只有“一份”文件数据。并且只要某个用户修改了该文件的数据,其他用户也可以看到文件数据的变化。
|
||||
|
||||
文件共享方式分为:
|
||||
|
||||
+ 基于索引结点的共享方式:硬链接。
|
||||
+ 基于符号链的共享方式:软链接。
|
||||
|
||||
#### 硬链接
|
||||
|
||||
+ 在文件目录中提到,索引结点,是一种文件目录瘦身策略。由于检索文件时只需用到文件名,因此可以将除了文件名之外的其他信息放到索引结点中。这样目录项就只需要包含文件名、索引结点指针。
|
||||
+ 索引结点中设置一个链接计数变量$count$,用于表示链接到本索引结点上的用户目录项数。
|
||||
+ 不同目录下对于同一个文件的索引结点的命名可以是不同的。
|
||||
|
||||
若某个用户决定“删除”该文件:
|
||||
|
||||
+ 则只是要把用户目录中与该文件对应的目录项删除,且索引结点的$count$值减$1$。
|
||||
+ 若$count>0$,说明还有别的用户要使用该文件,暂时不能把文件数据删除,否则会导致指针悬空。
|
||||
+ 若$count=0$,则系统需要删除文件。
|
||||
|
||||
#### 软链接
|
||||
|
||||
+ 软链接就是共享时建立一个$Link$类型的文件,文件记录了要共享的文件的存放路径或任意一条硬链接路径,类似$Windows$系统的快捷方式。
|
||||
+ 文件拥有者才拥有指向其索引结点的指针,而共享该文件的其他用户只有该文件的路径名。
|
||||
+ 当访问共享文件时,先判断这个文件属于$Link$类型文件,然后根据其中记录的路径层层查找路径找到索引结点。
|
||||
+ 优点:
|
||||
+ 网络共享只用提供文件所在机器的网络地址和文件路径。
|
||||
+ 若共享文件被删除了,则软链接失效。删除软链接则无影响。
|
||||
+ 缺点:
|
||||
+ 当共享文件删除,而其他用户新建一个相同路径的文件则原链接指向的是新文件而不是原文件。
|
||||
+ 因为软链接访问共享文件时需要查询多层目录,所以有多层$I/O$操作,从而软链接访问速度慢于硬链接。
|
||||
|
||||
硬链接和软链接都是静态共享方式,都存在一个共同的问题,每个共享文件都有几个文件名,从而每增加一条文件名,当遍历整个文件系统时会多次遍历到该共享文件。
|
||||
|
||||
多个进程同时对同一个文件操作称为动态共享。
|
||||
|
||||
## 磁盘系统
|
||||
|
||||
### 系统层次结构
|
||||
|
||||
1. 设备。
|
||||
2. 相关模块
|
||||
+ 辅助分配模块:管理辅存空间。即负责分配和回收存储空间。
|
||||
+ 设备管理模块:管理设备。直接与硬件交互,负责和硬件直接相关的一些管理工作。如分配设备、分配设备缓冲区、磁盘调度、启动设备、释放设备等。
|
||||
3. 物理文件系统:物理地址转换。这一层需要把上一层提供的文件逻辑地址转换为实际的物理地址。
|
||||
4. 逻辑文件系统与文件信息缓冲区:逻辑地址转换。用户指明想要访问文件记录号,这一层需要将记录号转换为对应的逻辑地址。文件信息缓冲区用来在调入索引表到内存时暂存索引表的内容。
|
||||
5. 存取控制模块:文件保护。为了保证文件数据的安全,还需要验证用户是否有访问权限。
|
||||
6. 文件目录系统:管理文件目录。用户是通过文件路径来访问文件的,因此这一层需要根据用户给出的文件路径找到相应的$FCB$或索引结点。所有和目录、目录项相关的管理工作都在本层完成,如管理活跃的文件目录表、管理打开文件表等。
|
||||
7. 用户接口:向用户提供文件目录相关功能接口。这层就是用于处理用户发出的系统调用请求($read$、$write$、$open$、$close$等系统调用)。
|
||||
8. 用户/应用程序。
|
||||
|
||||
假设某用户请求删除文件“$D:$/工作目录/学生信息.$xlsx$”的最后$100$条记录:
|
||||
|
||||
1. 用户需要通过操作系统提供的接口发出上述请求——用户接口。
|
||||
2. 由于用户提供的是文件的存放路径,因此需要操作系统一层一层地查找目录,找到对应的目录项――文件目录系统
|
||||
3. 不同的用户对文件有不同的操作权限,因此为了保证安全,需要检查用户是否有访问权限―-存取控制模块(存取控制验证层)。
|
||||
4. 验证了用户的访问权限之后,需要把用户提供的“记录号”转变为对应的逻辑地址――逻辑文件系统与文件信息缓冲区。
|
||||
5. 知道了目标记录对应的逻辑地址后,还需要转换成实际的物理地址――物理文件系统。
|
||||
6. 要删除这条记录,必定要对磁盘设备发出请求――设备管理程序模块。
|
||||
7. 删除这些记录后,会有一些盘块空闲,因此要将这些空闲盘块回收――辅助分配模块。
|
||||
|
||||
### 存储空间管理
|
||||
|
||||
即对空闲空间的管理。
|
||||
|
||||
@@ -438,8 +503,6 @@
|
||||
1. 如果块内回收后余留,则修改数据。
|
||||
2. 若回收数量大于等于余下,需要将超级块中的数据复制到新回收的块中,并修改超级块的内容,让新回收的块成为第一个分组。
|
||||
|
||||
## 磁盘管理
|
||||
|
||||
### 磁盘结构
|
||||
|
||||
+ 磁盘由空气过滤片、主轴、音圈马达、永磁铁、磁盘、磁头、磁头臂组成。
|
||||
|
||||
Reference in New Issue
Block a user