磁盘初始化
引导块
计算机开机时需要进行一系列初始化的工作,这些初始化工作是通过执行初始化程序(自举程序)完成的
但把自举程序放在了ROM中,如果有需要去更新初始化程序的时候,因为放在ROM中不能被修改了怎么办?–可以用下图的解决方式,也就引入了引导块的概念
坏块
坏块就是无法正常使用的扇区,这属于硬件故障,操作系统是无法修复的,只能把他们标记出来,以免以后错误地引用他们
Work hard for what you desire.
之前的文件物理结构实际上是对磁盘非空闲块的管理,下面来看看操作系统对磁盘空闲块的管理
下面将涉及以下内容
现在我们肯定要对电脑做的一件事就是给我们的电脑分盘(C,D,E,F····盘)
如何分配磁盘块:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间。同样可采用首次适应、最佳适应、最坏适应等算法来决定要为文件分配哪个区间。
如何回收磁盘块:与内存管理中的动态分区分配很类似,当回收某个存储区时需要有四种情况①回收区的前后都没有相邻空闲区;②回收区的前后都是空闲区;③回收区前面是空闲区;④回收区后面是空闲区。总之,回收时需要注意表项的合并问题。
操作系统会保存链头,链尾指针(上图中链头是20,链尾是0)
如何分配:当某文件申请k个盘块,则从链头开始一次摘下K个盘块分配,并修改空闲链的链头指针
如何回收:回收的盘块一次挂到链尾,并修改空闲链的链尾指针
适用于离散分配的文件结构,而且当为一个文件分配多个磁盘块时需要多次操作,需要一个个摘
解释一下最后那句,比方说现在要回收17,18这两块,因为前后没有相邻的空闲盘区,就把他俩作为一个空闲盘区挂在链尾
既适用于离散分配又适用于连续分配,为一个文件分配多个盘块时效率更高
上图中字长就是16,n就是16,比方{1,10},那盘块号就是1*16+10=26
比方说盘块号是17,那字号就是17/16=1,位号,就是17%16=1
既适用于连续分配又适用于离散分配
因为空闲表和空闲链表可能过大,因此不适用于大型文件系统,unix系统采用了成组链接发对磁盘空闲块进行管理
文件目录区专门用一个磁盘块作为超级块,当系统启动时将超级块读入内存,并保证内存与外存中的超级块数据一致
如下图就是成组链接的一个实现,超级块要保存下一组空闲块号,比如图中100,还有下一组的空闲块号。同样的下一组也可像超级块这样保存下一组的,但是注意,最后一组比前面的是要少的,因为有上一组有1个-1来表示终止了;注意图中虽然是按顺序来的,什么300-201呀啥的,只不过是为了表明数量关系,实际上不需要时连续的
如何分配:比方说需要一个空闲块,拿去与超级块存的那个100比,发现可以,是小于100的,那就将第一分组的一个空闲块分给他,并修改超级块中数据,但是注意像,300这块不能乱动,因为会牵连到后面的组
如果需要100块,发现100=100,是足够的,可以把第一个分组的100块分给他,但是因为300号块内存储了下一组的数据,因此需要将300号内的数据复制到超级块中
怎么回收空闲块:比方说每个分组最多有100块
如果此时第一个分组没满,只有99块,那就把这个空闲块加到第一组
如果此时第一个分组已经满了,就把超级快的内容复制到新的空闲块中,并让他作为第一个分组
FCB的有限集合称为文件目录,一个FCB就是一个文件目录项
如上图所示,2015-08啊啥的是目录文件,就是文件夹,微信不拉不拉的就是个文件,所有的这些个FCB组成文件目录,每条FCB包含了文件的基本信息(文件名,物理地址,逻辑结构,物理结构等),存取控制信息(是否可读/可写,禁止访问的用户名单等),使用信息(文件建立,修改时间)
最重要的是文件名和物理地址,因为FCB就是要实现可以让用户通过文件名与文件间的映射实现“按名存取”
早期计算机系统不支持多级目录,整个系统只有一张目录表,每个文件占一个目录项
因此在单级目录下肯定是不允许有重名文件的,不然你想要是按文件名查找,有重名的操作系统哪知道你要找的到底是哪个啊
那在创建新文件时,要先检查文件目录里有没有重名的,没有重名的才能建立文件再将对应的目录项插入到目录表里
综上所述,如果有多个用户同时使用计算机,很有可能产生同名文件,因此不适用于多用户操作系统,为了解决这个问题,提出了两级目录文件的概念
两级目录文件早期的多用户操作系统中,采用两级目录结构,分为主文件目录和用户目录
注意这里是根据不同用户划分的,user1想访问user2的FCB就不行,但是这样的话不同用户的文件可以同名;然而这样的两级目录还是有缺点,那就是用户不能将自己的文件进行分类,为了解决这个问题就引出了多级目录的概念
多级目录文件(树形目录结构)上面说到自拍.jpg,那操作系统是怎么找到他的呢?
操作系统是根据绝对地址一层一层找到下一级目录的,首先从外存读入根目录的目录表,找到照片目录存放位置,从外存读出相应目录表,在找到2015-08目录的存放位置,再从外存取出对应目录表,最后找到自拍.jpg的存放位置,全程需要3次读磁盘I/O操作
但很多时候,用户会连续访问同一目录下多个文件,比如连续查看2015-08的两个文件,如果都按绝对地址从根目录开始找太低效了,这个时候就可以设置一个“当前目录”
虽说多级目录结构可以很方便的对文件分类,层次结构清晰,也能有效对文件管理并保护,但不便于实现文件的共享,因此就提出了无环图目录结构
无环图目录结构 索引节点(FCB的改进)注意索引节点不是在目录表里的,他在外存,目录项只有文件名和索引节点指针