from《计算机操作系统》第四版 (笔记完结撒花~考到第八章,以后整理其他的章节吧)
逢考必过!!!
8.1 外存的组织方式
8.1.1 连续组织方式
文件目录【file、start、length】
连续分配的主要优点如下:
(1) 顺序访问容易。
(2) 顺序访问速度快。
连续分配的主要缺点如下:
(1) 要求有连续的存储空间。
(2) 必须事先知道文件的长度。
(3) 不能灵活地删除和插入记录。
(4) 对于动态增长的文件事先难以知道文件的最终大小。
8.1.2 链接组织方式
离散分配。为文件分配多个不连续的盘块,再通过每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,由此形成的物理文件称为链接文件。
1. 隐式链接
文件目录【file、start、end】,第n个盘块号记录n+1个盘块号,最后一个盘块指向-1结束且与end相比判断是否正常结束。理论上,仅需要第一个盘块号。需要n次访问IO读到内存中,效率低。
为提高检索速度和减少指针所占用的存储空间,可将几个盘块组成一个簇。在进行盘块分配或接收文件中每个元素时,以簇为单位进行。
2. 显示链接
把用于链接文件各个物理块的指针显式地存放在内存的一张链接表中。
文件分配表FAT记录盘块的情况,由所有磁盘的盘块号构成,在FAT中第n个盘块号记录n+1个盘块号
文件目录中有一个头指针,指向第一个盘块
FAT一次读到内存中,无需多次读盘,链接可见。
8.1.3 FAT技术(考试计算fat位数、fat表大小、实际盘块大小)
FAT引入“卷”,支持将一个物理磁盘分成四个逻辑磁盘,每个逻辑磁盘就是一个卷。每个卷都是一个能够被单独格式化和使用的逻辑单元,供文件系统分配空间时使用。一个卷包含了文件系统信息、一组文件、空闲空间。每个卷都专门划出一个单独区域来存放自己的目录和FAT表,以及自己的逻辑驱动器字母。
FAT文件系统中的扇区大小一般为512Byte
1. FAT12
1)早期的FAT12文件系统
FAT的每个表项中存放下一个盘块号,实际上是用于盘块之间的链接的指针,通过它可以将一个文件的所有盘块链接起来,而将文件的第一个盘块号放在自己的FCB中。
对于1.2M的软盘,每个盘块大小为512B(0.5KB),在每个FAT中共含有2.4K(1.2M=1.2*1024KB, 1024KB/512B = 2.4K)个表项,每个表项占12位,故FAT占3.6K(1B=8bit,2.4K * (12bit/8bit) = 3.6K)的存储空间
最多有4096(2^12)个表项
2)以簇为单位的FAT12文件系统
簇是一组相邻的扇区,在FAT中它是作为一个虚拟扇区。
在相同的磁盘容量下,FAT表的项数与簇的大小成反比。
2. FAT16
具有16位表宽的FAT表
最大表项数增至65536(216)个。此时可以将一个磁盘分区分为65536个簇。每个簇可以有的盘块数为4、6、…64,最大分区空间为21664512 = 2048MB。当磁盘分区要求为8GB(8GB=82^30)时,每个簇的大小达到128KB(8GB / 2^16 = 8 * 2^30 / 2^16 = 8 * 2^14 = 8 * 2^4 * 2^10 = 816KB=128KB)
3. FAT32
每一簇在FAT表的表项占据4字节,每个簇固定为4KB,即每簇为8个(4KB / 512B = 4KB/0.5KB = 8)盘块。最大磁盘空间大到4KB*2^32=2TB。
如果两个磁盘容量为2GB,采用FAT16,簇大小=2*(2^30)B / 2^16 = 22^14 = (224)*210 = 32KB,若采用FAT32,簇大小固定为4KB。
FAT32卷规定至少有65537个簇,因此不支持容量小于512MB的分区(4KB X 65527 = 512MB),对于小分区,必须使用FAT16或FAT12.
Fat文件系统,至今仍在使用但很少用。
盘块越多,FAT表越大
Fat12 ⇒ 可以表示2^12=4K=4096个地址、Fat16、Fat32
扇区:最小的扇区512B
簇/盘块n:多个扇区合并,每次读/写n个大小
Fat表大小 = fat位数(宽) × 盘块大小(长)
不能高效的直接存取,磁盘浪费空间大
分区大小(M)=簇的个数(cluster)*簇的大小(sector/cluster簇所占扇区个数)*扇区大小(2-11M)。簇的个数是不变的(和分区表的位数有关,eg:FAT12为212=4096,FAT16为2^16=65536……),扇区大小一般为512Byte,因此要增大分区大小,只能通过增大簇的大小来实现。
8.1.4 NTFS的文件组织方式(了解)
1. NTFS新特征
64位磁盘地址
长文件名:文件名255个字符,全路径名32767个字符
系统容错功能*
能保证系统中的数据一致性*
文件加密、文件压缩功能
2. 磁盘组织
以簇为磁盘空间分配和回收的基本单位。一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原因。
采用逻辑簇号(LCN)和虚拟簇号(VCN)对簇定位。一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原因。而虚拟簇号则是将特定文件的簇从头到尾进行编号,这样做的原因是方便系统对文件中的数据进行引用,VCN并不要求在物理上是连续的,要确定VCN的磁盘上的定位需先将其转换为LCN。
3. 文件的组织
卷:NTFS分区也被称为NTFS卷,卷上簇的大小,又称为卷因子,其大小是用户在创建NTFS卷时确定的。
主控文件表MFT:NTFS中,卷中所有存放的数据均在一个叫
M
F
T
的
文
件
中
,
叫
主
文
件
表
(
M
a
s
t
e
r
F
i
l
e
T
a
b
l
e
)
。
而
MFT的文件中,叫主文件表(Master File Table)。而
MFT的文件中,叫主文件表(MasterFileTable)。而MFT则由文件记录(File Record)数组构成。File Record的大小一般是固定的,通常情况下均为1KB,File Record在
M
F
T
文
件
中
物
理
上
是
连
续
的
,
且
从
0
开
始
编
号
。
MFT文件中物理上是连续的,且从0开始编号。
MFT文件中物理上是连续的,且从0开始编号。MFT仅供File System本身组织、架构文件系统使用,这在NTFS中称为元数据(Metadata)。
元数据:简称为“元文件”,其中包括了用于文件定位和恢复数据结构、引导程序数据及整个卷的分配位图等信息。NTFS文件系统将这些数据都当做文件进行管理,这些文件用户是不能访问的,它们的文件名的第一个字符都是“
”
,
表
示
该
文
件
是
隐
藏
的
。
在
N
T
F
S
文
件
系
统
中
这
样
的
文
件
主
要
有
16
个
,
包
括
M
F
T
本
身
(
”,表示该文件是隐藏的。在NTFS文件系统中这样的文件主要有16个,包括MFT本身(
”,表示该文件是隐藏的。在NTFS文件系统中这样的文件主要有16个,包括MFT本身(MFT)、MFT镜像、日志文件、卷文件、属性定义表、根目录、位图文件、引导文件、坏簇文件、安全文件、大写文件、扩展元数据文件、重解析点文件、变更日志文件、配额管理文件、对象ID文件等,这16个元数据文件总是占据着MFT的前16项纪录,在16项以后就是用户建立的文件和文件夹的记录了。
8.1.5 索引组织方式
1. 单级索引组织方式
引入一个盘块(索引盘块)记录所有实际盘块地址,至少读2次磁盘。第一次读索引盘块,第二次读实际盘块。
2. 多级索引组织方式
将索引表放在另一个索引表中
如果每个盘块大小为1KB,每个盘块号占4个字节,则在一个索引块中可存放256(1024B/4B=256)个盘块号。两级索引时,最多可包含的存放文件的盘块的盘块号总数N=256256=64K个。即允许文件的最大长度为64KB。若盘块的大小为4KB,则单级索引时允许的最大文件长度为4MB(4KB/4B=1K个盘块号,1K1KB=4MB),采用2级索引,最大文件长度为4GB(1K*1K= 1M个盘块号,1M * 4KB = 4GB)
3. 增量式索引组织方式
混合索引方式,最多三级索引,最大达到4TB。
8.2 文件存储空间的管理
磁盘分配表DAT,用于记住可供分配的存储空间情况。提供对盘块进行分配和回收的手段。存储空间的基本分配单位都是磁盘块而非字节。
8.2.1 空闲表法和空闲链表法
1. 空闲表法
1)空闲表
系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息
- 存储空间的分配与回收。
空闲盘区的分配与内存的动态分配类似,同样是采用首次适应算法、循环首次适应算法等。例如,在系统为某新创建的文件分配空闲盘块时,先顺序地检索空闲表的各表项, 直至找到第一个其大小能满足要求的空闲区,再将该盘区分配给用户(进程),同时修改空闲表。系统在对用户所释放的存储空间进行回收时,也采取类似于内存回收的方法, 即要考虑回收区是否与空闲表中插入点的前区和后区相邻接,对相邻接者应予以合并。
2. 空闲链表法
将所有空闲盘区拉成一条空闲链。
(1) 空闲盘块链
(2) 空闲盘区链
8.2.2 位示图法
1. 位示图
用二维表表示,map[m,n]
2. 盘块的分配
(1) 顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位(“0”表示空闲时)。
(2) 将所找到的一个或一组二进制位, 转换成与之相应的盘块号。假定找到的其值为“0”的二进制位,位于位示的第i行、第j列,则其相应的盘块号应按下式计算:b=n(i-1)+j
式中, n代表每行的位数。
(3) 修改位示图, 令map[i,j]=1。
3. 盘块的回收
(1) 将回收盘块的盘块号转换成位示图中的行号和列号。 转换公式为:
i=(b-1)DIV n+1
j=(b-1)MOD n+1
(2) 修改位示图。 令map [i,j]=1。
8.2.3 成组链接法
离散分配
1. 空闲盘块的组织
(1) 空闲盘块号栈
存放当前可用的一组空闲盘块的盘块号(最多含100个号),以及栈中尚有的盘块(号)数N。
空闲盘块栈满了还要回收时,要把现有的盘块形成一个新节点放在栈中,将盘块号作为栈底。
2. 空闲盘块的分配与回收
当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。该过程首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。若该盘块号已是栈底, 即S.free(0),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此, 须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。 然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1并返回。
在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1操作。当栈中空闲盘块号数目已达100时, 表示栈已满,便将现有栈中的100个盘块号, 记入新回收的盘块中,再将其盘块号作为新栈底。
8.3 提高磁盘I/O速度的途径(了解)
对于文件的访问速度:
- 减少对目录的查询时间
- 提高对文件的访问速度
- 提高磁盘的I/O速度
8.3.1 磁盘高速缓存
- 数据交付方式
- 数据交付
- 指针交付
- 置换算法
- 周期性写磁盘
8.3.2 提高磁盘I/O速度的其它方法
- 提前读
- 延迟写
- 优化物理块的分布
- 虚拟盘(RAM盘)
8.3.3 廉价磁盘冗余阵列RAID
1. 并行交叉存取
两个磁盘同时读写
2. RAID的分级
3. RAID的优点
8.4 提高磁盘可靠性的技术SFT
容错技术是通过增加冗余的磁盘驱动器、磁盘控制器等方法来提高磁盘系统可靠性
8.4.1. 第一级容错技术SFT-1——低级磁盘容错技术
防止因磁盘表面缺陷所造成的数据丢失
- 双份目录和双份文件分配表
- 热修复重定向和写后读校验
8.4.2. 第二级容错技术SFT-2——中级磁盘容错技术
防止由磁盘驱动器和磁盘控制器故障所导致的系统不能正常工作
-
磁盘镜像
-
磁盘双工
8.4.3 基于集群技术的容错功能
集群:指由一组互连的自主计算机组成统一的计算机系统
- 双机热备份模式
- 双机互为备份模式
-
公用磁盘模式
为了减少信息复制的开销,可将多台计算机连接到一台公共的磁盘系统上。
8.4.4 后备系统
- 磁带机
- 硬盘
- 光盘驱动器
8.5 数据一致性控制
8.5.1 事务
1. 事务的定义
事务是用于访问和修改各种数据项的一个程序单位。可被看作是一系列相关读和写操作。
被访问的数据可以分散地存放在同一文件的不同记录中,也可放在多个文件中。**只有对分布在不同位置的同一数据所进行的读和写(含修改)操作全部完成时,才能再以托付操作(Commit Operation)来终止事务。 只要有一个读、写或修改操作失败,便须执行夭折操作(Abort Operation)。**读或写操作的失败可能是由于逻辑错误, 也可能是系统故障所导致的。
事务具有原子性,要么全部完成,要么一个也不修改。
事物具有的属性:
- 一致性
- 隔离性
- 持久性
2. 事务记录
事务名:用于标识该事务的唯一名字
数据项名
旧值
新值
3. 恢复算法
恢复算法可利用以下两个过程:
(1) undo〈Ti〉。该过程把所有被事务Ti修改过的数据,恢复为修改前的值。
(2) redo〈Ti〉。该过程能把所有被事务Ti修改过的数据,设置为新值。
如果系统发生故障, 系统应对以前所发生的事务进行清理。
8.5.2 检查点(了解)
1. 检查点的作用
引入检查点的主要目的,是使对事务记录表中事务记录的清理工作经常化, 即每隔一定时间便做一次下述工作: 首先是将驻留在易失性存储器(内存)中的当前事务记录表中的所有记录,输出到稳定存储器中;其次是将驻留在易失性存储器中的所有已修改数据,输出到稳定存储器中;然后是将事务记录表中的〈检查点〉记录,输出到稳定存储器中; 最后是每当出现一个〈检查点〉记录时,系统便执行上小节所介绍的恢复操作,利用redo和undo过程实现恢复功能。
把已提交和未提交的保存,检查点之前的才可恢复
2. 新的恢复方法
恢复例程首先查找事务记录表,确定在最近检查点以前开始执行的最后的事务Ti。在找到这样的事务后, 再返回去搜索事务记录表,便可找到第一个检查点记录,恢复例程便从该检查点开始,返回搜索各个事务的记录,并利用redo和undo过程对它们进行处理。
如果把所有在事务Ti以后开始执行的事务表示为事务集T, 则新的恢复操作要求是:对所有在T中的事务TK, 如果在事务记录表中出现了〈TK托付〉记录,则执行redo〈TK〉操作; 反之,如果在事务记录表中并未出现〈TK托付〉记录,则执行undo〈TK〉操作。
8.5.3 并发控制
-
利用互斥锁实现“顺序性”
每个共享对象设置一把互斥锁
-
利用互斥锁和共享锁实现顺序性
互斥锁仅允许一个事物对相应对象执行读或写操作
共享锁允许多个事物对相应对象执行读操作,但不允许其中任何一个事物对对象执行写操作