热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

文件管理学习之文件目录管理

上篇说到文件内部的逻辑结构和物理结构,而如何在系统中实现按文件名存取文件是非常重要的,也就是如何实现文件名到物理存储地址的转换。为了实现“按名存取”,系统必须为每个文件设置用于描述和控制文件的数据

上篇说到文件内部的逻辑结构和物理结构,而如何在系统中实现按文件名存取文件是非常重要的,也就是如何实现文件名到物理存储地址的转换。

为了实现“按名存取”,系统必须为每个文件设置用于描述和控制文件的数据结构,它至少要包括文件名和存放文件的盘物理地址,这个数据结构称为文件控制块FCB,文件控制块的有序集合称为文件目录,即一个文件控制块FCB就是一个文件目录项。

文件控制块FCB中包含的信息有以下三类:

1. 基本信息类

文件名:标识一个文件的符号名,在每个系统中文件必须具有唯一的名字。

. 文件的物理地址:这由于文件的物理结构不同而不同。对于连续文件就是文件的起始块号和文件总块数;对于MS-DOS是文件的起始簇号和文件总字节数;对于UNIX S V是文件所在设备的设备号、13个地址项和文件长度等。

2.存取控制信息类

文件的存取权限,象UNIX用户分成文件主、同组用户和一般用户三类,这三类用户的读写执行(RWX)的权限。

3.使用信息类

文件建立日期、最后一次修改日期、最后一次访问的日期;当前使用的信息:打开文件的进程数,在文件上的等待队列等。

 

若干个文件目录组成一个专门的目录文件,目录结构的组织关系到文件系统的存取速度,关系到文件共享性和安全性,常用的目录文件结构有单级目录、两级目录和多级目录。

单级目录:文件系统在每个存储设备上仅仅建立一个目录文件的目录结构,称为单级目录,目录文件中每一个目录项对应一个文件,单级目录结构简单,能实现目录管理的基本功能--按名存取,但存在查找速度慢,不允许重名和不便于实现文件共享等缺点,因此它只适用于单用户环境。

两级目录:文件系统在存储设备上将目录文件分为两级,系统目录(主目录)和用户目录。主目录中存储了用户目录名和指向用户目录的指针,每个文件都是由系统目录中的用户目录和用户目录的文件名标识,这种标识具有唯一性。这种结构仅仅适合用于两个用户,解决了文件重命名的问题,对于多用户的访问对方文件的不便。

多级目录文件:采用树形数据结构,形成一种树形的结构目录。

路径名从根目录开始到该文件的通路上所有各级目录名拼起来得到,各目录名之间与文件名之间可用分隔符隔开。

 

从根目录经各级子目录到达文件的通路上的所有子目录名称为文件的存取路径。

-------------------------------------------------------------------------------------

文件的共享性

系统中有许多的功用的文件,为了实现文件共享,文件系统在建立目录文件的时候,应该采用有效的方法实现文件的共享。

例如树形多级目录中可以通过无环结构目录图状结构目录,通过指针指向实现文件共享。

一种有效地实现文件共享的方法是基本文件目录表法

实现文件共享的一种有效方法是基本文件目录法。该方法把所有目录的内容分为文件名和文件说明两部分。一部分称为符号文件目录(SDF),它包含文件符号名和由系统赋予唯一的内部标识符ID组成。另一部分称为基本文件目录(BDF),它包含目录项中除文件符号名外的所有其它信息,并加上与符号目录相一致的内部标识符ID。标识符ID是各文件在基本文件目录中表目的排序号。UNIX/Linux采用了基本文件目录法目录结构。

在主目录中,记录目录名和系统给定的标识符,与BDF中的标识符相对应,当需要查找一个共享文件的时候,首先在主目录中查询BDF表,查询文件所在的SDF表中查找文件所在的物理地址。

目录文件的管理:一般来说,系统只把正在使用的目录文件复制到内存中,成为打开文件,将目录文件从内存中删除称为关闭文件。


推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 本文介绍了在Linux中执行.sh脚本时出现/bin/sh^M: bad interpreter: No such file or directory异常的原因分析,并提供了两种解决方法:在Windows下进行编码格式转换,或在Linux中修改文件格式和执行权限。具体操作步骤也在摘要中给出。 ... [详细]
author-avatar
l佳恒_756
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有