zoukankan      html  css  js  c++  java
  • 操作系统学习笔记——第六章 文件管理

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

  • 相关阅读:
    面试问题总结
    2016后半年读书系统
    java基础知识
    自动化测试的误区
    软件测试的艺术
    QTP
    软件测试的艺术读书笔记
    Jquery中$(document).ready()
    Python爬取糗事百科示例代码
    【转载】气象数据相关资源
  • 原文地址:https://www.cnblogs.com/Alliswell-WP/p/OperatingSystems_StudyNotes_5.html
Copyright © 2011-2022 走看看