惠州营销型网站建设,网站建设著作权,开发公司项目总职责,网站文字规划学习日期#xff1a;2024.7.17
内容摘要#xff1a;文件存储空间管理、文件的基本操作 在上一章中#xff0c;我们学习了文件物理结构的管理#xff0c;重点学习了操作系统是如何实现逻辑结构到物理结构的映射#xff0c;这显然是针对已经存储了文件的磁盘块的#xff0…学习日期2024.7.17
内容摘要文件存储空间管理、文件的基本操作 在上一章中我们学习了文件物理结构的管理重点学习了操作系统是如何实现逻辑结构到物理结构的映射这显然是针对已经存储了文件的磁盘块的那么操作系统又是如何管理空闲磁盘块的呢
文件存储空间管理
存储空间的划分与初始化
在安装Windows操作系统的时候我们要将磁盘分区有时候我们只有一个硬盘但是能分出来CDE三个区这是因为分区的过程是将物理磁盘划分为逻辑盘 。
存储空间会把每个盘分成目录区和文件区目录区主要用于存放FCB等用于磁盘存储空间管理的信息文件区用于存放文件数据。
空闲表法
适用于连续分配方式如下图 就是用一个表记录从哪里开始有多少个连续空闲块分配和回收的方法也和内存管理中的连续分配方式类似可以用几种算法决定如何分配。链接连续分配方式需要专门注意的就是回收区前后都是空闲区时要合并前后的表项
空闲链表法
空闲链表法又可以分成空闲盘块链和空闲盘区链二者的核心区别在于链表的“节点”是单独的盘块还是由连续空闲盘块组成的盘区。
不论那种方式操作系统都会保存链头和链尾的指针。
如果是使用空闲盘块链当需要K个磁盘块时从链头开始依次“取下”K个磁盘块 并修改链头指针当回收磁盘块时将空闲的盘块挂到链尾。显然这种方式可以适用于离散分配的物理结构。
当使用空闲盘区链时与空闲表法类似同样可以用首次适应、最佳适应等算法从链头开始检索根据算法规则找出一个合适的空间分配给文件只不过是空间由表格保存变为了用链表保存。
位示图法
其实就是用二进制位来表示盘块是否已分配分配的是1空闲的是0用字号和位号来推算出盘块号。其实也算是某种表格用ij表示字号位号像十字座标一样确定一个盘块。
当盘块号字号位号都从0开始字长为n时字号位号ij对应的盘块号 bn*ij
b号盘块对应的字号ib/n 取整数部分 位号 j b%n
如何分配若文件需要K个块先顺序扫描位示图找到K个0再根据字号和位号算出对应的盘块号分配出去最后把0改成1即可。
成组链接法
空闲表法和空闲链表法在保存大文件时并不好用因为空闲表或链表可能过大。UNIX系统中采用了成组链接法来对磁盘空闲块进行管理。文件卷的目录区中专门用一个磁盘块作为“超级块”当系统启动时将超级块读入内存。
超级块中记录下一组空闲盘块数和空闲块号超级块连着下一组超级块直到尽头用-1等特殊值表示没有下一组。每个分组的空闲盘块数目上限是一定的图中是100个。
每个分组的块号不需要连续例子中是为了便于看出数量。
如何分配若文件需要K个块首先检查第一个分组的块数是否足够不够则检查下一组当检查到足够的分组时分配空闲块并修改分组的空闲块个数和块号。
当一个分组的块数全部用完后要把下一个分组的信息存到其前置节点类似链表删除节点要把next节点接到前一个节点。
如何回收若分组没满只需要把回收的块号放入分组并修改分组的空闲块个数和块号。若分组已经满了则将超级块中的数据复制到新回收的块中并修改超级块的内容让新回收的块成为第一个分组。类似链表头插法
文件的基本操作
创建文件Create系统调用
进行Create系统调用时需要提供
1.所需的外存空间大小
2.文件存放路径如 D:/demo和文件名
操作系统在进行Create系统调用时主要做了
1.在外存中找到文件所需的空间并分配。上一部分的内容
2.根据文件存放路径的信息找到该目录对应的目录文件然后创建该文件对应的目录项。
删除文件Delete系统调用
进行Delete系统调用时需要提供
1.文件存放路径和文件名
操作系统在进行Delete系统调用时主要做了
1.根据路径找到相应的目录文件从目录中找到对应的目录项
2.根据文件存放路径的信息找到文件在外存中的存放位置、文件大小等信息回收磁盘块。回收时根据使用管理策略的不同用不同的方法参考上面的内容
3.从目录表中删除对应的目录项。
打开文件Open系统调用
进行Open系统调用时需要提供
1.文件存放路径和文件名
2.要对文件进行的操作类型如 r只读rw读写等等
操作系统在进行Open系统调用时主要做了
1.根据路径找到相应的目录文件从目录中找到对应的目录项检查用户是否有相应的操作权限。
2.将目录项复制到内存中的“打开文件表”中并将对应表目的编号返回给用户之后用户使用打开文件表的编号来指明要操作的文件。 把每个进程的打开文件表整合就是整个系统的打开文件表它可以方便实现某些文件管理的功能。比如说有时候我们想删除某个文件时操作系统会提示我们“暂时无法删除因为该文件正在被xxx占用”这其实就是操作系统检查了打开文件表发现有进程正在使用该文件。
关闭文件Close系统调用
操作系统在进行Open系统调用时主要做了
1.将进程的打开文件表相应表项删除
2.回收分配给该文件的内存空间等资源
3.系统打开文件表的打开计数器count-1若count0 删除表项。
读文件Read系统调用
进行Read系统调用时需要提供
1.要读的文件
2.读入的数据和在内存中放入的位置
操作系统在处理read系统调用时会从读指针指向的外存中将用户直到大小的数据读入用户指定的内存区域中。
写文件Write系统调用
进行Read系统调用时需要提供
1.要读的文件
2.要写出的数据和要写出的数据放在内存中的位置
操作系统在处理read系统调用时会从读指针指向的内存中将用户直到大小的数据读入用户指定的外存区域中。 感谢您看到这里如果满意的话麻烦您点个赞支持一下个人主页还有更多内容分享。
个人能力不足如有错漏还请指出我会尽快修改。
内容总结自王道计算机考研《操作系统》 和 人民邮电出版社《操作系统导论》