操作系统学习笔记——第六章 文件管理
在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
参考书:《操作系统》谌卫军等,清华大学出版社,2012年5月
参考视频:清航全套计算机专业课视频
目录
第六章 文件管理
1.文件
2.目录
3.文件系统的实现
第六章 文件管理
可以从两种不同的观点来看待文件系统:
-用户观点:关心的是文件系统所提供的对外的用户接口,包括文件如何命名、如何保护、如何访问(创建、打开、关闭、读、写等);
-操作系统观点:关心的是如何来实现与文件有关的各个功能模块,包括如何来管理存储空间、文件系统的布局、文件的存储位置等。
1.文件
文件的结构
-指文件的逻辑结构,即文件系统提供给用户的文件结构形式,它独立于在外存上的物理存储结构。
-无结构:整个文件由一序列无结构的字节流组成;
文件的分类
普通文件(regular file):包含用户信息的文件;
-ASCII文件:由一行行的文本组成;
-二进制文件:非ASCII文件,通常具有某种内部的逻辑结构,为相关的应用程序所了解。
目录文件(directory):管理文件系统结构的系统文件。
思考:文件的属性信息存在哪?(后边讲)
2.目录
-文件太多了怎么办?不同的应用程序有不同类型的文件,不同的用户有不同的文件,如何对它们进行组织、分类?
-如何对文件进行管理?当用户需要访问某个文件时,如何根据这个文件名迅速地定位到相应的文件,从而对文件的属性和内容进行各种操作?
-解决的办法就是:目录。
目录(directory)也称文件夹(folder),它是一张表格,记录了在该目录下的每一个文件的文件名和其他的一些管理信息。
一般情况下,每个文件占用该表格的某一行,即一个目录项(该表格如何存放?);
这张表格本身是以文件的形式存放在磁盘上;
在目录的管理上,也有相关的系统调用,如:
-创建目录create;
-删除目录delete;
-修改目录名rename;
思考:如何存放?结构体数组
思考:根目录如何存放?单独存放
3.文件系统的实现
6.1(文件)和6.2(目录)是从用户的角度来看待文件系统,用户所关心的问题是文件如何来命名、可以对文件进行哪一些操作、目录的逻辑结构是什么样的等各种与用户接口有关的问题;
从文件系统的实现来看,实现者更关心的是文件和目录是如何存储的、磁盘空间是如何管理的、如何使整个文件系统能高效、可靠地运转。
块(block)
-文件的逻辑结构一般是字节流;
-对于用户而言,可以在这种字节流的基础上,构造自己所需的各种类型的数据结构,如:记录结构、树状结构、线性结构等;
-对于文件系统而言,必须将这种字节流(一个连续的逻辑地址空间)保存在磁盘的某些扇区中;
-通常做法:把磁盘空间划分为一个个大小相同的块(block),称为物理块;把该逻辑地址空间也分成大小相同的逻辑块,在文件系统的内部,以块为单位来进行操作;
-一个物理块由一个或多个连续的扇区组成。
小实验:一个文本十个字符占用(大小)10个字节,但在磁盘占用空间32KB(块的大小:32KB)
文件系统的布局
一个磁盘在低级格式化以后,可以用分区软件划分为若干个分区。在分区以后,磁盘的扇区0称为主引导记录(Master Boot Record,MBR),用来启动计算机,MBR的结尾是一个分区表,记录了每个分区的起始扇区和大小,其中有一个分区为活动分区;
文件的实现需解决以下两个问题:
-如何来描述一个文件,如何来记录文件的各种管理信息?
-如何来存放文件,即如何把文件的各个连续的逻辑块存放在磁盘上的空闲物理块当中?如何来记录逻辑块与物理块之间的映射关系?
如何来实现FAT?
-想想在页式存储管理当中,如何实现逻辑页面到物理页面的映射?
-FAT表的实现方法:在文件系统中,设置一个维的线性表格,其项数等于磁盘物理块个数,并按物理块编号的顺序建立索引。对于每一个文件,在它的FCB中记录了第一个物理块编号X1,而在FAT表的第X1项中,记录了该文件的第二个物理块编号X2,…,从而形成一个链表。
多个文件如下:
思考:假设每个物理块大小为4KB,每个文件最大为多少?
假设地址为一个整数,四个字节,最多放:4K/4=1K,一共可放4KB*1K = 4M
若文件太大,怎么办?可指向另一地址映射表。(用二级索引或三级索引)
目录的实现
目录的主要功能:根据用户给出的ASCIⅡ形式的文件名(路径名),迅速地定位到相应的文件控制块。目录的实现需解决以下三个问题:
-目录项的内容;
-长文件名问题;
-目录的搜索方法。
思考:若只更改了文件名,什么发生了改变?父目录发生了改变
系统调用的实现
在文件系统的内部,是如何来实现open、close、read、write等各种系统调用函数的?
思考:搜索过程是什么样的?先读取root根目录——>读取Ann的FCB地址——>把Ann的FCB读入内存——>(在PCB中查“索引表”的)索引块(记录了每个逻辑块在哪个物理块当中)——>读入数据块——>(拼在一起)得到了Ann目录的内容——>读取mail的FCB地址——>把mail的FCB读入内存——>(在PCB中查“索引表”的)索引块(记录了每个逻辑块在哪个物理块当中)——>读入数据块——>(拼在一起)得到了mail目录的内容——>最后查找B
类似于页式存储(给出逻辑地址,分成逻辑页面号和地址偏移,然后通过页号在页表中查找,得到物理页面号,然后和地址偏移叠加得到物理地址),此处是以块为单位的,读写文件,先要知道内容属于哪一个逻辑块,然后根据逻辑块找到所在的物理块,然后根据物理块把内容读入内存。
在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主:Alliswell_WP,转载请注明出处。
posted on 2020-04-19 20:57 Alliswell_WP 阅读(474) 评论(0) 编辑 收藏 举报