操作系统学习笔记——第六章 文件管理

在学习操作系统时总结了笔记,并分享出来,特别是蓝色和红色字体。有问题请及时联系博主: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编辑  收藏  举报

导航