from《计算机操作系统》第四版 (笔记完结撒花~考到第八章,以后整理其他的章节吧)
逢考必过!!!
连续分配的主要优点如下:
(1) 顺序访问容易。
(2) 顺序访问速度快。
连续分配的主要缺点如下:
(1) 要求有连续的存储空间。
(2) 必须事先知道文件的长度。
(3) 不能灵活地删除和插入记录。
(4) 对于动态增长的文件事先难以知道文件的最终大小。
离散分配。为文件分配多个不连续的盘块,再通过每个盘块上的链接指针,将同属于一个文件的多个离散的盘块链接成一个链表,由此形成的物理文件称为链接文件。
文件目录【file、start、end】,第n个盘块号记录n+1个盘块号,最后一个盘块指向-1结束且与end相比判断是否正常结束。理论上,仅需要第一个盘块号。需要n次访问IO读到内存中,效率低。
为提高检索速度和减少指针所占用的存储空间,可将几个盘块组成一个簇。在进行盘块分配或接收文件中每个元素时,以簇为单位进行。
把用于链接文件各个物理块的指针显式地存放在内存的一张链接表中。
文件分配表FAT记录盘块的情况,由所有磁盘的盘块号构成,在FAT中第n个盘块号记录n+1个盘块号
文件目录中有一个头指针,指向第一个盘块
FAT一次读到内存中,无需多次读盘,链接可见。
FAT引入“卷”,支持将一个物理磁盘分成四个逻辑磁盘,每个逻辑磁盘就是一个卷。每个卷都是一个能够被单独格式化和使用的逻辑单元,供文件系统分配空间时使用。一个卷包含了文件系统信息、一组文件、空闲空间。每个卷都专门划出一个单独区域来存放自己的目录和FAT表,以及自己的逻辑驱动器字母。
FAT文件系统中的扇区大小一般为512Byte
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表的项数与簇的大小成反比。
具有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)
每一簇在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,因此要增大分区大小,只能通过增大簇的大小来实现。
64位磁盘地址
长文件名:文件名255个字符,全路径名32767个字符
系统容错功能*
能保证系统中的数据一致性*
文件加密、文件压缩功能
以簇为磁盘空间分配和回收的基本单位。一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原因。
采用逻辑簇号(LCN)和虚拟簇号(VCN)对簇定位。一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原因。而虚拟簇号则是将特定文件的簇从头到尾进行编号,这样做的原因是方便系统对文件中的数据进行引用,VCN并不要求在物理上是连续的,要确定VCN的磁盘上的定位需先将其转换为LCN。
卷: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项以后就是用户建立的文件和文件夹的记录了。
引入一个盘块(索引盘块)记录所有实际盘块地址,至少读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)
混合索引方式,最多三级索引,最大达到4TB。
磁盘分配表DAT,用于记住可供分配的存储空间情况。提供对盘块进行分配和回收的手段。存储空间的基本分配单位都是磁盘块而非字节。
1)空闲表
系统为外存上的所有空闲区建立一张空闲表,每个空闲区对应于一个空闲表项,其中包括表项序号、该空闲区的第一个盘块号、该区的空闲盘块数等信息
将所有空闲盘区拉成一条空闲链。
(1) 空闲盘块链
(2) 空闲盘区链
用二维表表示,map[m,n]
(1) 顺序扫描位示图,从中找出一个或一组其值为“0”的二进制位(“0”表示空闲时)。
(2) 将所找到的一个或一组二进制位, 转换成与之相应的盘块号。假定找到的其值为“0”的二进制位,位于位示的第i行、第j列,则其相应的盘块号应按下式计算:b=n(i-1)+j
式中, n代表每行的位数。
(3) 修改位示图, 令map[i,j]=1。
(1) 将回收盘块的盘块号转换成位示图中的行号和列号。 转换公式为:
i=(b-1)DIV n+1
j=(b-1)MOD n+1
(2) 修改位示图。 令map [i,j]=1。
离散分配
(1) 空闲盘块号栈
存放当前可用的一组空闲盘块的盘块号(最多含100个号),以及栈中尚有的盘块(号)数N。
空闲盘块栈满了还要回收时,要把现有的盘块形成一个新节点放在栈中,将盘块号作为栈底。
当系统要为用户分配文件所需的盘块时,须调用盘块分配过程来完成。该过程首先检查空闲盘块号栈是否上锁,如未上锁,便从栈顶取出一空闲盘块号,将与之对应的盘块分配给用户,然后将栈顶指针下移一格。若该盘块号已是栈底, 即S.free(0),这是当前栈中最后一个可分配的盘块号。由于在该盘块号所对应的盘块中记有下一组可用的盘块号,因此, 须调用磁盘读过程,将栈底盘块号所对应盘块的内容读入栈中,作为新的盘块号栈的内容,并把原栈底对应的盘块分配出去(其中的有用数据已读入栈中)。 然后,再分配一相应的缓冲区(作为该盘块的缓冲区)。最后,把栈中的空闲盘块数减1并返回。
在系统回收空闲盘块时,须调用盘块回收过程进行回收。它是将回收盘块的盘块号记入空闲盘块号栈的顶部,并执行空闲盘块数加1操作。当栈中空闲盘块号数目已达100时, 表示栈已满,便将现有栈中的100个盘块号, 记入新回收的盘块中,再将其盘块号作为新栈底。
对于文件的访问速度:
两个磁盘同时读写
容错技术是通过增加冗余的磁盘驱动器、磁盘控制器等方法来提高磁盘系统可靠性
防止因磁盘表面缺陷所造成的数据丢失
防止由磁盘驱动器和磁盘控制器故障所导致的系统不能正常工作
集群:指由一组互连的自主计算机组成统一的计算机系统
公用磁盘模式
为了减少信息复制的开销,可将多台计算机连接到一台公共的磁盘系统上。
事务是用于访问和修改各种数据项的一个程序单位。可被看作是一系列相关读和写操作。
被访问的数据可以分散地存放在同一文件的不同记录中,也可放在多个文件中。**只有对分布在不同位置的同一数据所进行的读和写(含修改)操作全部完成时,才能再以托付操作(Commit Operation)来终止事务。 只要有一个读、写或修改操作失败,便须执行夭折操作(Abort Operation)。**读或写操作的失败可能是由于逻辑错误, 也可能是系统故障所导致的。
事务具有原子性,要么全部完成,要么一个也不修改。
事物具有的属性:
事务名:用于标识该事务的唯一名字
数据项名
旧值
新值
恢复算法可利用以下两个过程:
(1) undo〈Ti〉。该过程把所有被事务Ti修改过的数据,恢复为修改前的值。
(2) redo〈Ti〉。该过程能把所有被事务Ti修改过的数据,设置为新值。
如果系统发生故障, 系统应对以前所发生的事务进行清理。
引入检查点的主要目的,是使对事务记录表中事务记录的清理工作经常化, 即每隔一定时间便做一次下述工作: 首先是将驻留在易失性存储器(内存)中的当前事务记录表中的所有记录,输出到稳定存储器中;其次是将驻留在易失性存储器中的所有已修改数据,输出到稳定存储器中;然后是将事务记录表中的〈检查点〉记录,输出到稳定存储器中; 最后是每当出现一个〈检查点〉记录时,系统便执行上小节所介绍的恢复操作,利用redo和undo过程实现恢复功能。
把已提交和未提交的保存,检查点之前的才可恢复
恢复例程首先查找事务记录表,确定在最近检查点以前开始执行的最后的事务Ti。在找到这样的事务后, 再返回去搜索事务记录表,便可找到第一个检查点记录,恢复例程便从该检查点开始,返回搜索各个事务的记录,并利用redo和undo过程对它们进行处理。
如果把所有在事务Ti以后开始执行的事务表示为事务集T, 则新的恢复操作要求是:对所有在T中的事务TK, 如果在事务记录表中出现了〈TK托付〉记录,则执行redo〈TK〉操作; 反之,如果在事务记录表中并未出现〈TK托付〉记录,则执行undo〈TK〉操作。
利用互斥锁实现“顺序性”
每个共享对象设置一把互斥锁
利用互斥锁和共享锁实现顺序性
互斥锁仅允许一个事物对相应对象执行读或写操作
共享锁允许多个事物对相应对象执行读操作,但不允许其中任何一个事物对对象执行写操作