精华内容
下载资源
问答
  • 操作系统原理:文件系统

    千次阅读 多人点赞 2021-05-24 21:21:54
    文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一个文件;需要管理空闲空间和分配策略;为文件提供相应的保护,文件数据的存储需要...

    目录

    一、相关概念       

    二、文件的分配

    三、空闲空间列表

    四、多磁盘管理-RAID

    五、磁盘调度


    一、相关概念       

           文件系统是一种用于持久性存储的系统抽象。硬盘属于持久性存储介质的一种。管理文件系统例如硬盘,需要管理文件块,哪一块属于哪一个文件;需要管理空闲空间和分配策略;为文件提供相应的保护,文件数据的存储需要可靠性持久性。文件的属性包含名称、文件类型(后缀)、位置、大小、读写权,创建者、创建时间,最近修改时间等 ; 文件头 保存了文件的控制信息。

           文件描述符是操作系统为每个进程维护维护的一个打开文件表的索引。需要元数据来对文件进行有效的管理,元数据包括文件指针来记录最后一次读写位置,文件打开计数(文件是共享资源,允许多个进程打开同一个文件),文件磁盘位置(缓存数据的访问信息),访问权限等。在操作系统更上层的应用程序不需要关心文件在磁盘中的哪一个位置,只管对缓存区Buffer的读写就行。具体的逻辑内存和外存之间的映射关系由操作系统完成。内存的读写单位是页或者字节,而外存磁盘的读写是扇区。

         当用户需要读取文件数据时,操作系统会获取用户需要访问的字节空间,进一步地操作系统会根据用户需要访问字节所在的扇区给取出来。

         别名,及一个文件由多个名字。软连接生成出的文件,其内容是另一个文件的路径名(指针),通过访问这路径名可以间接的访问对应的文件,又称快捷方式。硬链接生成出的文件其文件项指向同一个文件的内容。对于硬链接,有种特殊的数据结构记录了文件被引用的计数。删除硬链接对应的文件,只是把计数减1,直到减为0文件才会彻底删除。如果删除软连接对应的文件,文件没了,链接也就悬空了。有点像C++里的智能指针和弱指针。别名的应用潜在的风险就是循环引用,可能在遍历路径时造成异常,所以需要考虑检索文件算法的健壮性。

        文件系统分为磁盘文件系统,数据库文件系统(例如WinFs),日志文件系统(例如 Journaling file system,用于可恢复文件数据),网络/分布式文件系统(例如NFS、GFS等,利用网络访问其他系统的文件),特殊/虚拟文件系统

        虚拟文件系统是对所有文件系统的抽象,管理所有文件和文件系统关联的数据结构,给上层提供统一的接口,实现对各种文件系统高效的读/写/查/打开/关闭等功能。

        

    对于基本的文件系统数据结构包含:卷控制块(超级块)用来记录文件系统的特征信息,例如块大小,块数量,空余块,指针等;文件控制块用来记录文件的特征信息,例如拥有者,文件大小,数据库位置等; 目录节点,每个目录项一个,包含了目录项的数据结构和指向的文件控制块、父节点项目列表等。

     

     

    二、文件的分配

           文件的分配分成3种,连续分配方式、链式分配方式、索引分配方式。对于不同大小文件应考虑空间高效和时间高效采用适合数据块分配方式。通常的表现指标是访问时间和空间利用率。

           连续分配策略就是找到一块满足文件大小的数据块进行分配。和页内存的连续分配策略类似。如果频繁进行文件的修改/删除可能会有无法利用的空闲块。当然这种组织方式是简单的,通常方法就最佳分配,最先适配等。

           链式分配策略,像链表一样的数据结构。优点就是很少的碎片,但是串行访问可能会比较花时间。访问第三个数据块,先要访问第二个数据块,访问第二个数据库,首先应访问第一个数据库才行。还有一个缺点就是,链表的指针(链接)信息,可能会因为突然断点导致文件数据来不及写入到硬盘中导致中间修改数据块的链接信息丢失,断了“链”就会造成之后的文件数据无法关联起来。

           多级索引分配策略,像树一样的数据结构,每个非叶子节点都是索引,通过索引块可以找到数据库的位置。这种方式可以高效地利用碎片,增删也方便。缺点就是存储小文件也需要为索引块分配空间,不能直接访问。

    三、空闲空间列表

           文件系统需要把空闲空间组织起来。可以用‘0’ 和 ‘1’ 表示数据块是否为空闲。所以可以用位图来管理文件系统的所有数据块列表的空闲情况。访问文件系统时,数据块空闲列表需要装入到内存中,因此还需要考虑可能因为断电造成内存和硬盘数据信息不一致情况的问题。

    四、多磁盘管理-RAID

           早期磁盘容易坏,数据容易丢失。为了保持高健壮性,通常用多个便宜的硬盘并行写数据,这样一个硬盘损坏也不至于数据丢失,同时也可以提高磁盘的访问效率。

           RAID-0:把数据均匀地放在独立的硬盘里,对硬盘并行的写操作和读操作。对于操作系统来说,访问数据,可以并行地将不同硬盘的数据写入内存中。

           RAID-1:如果其中有一个硬盘损坏,那么其他硬盘可以替代损坏的硬盘的工作,提高可靠性。多硬盘起到了镜像作用。

           RAID-4:多硬盘中,用一个硬盘用来完成数据纠错功能,称为Parity Disk。此方法考虑到了RAID-0 和RAID-1的高效和高可靠的特点。缺点是Parity Disk 的读写非常频繁。

           RAID-5:多硬盘中,选其中用几个或多个硬盘用来完成数据纠错功能。让多个硬盘分摊原先Parity Disk的读写负担。

     

    五、磁盘调度

           磁头通过移动来找到扇区具体位置,磁盘通过旋转来寻道找到数据的位置。一个磁盘有多个盘片,每个盘片有一到两个的磁头来读取数据。“旋转”和“移动”都是机械操作,与电子读取的效率相比慢了好几个数量级。

        那么有什么调度策略来减少读取磁盘的开销呢?当有一系列寻道请求时,如果采用先来先服务策略,访问数据如果在不同扇区,而扇区在磁盘的物理位置距离过长,那么磁头读取数据时可能会来回“跳动”。造成很大的开销。

         最短寻道时间,在系列寻道请求中,找到扇区位置与当前磁头所在扇区的位置的距离最短的请求,先执行。这个可能会造成离磁头的远的寻道请求长时间无法执行,造成饥饿现象。

         Scan,又称电梯算法,磁头先往磁盘内环移动接收相应的寻道请求,再往磁盘外环接收相应的寻道请求,像电梯一样。那么所有请求都可以公平地得到访问。

        C-Scan,单方向寻道法,磁头从磁盘内环当作起始位置。往磁盘外环移动接收相应的寻道请求,到了外环后迅速回到起始位置。

        C-Look, 单方向寻道法,磁头从磁盘内环当作起始位置。往磁盘外环移动接收相应的寻道请求,到了最外环的寻道请求后迅速回到起始位置。

        N-step-Scan.将寻道请求队列分成N个子队列,每处理子队列请求都采用Scan算法。

        F-Scan。是N-step-Scan的特例,只分成两个子队列,每处理子队列请求都采用Scan算法。

    以上是基本的寻道策略,然而现实情况可能根据磁盘的特点指定出特有的策略,有些硬盘的寻道甚至都不需要程序来完成,硬件帮你做了。

    展开全文
  • 相关题目与解析计算机信息系统打印输出的涉密文件,应当按相应()文件进行管理。A.普通B.一般C.密级涉密信息系统打印输出的涉密文件过程稿,应当按照相应()文件进行管理。A、普通B、一般C、密级D、内涉密计算机信息...

    相关题目与解析

    计算机信息系统打印输出的涉密文件,应当按相应()文件进行管理。A.普通B.一般C.密级

    涉密信息系统打印输出的涉密文件过程稿,应当按照相应()文件进行管理。A、普通B、一般C、密级D、内

    涉密计算机信息系统打印输出涉密文件、资料,应履行审批手续,建立输出台帐,注明打印输出数量和

    计算机会计信息系统中输出方式有显示输出、打印输出、文件输出等。()

    ()是计算机的输出设备,用于打印文档文件、图形图像文件,是一种复杂面精密的机械电子装置。

    以下为微型计算机的外存储器的是()。A.数据文件B.光盘C.文件夹D.打印机

    计算机应每日打印出科目日结单、()、日计表,以及冲账、删账、()等数据信息文件。

    为了做好电子信息的安全工作,秘书应当注意的事项包括()。A.计算机中不要存放保密信息B.打印保密

    计算机网络最基本的功能是()。A.降低成本B.打印文件C.资源共享D.文件调用

    电算化会计信息系统的档案包括()。A.由计算机打印出的凭证、账簿、报表等B.以软盘或其他

    在“我的电脑”窗口中,用户可以看到计算机中所有的()列表。A.磁盘B.文件C.文件夹D.打印机

    一个计算机操作系统通常应具有的功能模块是()。A.CPU的管理、显示器管理、键盘管理、打印机和鼠标

    展开全文
  • 操作系统:文件系统的实现

    千次阅读 2020-12-31 14:39:13
    目录一、文件系统结构二、文件系统实现1.概述2.虚拟文件系统三、目录实现1.线性列表2.哈希表四、磁盘空间的分配方法1.连续分配2.链接分配3.索引分配五、磁盘空闲空间的管理1.位向量2.链表3.组4.计数六、文件系统的...

    一、文件系统结构

    磁盘的逻辑单元为,内存和磁盘之间的I/O传输以为单位执行。

    磁盘的特点

    1. 可以原地重写,可以从磁盘上读一块儿,修改该块,并将它写回到原来的位置
    2. 可以直接访问磁盘上的任意一块。因此,可以方便地按顺序或随机访问文件

    文件系统需要提供高效快捷磁盘访问,以便轻松存储、定位、提取数据。即存储文件、访问文件

    文件系统有两个不同的设计问题

    1. 访问问题:如何定义文件系统对用户的接口
    2. 存储问题:创建数据结构和算法,把逻辑文件系统映射到物理外存设备

    文件系统本身通常由许多不同层组成。每层实际利用更低层功能,创建新的功能,以用于更高层的服务。
    在这里插入图片描述
    设备驱动程序可以作为翻译器,他的输入作为高级指令,输出由底层的、硬件特定指令组成。
    基础文件系统只需向适当设备驱动程序发送命令。
    逻辑文件系统通过文件控制块维护文件结构。
    文件控制块(FCB)包含有关文件的信息,包括所有者、权限、文件内容的位置等。

    大多数操作系统支持多种不同的文件系统,举例:

    • CD-ROM ISO9660 文件格式
    • Unix 文件系统(Unix File System)
    • Windows文件系统:FAT(File Allocation Table),FAT32, FAT64,NTFS(Windows NT File System)
    • Linux 文件系统:可扩展文件系统(Extended file system),分布式文件系统(Distributed File System)

    二、文件系统实现

    1.概述

    在磁盘上,文件系统包括的信息有

    1. 如何启动存储在那里操作系统
    2. 总的块数
    3. 空闲块的数目和位置
    4. 目录结构
    5. 各个具体文件 等

    上述许多结构会在之后详细讲述。这里简述如下:

    • 引导控制块(每个卷):可以包含从该卷引导操作系统的所需信息。如果磁盘不包括操作系统,则这块的内容为空。UFS称为引导块(boot block),NFS称为分区引导扇区(partition boot sector)
    • 卷控制块(每个卷):包括卷的详细信息(分区的块数、块的大小、空闲块的数量和指针、空闲
      FCB 的数量和指针等)。UFS称为超级块儿(super block),NTFS主控文件表(master boot sector)
    • 每个文件的FCB包含该文件的许多详细信息。他有一个唯一的标识号,以便与目录条目相关联
    • 每个文件系统的目录结构用于组织文件

    内存中的信息用于管理文件系统并通过缓存来提高性能,这些数据在安装文件装系统时被加载,在文件系统操作期间被更新,在卸载是被卸载。这些结构类型包括:

    1. 每个进程的打开文件表:包括一个指向系统的打开文件表中合适条目的指针和其他信息
    2. 整个系统的打开文件表:包括每个打开文件的FCB副本和其他信息

    创建一个新文件

    1. 应用程序调用逻辑文件系统。逻辑文件系统指导目录结构的格式,它会分配一个新的FCB
    2. 系统将相应的目录信息读入内存
    3. 更新目录结构和FCB
    4. 将结果写回磁盘

    一旦文件被创建,就能用于I/O,不过,首先他要被打开。系统调用open()将文件名传到逻辑文件系统,系统调用open():

    1. 首先搜索整个系统的打开文件表,查看是否已经被打开,如果是,则在该进程的打开文件表创建一个条目,并指向现有整个系统的打开文件表。
    2. 否则,根据文件名搜索目录结构
    3. 找到后,它的FCB会复制到内存的整个系统的开放文件表中(该表还存放着打开该文件的进程数量) ,接下来,在该进程的打开文件表创建一个条目,并指向现有整个系统的打开文件表。

    Open() 返回值:文件描述符是一个非负整数。它是一进程打开文件表的索引值,指向系统范围内打开文件表相应条目在这里插入图片描述
    在这里插入图片描述

    2.虚拟文件系统

    操作系统如何才能将多个类型的文件系统集成到目录结构中?用户如何在访问文件系统空间时,可以无缝地在文件系统类型间迁移?大多数操作系统采用面向对象的技术来简化、组织、模块化实现。

    数据结构和程序用于隔离基本的操作系统调用的功能与实现细节。因此,文件系统的实现有三个主要层构成。
    第一层为文件系统接口。
    第二层为虚拟文件系统(VFS)把文件系统的通用操作和具体实现分开,虚拟文件系统提供了在唯一标识一个文件的机制。VFS基于vnode 的文件表示结构,它包含了一个数值标识符来唯一表示网络上的一个文件。

    1. VFS能区分不同本地文件系统
    2. VFS能区分本地文件系统和远程文件系统

    在这里插入图片描述
    在这里插入图片描述

    三、目录实现

    1.线性列表

    采用文件名称和数据块指针的线性列表

    • 优点:编程简单
    • 缺点:因为需要搜索,运行较为费时

    2.哈希表

    哈希表根据文件名得到一个值,并返回一个指向线性列表中元素的指针

    • 优点:减少目录搜索时间
    • 缺点:两个文件名哈希到相同的位置时可能发生冲突;因哈希表固定大小,创建文件需要哈希表重建时,比较麻烦。

    四、磁盘空间的分配方法

    1.连续分配

    每个文件在磁盘上占有一组连续的块。 文件的连续分配可以用文件第一块的磁盘地址和连续块的数量(即长度)来定义
    在这里插入图片描述
    连续分配支持顺序访问和直接访问
    问题:当文件需要扩展,文件大小变大时会无法扩展
    解决:找更大的连续空间,复制过去

    基于扩展的连续分配方案
    用以下参数来定义文件

    1. 开始地址
    2. 块儿数
    3. 指向下一个扩展块儿的指针(扩展块儿可以是多个)

    定义格式:
    文件【开始地址,块儿数,指向下一个扩展块的指针】

    2.链接分配

    每个文件是磁盘块儿的链表,磁盘块分布在磁盘的任何地方,文件有起始块和结束块来定义

    定义格式:【起始块,结束块】

    同时,每个磁盘块都有指向下一个磁盘块的地址。

    在这里插入图片描述
    优点:没有磁盘空间浪费
    缺点:

    1. 不支持文件的直接访问
    2. 需要更多的磁盘空间(来记录指针)

    链接分配的一个重要变种是文件分配表
    每个卷的开始部分用于存储文件分配表(File Allocation Table),表中每个磁盘块都有一个FAT条目,并可通过块号索引。(未使用的块为0,使用的块包含下一个块儿号)
    在这里插入图片描述
    目录条目含有文件首块号码,通过这个块号索引的FAT条目包含文件下一块的号码,这个链会继续下去,直到最后一块,最后一块的表条目值为文件结束值。
    在这里插入图片描述

    3.索引分配

    通过将所有指针放在一起,即索引块
    文件用索引块来定义, 每个文件有其索引块。
    在这里插入图片描述
    这里有一个问题,索引块应为多大
    每个文件必须有一个索引块,因此索引块应尽可能小,然而不能太小,否则放不下足够多的指针,为处理这个问题,有如下一些机制:

    1. 链接方案:为了处理大文件,可以将多个索引块链接起来
    2. 多层次索引:用第一层索引块指向一组第二层的索引块,第二层索引块再指向文件块
    3. 组合方案:用于基于UNIX的文件系统,将索引块的前15个指针存储在文件的i-node中。其中,前12个指针指向直接块,剩下3个指针指向间接块
      在这里插入图片描述

    五、磁盘空闲空间的管理

    1.位向量

    空闲空间表实现为位图, 或位向量,每块用一位(bit)表示。1表示块空闲;0表示块已分配

    2.链表

    所有空闲块用链表链接起来,并将指向第一个空闲块儿的指针保存在特殊位置,同时缓存在内存。
    每个块儿含有下一个块儿的指针

    3.组

    将n个空闲块的地址保存在第一个空闲块中。
    这些空闲块中的前n-1个为空,而最后一块包含另外n个空闲块的地址。
    比链表好的是空闲块的地址可以很快找到,而且可以明确一段连续空闲块空间

    例:n=3
    在这里插入图片描述

    4.计数

    基于以下事实:
    通常有多个连续块需要同时分配或释放,尤其是在使用连续分配时。因此记录

    • 记录第一块的地址和紧跟第一块的连续的空闲块的数量。
    • 空闲空间表的每个条目包括磁盘地址数量

    例:
    在这里插入图片描述

    六、文件系统的性能和效率

    磁盘空间的有效使用(效率),取决于

    • 磁盘分配和目录管理算法
    • 保留在文件目录条目中的数据类型

    改善性能的方法:缓存

    1. 缓冲区缓存:一块独立内存,位于其中的块是马上需要使用的
    2. 页面缓存:将文件数据作为页而不是块来缓存。页面缓存使用虚拟内存技术,将文件数据作为页来缓存,比采用物理磁盘块来缓存更高效
    3. 板载高速缓存

    在这里插入图片描述
    如果没有统一缓存,则会由下图情况发生:
    在这里插入图片描述
    系统调用read()和write()会通过缓冲区缓存,然而,内存映射调用需要使用两个缓存,即页面缓存和缓冲区缓存。内存映射先从文件系统中读入磁盘块,并放入缓冲区缓存,由于虚拟内存系统没有缓冲区缓存接口,缓冲缓存内的文件必须复制到页面缓存中。

    采用统一缓冲缓存
    统一缓冲缓存:统一使用缓冲器缓存来缓存进程页和文件数据。
    在这里插入图片描述
    无论是缓存块还是页面都有置换问题
    文件的读入或写出一般是按顺序进行。所以,不适合采用LRU算法,因为最近使用的页面最后才会用甚至根本不会再用。

    顺序访问可以通过马上释放预先读取来加以优化

    1. 马上释放(free-behind):请求下一页时,马上释放上一页
    2. 预先读取(read-ahead):请求页之后的下一个页也一起读入

    七、文件系统的恢复

    目录信息一般事先保存在内存中以加快访问,有时会导致目录结构中的数据和磁盘块中的数据不一致。
    解决:

    1. 一致性检查:比较目录结构中的数据和磁盘块中的数据,尝试着去修正不一致
    2. 备份&恢复:
      I. 备份(backup):利用系统程序来备份数据到其他的存储设备。软盘,磁带
      II. 恢复(recovery):通过从备份来恢复丢失的文件或磁盘

    基于日志结构的文件系统

    • 文件创建涉及到目录结构修改,FCB分配,数据块分配等
    • 所有元数据(meta data)的变化写入日志上,一旦这些修改写到日志,就认为已经提交了。
    • 提交了的事务,并不一定马上完成操作
    • 当整个提交的事务已经完成时,就从日志中删除事务条目
    • 如果系统崩溃,日志文件可能还存在事务,它包含的任何事务虽然已经由操作系统提交了,但还没有完成到文件系统,必须重新执行。
    展开全文
  • Linux驱动开发_设备文件系统详解

    千次阅读 多人点赞 2021-05-11 14:09:24
    以上的前提下是你的设备是流行设备且被操作系统的设备管理器支持的情况下,倘若我们有一个未知的设备,或者是我自己开发的硬件产品,如我们自己写的键盘,我们不使用通用键盘通讯协议,我们非要自己创建一套我们键盘...

     

    目录

    何为设备管理器?

    Linux下dev的作用

    Devfs

    sysfs

    kobject

    udev

    proc


    何为设备管理器?

    设备管理器就是负责管理这台电脑上的外设,当我们通过电脑提供的USB口插入一个键盘、鼠标时设备管理器会与其通讯来确认你插入的到底是一个什么样的设备,然后在创建对应的设备驱动。

    以上的前提下是你的设备是流行设备且被操作系统的设备管理器支持的情况下,倘若我们有一个未知的设备,或者是我自己开发的硬件产品,如我们自己写的键盘,我们不使用通用键盘通讯协议,我们非要自己创建一套我们键盘自己的协议,包括内部架构、PCB都是我们自己设计的,一个全新的键盘,虽然也是键盘但是协议,与硬件架构不同于ISO标准,所以操作系统的设备管理器无法识别,因为设备管理器里没有对应的驱动程序来与你建立通讯,同时你也不符合标准ISO的获取设备类型协议,所以它不知道你到底是个啥。

    这个时候我们就要用到驱动了,驱动就是用来与你的设备建立通讯,并传递给操作系统,在Windows上需要一个配置文件,用来告诉设备管理器某些设备使用什么驱动,所以最初我们安装的时候一般windows上的驱动程序都由配置文件和驱动程序组成,配置文件用来告诉操作系统我们的设备描述信息,并告知操作系统如果遇到这样的设备请调哪个驱动来处理,在通过驱动将数据传递给操作系统,由驱动来解析协议。

    所以驱动就是一个中间层,那么调用驱动就由设备管理器来调用,这一切是由设备管理器来负责完成从设备识别到驱动调用,在这个过程中你的设备要符合iso的通讯标准,否则操作系统不会去认,因为现代操作系统已经遵守iso国际化标准。

    Linux下dev的作用

    最早的Linux版本在Linux内核2.4之前,Linux内核支持外设时的方法是在内核里主动增加你的硬件设备,以及增加你的硬件交互代码,非常麻烦。

    当时如果你有了一个新的设备,需要让Linux支持的话,你需要发邮件去联系Linux内核社区的维护人员,让他们去给你增加你的设备,然后在新的Linux内核上线之后才能看见你的设备,这个时候你的设备存在/dev目录下的。

    用户无法主动去增加自己的设备,这导致了一个问题,当设备不存在时,/dev目录下仍有这个设备,时间久了你会发现/dev目录下充斥着巨多不知名的设备类型,当然因为Linux内核是开源的所以你可以自己手动去维护一个内核版本,但是这个成本太高了。

    Devfs

    为了解决dev的问题,所以到了Linux2.4版本以后,引入了一个devfs,也就是一个设备管理器,用于管理/dev目录,同时增加许多内核库文件,面向用户,允许用户手动调用函数向devfs注册你的设备,然后devfs在将设备注册到内核表中之后,在注册到/dev目录下。

    这解决了一个很大的问题,让Linux内核灵活了很多,因为支持了内核驱动编写的lib库,用户可以通过调用对应的函数来注册自己的设备,并实例化open、write、read这些函数,这个方式是引用自unix技术,使得文件系统用户层不用关心底层代码是如何实现的,只需要调用用户态的open、write、read就能实现对硬件的打开,写入,读取控制方式,这一方法被引用自VFS系统。

    这让Linux不在每次都充斥着许多不知名的设备,因为这样不仅拖累了内核,也让Linux变得非常没有扩展性。

    Devfs很好的解决了这个问题。

    Devfs只是负责管理与注册设备到vfs中。

    如果想知道vfs是如何抽象调用不同的open和write、read函数的可以参见我的这篇文章:Linux嵌入式开发_主设备号与次设备号详解

    sysfs

    sysfs是Linux2.6推出的一个新的文件系统,它的文件挂载点在/sys目录下,在最早刚推出时是没有明确规定挂载在哪个目录下,可以挂载在任意目录下,sysfs的挂载方式与devfs有很大的不同,当我们挂载到/dev下时候,devfs会在这个目录下创建一个文件,并给对应的权限,c表示是字符设备,b是块设备文件, s是socket文件,你可以在/dev目录下使用ls命令看一下

    可以看到最前面有一个c,代表这是一个字符设备,通过使用open函数打开这些文件,然后在通过devfs去在vfs表里去寻找我们的设备对应的模块,调用模块里的open以及read、write的函数指针。

    sys的挂载文件就是一个目录,目录里包含了许多文件,每个文件对应不同的信息,这些文件里描述着设备的所有信息,但是不是由sysfs来注册到vfs内核文件表里的,sysfs只是提供了一组文件操作函数,这系列函数用于注册到VFS虚拟文件系统中关于sysfs的相关表里。

    说到sysfs的具体实现就不得不提一个结构体:kobject

    这里给大家补充一下这个知识

    在VFS虚拟文件系统这块里有这样一个结构体:

    struct kobject {
    	const char		*name;
    	struct list_head	entry;
    	struct kobject		*parent;
    	struct kset		*kset;
    	struct kobj_type	*ktype;
    	struct kernfs_node	*sd; /* sysfs directory entry */
    	struct kref		kref;
    #ifdef CONFIG_DEBUG_KOBJECT_RELEASE
    	struct delayed_work	release;
    #endif
    	unsigned int state_initialized:1;
    	unsigned int state_in_sysfs:1;
    	unsigned int state_add_uevent_sent:1;
    	unsigned int state_remove_uevent_sent:1;
    	unsigned int uevent_suppress:1;
    }

    这个结构体原本是用来存储Linux 设备文件描述信息的,在Linux内核中,使用四大模型来描述Linux设备模型:Bus(总线)、Class(设备类)、Device(设备)、Driver(驱动),这四个都是数据结构体,组成一个Linux设备模型,针对这四个模型,我后面会写文章介绍,这里大家先大致知道这个概念。

    为了方便管理这四个结构体所以就诞生了kobject结构体,这个结构体里对这四大模型结构体进行了封装,并且通过parent指针把所有的层次结构关联起来,可以利用这个结构体找到sys目录下的相联目录

    同时它也具有引用计数的算法,当被引用时计数+1,当被解除一次引用时-1,到引用为0时Linux内核会释放掉这个设备模型,因为Linux内核不可能因为多个用户使用一个驱动设备就去给你分配多个实例化吧,太浪费了。

    并且这个结构体是专门为sysfs诞生的。

    这里给大家简单描述一下kobject结构体里的成员作用:

    kobject

    name:该Kobject的名称,同时也是sysfs中的目录名称。由于Kobject添加到Kernel时,需要根据名字注册到sysfs中,之后就不能再直接修改该字段。如果需要修改Kobject的名字,需要调用kobject_rename接口,该接口会主动处理sysfs的相关事宜。
    
    entry:用于将Kobject加入到Kset中的list_head。
    
    parent:指向parent kobject,以此形成层次结构(在sysfs就表现为目录结构)。
    
    kset:该kobject属于的Kset。可以为NULL。如果存在,且没有指定parent,则会把Kset作为parent(别忘了Kset是一个特殊的Kobject)。
    
    ktype:该Kobject属于的kobj_type。每个Kobject必须有一个ktype,或者Kernel会提示错误。
    sd:该Kobject在sysfs中的表示。
    
    kref:"struct kref”类型(在include/linux/kref.h中定义)的变量,为一个可用于原子操作的引用计数。
    
    state_initialized,指示该Kobject是否已经初始化,以在Kobject的Init,Put,Add等操作时进行异常校验。
    
    state_in_sysfs:指示该Kobject是否已在sysfs中呈现,以便在自动注销时从sysfs中移除。
    
    state_add_uevent_sent/state_remove_uevent_sent:记录是否已经向用户空间发送ADD uevent,如果有,且没有发送remove uevent,则在自动注销时,补发REMOVE uevent,以便让用户空间正确处理。
    
    uevent_suppress:如果该字段为1,则表示忽略所有上报的uevent事件,此成员是为udev提供的
    

    可以看到有许多针对sysfs的变量,最早它是没有的,在Linux2.6版本推出sysfs时,为了支持sysfs文件系统,对kobject进行了修改。

    因为kobject在内核中的主要作用就是描述通过sysfs注册文件设备模型。

    在内核寻找实现时在VFS中会遍历所有的文件链表,其中在2.6以后的版本就会遍历这个链表。

    这里给大家看一下各成员结构体原型:

    kset

    /**
     * struct kset - a set of kobjects of a specific type, belonging to a specific subsystem.
     *
     * A kset defines a group of kobjects.  They can be individually
     * different "types" but overall these kobjects all want to be grouped
     * together and operated on in the same manner.  ksets are used to
     * define the attribute callbacks and other common events that happen to
     * a kobject.
     *
     * @list: the list of all kobjects for this kset
     * @list_lock: a lock for iterating over the kobjects
     * @kobj: the embedded kobject for this kset (recursion, isn't it fun...)
     * @uevent_ops: the set of uevent operations for this kset.  These are
     * called whenever a kobject has something happen to it so that the kset
     * can add new environment variables, or filter out the uevents if so
     * desired.
     */
    struct kset {
    	struct list_head list;
    	spinlock_t list_lock;
    	struct kobject kobj;
    	const struct kset_uevent_ops *uevent_ops;
    };

    参数介绍:

    list/list_lock:用于保存该kset下所有的kobject的链表。
    
    kobj:该kset自己的kobject(kset是一个特殊的kobject,也会在sysfs中以目录的形式体现)。
    
    uevent_ops:该kset的uevent操作函数集。当任何Kobject需要上报uevent时,都要调用它所从属的kset的
    
    uevent_ops:添加环境变量,或者过滤event(kset可以决定哪些event可以上报)。因此,如果一个kobject不属于任何kset时,是不允许发送uevent的。

    kobj_type

    struct kobj_type {
    	void (*release)(struct kobject *kobj);
    	const struct sysfs_ops *sysfs_ops;
    	struct attribute **default_attrs;
    	const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
    	const void *(*namespace)(struct kobject *kobj);
    };

    参数介绍:

    release:通过该回调函数,可以将包含该种类型kobject的数据结构的内存空间释放掉。
    
    sysfs_ops:该种类型的Kobject的sysfs文件系统接口。
    
    default_attrs:该种类型的Kobject的atrribute列表(所谓attribute,就是sysfs文件系统中的文件)。将会在Kobject添加到内核时,一并注册到sysfs中。
    
    child_ns_type/namespace:和文件系统(sysfs)的命名空间有关

    可以看到Linux内核把许多通用的结构体类型都抽象到一个结构体中,在VFS进行遍历时会寻找通用类型在结构体里进行遍历寻找对应的vfs open、wirte、read的实现。

    其中kobj_type里的release用来释放当前模型的内存空间,只有在引用为0的情况下,release才会真正释放,否则只会递减引用。

    当我们在驱动开发时若要使用这个驱动模型的话也提供了对应的函数:

    void kobject_init(struct kobject *kobj, struct kobj_type *ktype)
    int kobject_add(struct kobject *kobj, struct kobject *parent, const char *fmt, ...)
    int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype,              struct kobject *parent, const char *fmt, ...)
    struct kobject *kobject_create(void)
    struct kobject *kobject_create_and_add(const char *name, struct kobject *parent)
    int kobject_set_name(struct kobject *kobj, const char *fmt, ...)//设置kobject名称

    这里只是告诉大家kobject与sysfs的对应关系,sysfs依赖kobject结构体,sysfs会把所有的信息注册到kobject中,供内核维护使用。

    上面说过sysfs注册的文件会挂载在/sys目录下,我们打开sys目录看看:

    这些目录对应不同的类型设备:

    devices:该目录下是全局设备结构体系,包含所有被发现的注册在各种总线上的各种物理设备。一般来说,所有的物理设备都按其在总线上的拓扑结构来显示,但有两个例外即platform devices和system devices。
    
    dev:该目录下存放主次设备号文件,其中分成字符设备、块设备的主次设备号码(major:minor)组成的文件名,该文件是链接文件并且链接到其真实的设备(/sys/devices)。
    
    class:该目录下包含所有注册在kernel里面的设备类型,这是按照设备功能分类的设备模型,每个设备类型表达具有一种功能的设备。每个设备类型子目录下都是这种设备类型的各种具体设备的符号链接,这些链接指向/sys/devices/下的具体设备。 设备类型和设备并没有一一对应的关系,一个物理设备可能具备多种设备类型;一个设备类型只表达具有一种功能的设备,比如:系统所有输入设备都会出现在/sys/class/input之下,而不论它们是以何种总线连接到系统的。
    
    block:该目录下的所有子目录代表着系统中当前被发现的所有块设备。按照功能来说放置在/sys/class下会更合适,但由于历史遗留因素而一直存在于/sys /block,但从linux2.6.22内核开始这部分就已经标记为过去时,只有打开了CONFIG_SYSFS_DEPRECATED配置编译才会有 这个目录存在,并且其中的内容在从linux2.6.26版本开始已经正式移到了/sys/class/block,旧的接口/sys/block为了向后兼容而保留存在,但其中的内容已经变为了指向它们在/sys/devices/中真实设备的符号链接文件。
    
    bus:该目录下的每个子目录都是kernel支持并且已经注册了的总线类型。这是内核设备按照总线类型分层放置的目录结构,/sys/devices中的所有设备都是连接于某种总线之下的,bus子目录下的每种具体总线之下可以找到每个具体设备的符号链接,一般来说每个子目录(总线类型)下包含两个子目录,一个是 devices,另一个是drivers;其中devices下是这个总线类型下的所有设备,这些设备都是符号链接,它们分别指向真正的设备(/sys/devices/下);而drivers下是所有注册在这个总线上的驱动,每个driver子目录下 是一些可以观察和修改的driver参数。
    
    fs:按照设计,该目录使用来描述系统中所有的文件系统,包括文件系统本身和按照文件系统分类存放的已挂载点。
    
    kernel:这个目录下存放的是内核中所有可调整的参数。
    
    firmware:这里是系统加载固件机制的对用户空间的接口,关于固件有专用于固件加载的一套API,在附录 LDD3 一书中有关于内核支持固件加载机制的更详细的介绍;
    
    module:该目录下有系统中所有的模块信息,不论这些模块是以内联(inlined)方式编译到内核映像文件中还是编译为外模块(.ko文件),都可能出现在/sys/module中。即module目录下包含了所有的被载入kernel的模块。
    
    power:该目录是系统中的电源选项,对正在使用的power子系统的描述。这个目录下有几个属性文件可以用于控制整个机器的电源状态,如可以向其中写入控制命令让机器关机/重启等等。
    

    你可以根据你的设备类型注册到对应目录下,当你注册到对应目录下时,都会生成一个与你设备名一致的名字的目录,这个目录会在内核里注册一个kobject结构体与其对应起来,同时里面的parent成员用来指向子目录的层次结构。

    甚至你可以通过修改目录下的一些文件属性来控制硬件.

    如msp700修改背光

    这样做的前提是这个设备驱动支持你这样做,可以根据厂商给的手册。

    因为msp700的驱动是读取这个文件来设置背光的。

    echo 20 > /sys/class/backlight/pwm-backlight/brightness;

    udev

    其实在介绍完sysfs后,udev就非常简单不难理解了,udev是在2.6.x之后推出的,它是在sysfs之后推出的,因为它基于sysfs。

    用来管理优化devfs的,前面也说过devfs存在一些问题,如不够灵活,无法自动识别设备,当我们插入一个通用usb时,它不能给出usb的名字,当我们设备较多的情况下压根找到哪个是哪个设备,甚至无法知道哪个设备是usb,无法区分设备类型,同时也无法提供对设备的热拔插事件。

    所以udev的推出解决了这个问题,它是依赖sysfs的。

    它通过解析sysfs的目录,并把设备注册到/dev目录下。

    同时会监听热拔插事件提供给用户态,用户就可以知道当前是否有设备插入与弹出。

    它是运行在用户态的,以守护进程的方式运行。

    同时也具有自动识别设备的功能。

    如我们插入一个硬盘,会自动识别为/dev/hda1

    所以我们就可以知道我们的硬盘在哪儿,同时它还为每个设备提供了一个唯一的文件系统统一ID,同时也支持自定义规则。

    如果想修改udev的规则可以在这个文件中修改:

    /etc/udev/udev.conf

    proc

    proc是一种伪虚拟文件系统,存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。

    为什么说它是伪虚拟文件系统,因为它会实时监听系统里内核以及进程的状态,并实时更新文件。

    当我们查看时会发现目录下全是以数字为命名的目录:

    这些数字是PID,这些PID对应进程,也就是说这些目录里存储着每个PID进程的运行状态。

    我们可以随便打开一个看看:

    每个文件对应不同的属性,如就拿cmdline来说,它对应的是启动时的完整命令,我们看打开看看:

    /usr/libexec/goa-identity-service

    fd目录里包含了这个程序目前使用的文件描述符,这些文件描述符是一个符号链接:

    /dev/null
    socket:[58]

    可以看到socket的描述符,port也能看到

    所以在这个目录下你能看到所有的进程相关信息。

    这里给大家介绍一下常见的文件目录作用:

    cmdline:启动当前进程的完整命令,但僵尸进程目录中的此文件不包含任何信息
    
    cwd:指向当前进程运行目录的一个符号链接
    
    environ:当前进程的环境变量列表,彼此间用空字符(NULL)隔开;变量用大写字母表示,其值用小写字母表示
    
    exe:指向启动当前进程的可执行文件(完整路径)的符号链接,通过/proc/N/exe可以启动当前进程的一个拷贝
    
    fd:这是个目录,包含当前进程打开的每一个文件的文件描述符(file descriptor),这些文件描述符是指向实际文件的一个符号链接
    
    limits:当前进程所使用的每一个受限资源的软限制、硬限制和管理单元;此文件仅可由实际启动当前进程的UID用户读取;(2.6.24以后的内核版本支持此功能)
    
    maps:当前进程关联到的每个可执行文件和库文件在内存中的映射区域及其访问权限所组成的列表
    
    mem:当前进程所占用的内存空间,由open、read和lseek等系统调用使用,不能被用户读取
    
    root:指向当前进程运行根目录的符号链接;在Unix和Linux系统上,通常采用chroot命令使每个进程运行于独立的根目录
    
    stat:当前进程的状态信息,包含一系统格式化后的数据列,可读性差,通常由ps命令使用
    
    statm:当前进程占用内存的状态信息,通常以“页面”(page)表示
    
    status:与stat所提供信息类似,但可读性较好,如下所示,每行表示一个属性信息;其详细介绍请参见 proc的man手册页
    
    task:目录文件,包含由当前进程所运行的每一个线程的相关信息,每个线程的相关信息文件均保存在一个由线程号(tid)命名的目录中,这类似于其内容类似于每个进程目录中的内容;(内核2.6版本以后支持此功能)

    proc常见目录介绍:

    apm:高级电源管理(APM)版本信息及电池相关状态信息,通常由apm命令使用
    
    buddyinfo:用于诊断内存碎片问题的相关信息文件
    
    cmdline:在启动时传递至内核的相关参数信息,这些信息通常由lilo或grub等启动管理工具进行传递
    
    cpuinfo:处理器的相关信息的文件
    
    crypto:系统上已安装的内核使用的密码算法及每个算法的详细信息列表
    
    devices:系统已经加载的所有块设备和字符设备的信息,包含主设备号和设备组(与主设备号对应的设备类型)名
    
    diskstats:每块磁盘设备的磁盘I/O统计信息列表;(内核2.5.69以后的版本支持此功能)
    
    dma:每个正在使用且注册的ISA DMA通道的信息列表
    
    execdomains:内核当前支持的执行域(每种操作系统独特“个性”)信息列表
    
    fb:帧缓冲设备列表文件,包含帧缓冲设备的设备号和相关驱动信息
    
    filesystems:当前被内核支持的文件系统类型列表文件,被标示为nodev的文件系统表示不需要块设备的支持;通常mount一个设备时,如果没有指定文件系统类型将通过此文件来决定其所需文件系统的类型
    
    interrupts:X86或X86_64体系架构系统上每个IRQ相关的中断号列表;多路处理器平台上每个CPU对于每个I/O设备均有自己的中断号
    
    iomem:每个物理设备上的记忆体(RAM或者ROM)在系统内存中的映射信息
    
    ioports:当前正在使用且已经注册过的与物理设备进行通讯的输入-输出端口范围信息列表;如下面所示,第一列表示注册的I/O端口范围,其后表示相关的设备
    
    kallsyms:模块管理工具用来动态链接或绑定可装载模块的符号定义,由内核输出;(内核2.5.71以后的版本支持此功能);通常这个文件中的信息量相当大
    
    kcore:系统使用的物理内存,以ELF核心文件(core file)格式存储,其文件大小为已使用的物理内存(RAM)加上4KB;这个文件用来检查内核数据结构的当前状态,因此,通常由GBD通常调试工具使用,但不能使用文件查看命令打开此文件
    
    kmsg:此文件用来保存由内核输出的信息,通常由/sbin/klogd或/bin/dmsg等程序使用,不要试图使用查看命令打开此文件
    
    loadavg:保存关于CPU和磁盘I/O的负载平均值,其前三列分别表示每1秒钟、每5秒钟及每15秒的负载平均值,类似于uptime命令输出的相关信息;第四列是由斜线隔开的两个数值,前者表示当前正由内核调度的实体(进程和线程)的数目,后者表示系统当前存活的内核调度实体的数目;第五列表示此文件被查看前最近一个由内核创建的进程的PID
    
    locks:保存当前由内核锁定的文件的相关信息,包含内核内部的调试数据;每个锁定占据一行,且具有一个惟一的编号;如下输出信息中每行的第二列表示当前锁定使用的锁定类别,POSIX表示目前较新类型的文件锁,由lockf系统调用产生,FLOCK是传统的UNIX文件锁,由flock系统调用产生;第三列也通常由两种类型,ADVISORY表示不允许其他用户锁定此文件,但允许读取,MANDATORY表示此文件锁定期间不允许其他用户任何形式的访问
    
    mdstat:保存RAID相关的多块磁盘的当前状态信息,在没有使用RAID机器上
    
    meminfo:系统中关于当前内存的利用状况等的信息,常由free命令使用;可以使用文件查看命令直接读取此文件,其内容显示为两列,前者为统计属性,后者为对应的值
    
    mounts:在内核2.4.29版本以前,此文件的内容为系统当前挂载的所有文件系统,在2.4.19以后的内核中引进了每个进程使用独立挂载名称空间的方式,此文件则随之变成了指向/proc/self/mounts(每个进程自身挂载名称空间中的所有挂载点列表)文件的符号链接
    
    modules:当前装入内核的所有模块名称列表,可以由lsmod命令使用,也可以直接查看
    
    partitions:块设备每个分区的主设备号(major)和次设备号(minor)等信息,同时包括每个分区所包含的块(block)数目
    
    pci:内核初始化时发现的所有PCI设备及其配置信息列表,其配置信息多为某PCI设备相关IRQ信息,可读性不高,可以用“/sbin/lspci –vb”命令获得较易理解的相关信息;在2.6内核以后,此文件已为/proc/bus/pci目录及其下的文件代替
    
    slabinfo:在内核中频繁使用的对象(如inode、dentry等)都有自己的cache,即slab pool,而/proc/slabinfo文件列出了这些对象相关slap的信息;详情可以参见内核文档中slapinfo的手册页
    
    stat:实时追踪自系统上次启动以来的多种统计信息
    
    swaps:当前系统上的交换分区及其空间利用信息,如果有多个交换分区的话,则会每个交换分区的信息分别存储于/proc/swap目录中的单独文件中,而其优先级数字越低,被使用到的可能性越大
    
    uptime:系统上次启动以来的运行时间
    
    version:当前系统运行的内核版本号
    
    vmstat:当前系统虚拟内存的多种统计数据,信息量可能会比较大,这因系统而有所不同,可读性较好
    
    zoneinfo:内存区域(zone)的详细信息列表
    
    sys:与/proc下其它文件的“只读”属性不同的是,管理员可对/proc/sys子目录中的许多文件内容进行修改以更改内核的运行特性,事先可以使用“ls -l”命令查看某文件是否“可写入”。写入操作通常使用类似于“echo  DATA > /path/to/your/filename”的格式进行。需要注意的是,即使文件可写,其一般也不可以使用编辑器进行编辑。
    
    /proc/sys/debug 子目录
    此目录通常是一空目录;
    
    /proc/sys/dev 子目录
    为系统上特殊设备提供参数信息文件的目录,其不同设备的信息文件分别存储于不同的子目录中,如大多数系统上都会具有的/proc/sys/dev/cdrom和/proc/sys/dev/raid(如果内核编译时开启了支持raid的功能) 目录,其内存储的通常是系统上cdrom和raid的相关参数信息文件。

    上面这些大多数虚拟文件可以使用文件查看命令如cat、more或者less进行查看,有些文件信息表述的内容可以一目了然,但也有文件的信息却不怎么具有可读性。不过,这些可读性较差的文件在使用一些命令如apm、free、lspci或top查看时却可以有着不错的表现。

    除了udev是运行在用户空间以外,其它的所有文件系统都属于内核的一部分。

    在VFS中,会把这些结构体抽象出来,并利于用户调用open函数发生中断时,遍历寻找对应的模块指针。

    它是通过systemd服务进行管理的。

     

    展开全文
  • 目录前言参考文献代码 ...因为代码量较大,建议先把文件系统的逻辑以及各个专业术语的概念如FCB、FAT、用户打开文件表等搞懂再看代码,概念可以看书上p352的预备知识,或者看这篇博客:文件结构。 看完之后再手
  • 操作系统文件管理

    千次阅读 2021-10-24 17:44:41
    4.1.9 文件系统的层次结构 4.2.1 磁盘的结构 4.2.2 磁盘调度算法 4.2.3 减少磁盘延迟时间的方法 4.2.4 磁盘的管理 4.1.1 初识文件管理 问题: 计算机中存放了各种各样的文件,一个文件有哪些属性? 文件内部的数据...
  • 制作一个在线文件管理系统,也不是一件困难的事情,现在来看看相关逻辑程序功能:1、读取目录文件及文件夹信息2、创建文件或文件夹3、编辑、更新文件//备注:用fwrite函数写文件时字符转义问题,函数stripslashes() ...
  • 盘点分布式文件存储系统

    千次阅读 2021-02-08 22:14:23
    在项目的数据存储中,结构化数据通常采用关系型数据库,非结构化数据(文件)的存储就有很多种方式,服务器本地存储、Nas挂载、ftp等等,今天就来盘点一下,分布式文件存储系统
  • 本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 二、课程设计的要求与数据 1. 在...
  • 学生信息管理系统(C语言,带文件操作)

    千次阅读 多人点赞 2021-06-12 10:12:29
    这是本人大一的C语言程序设计的结课设计作业,由于这段时间一直在学习Java,C语言很久没学了,所以在CSDN上找了很多代码,经过对比最终发现博客C语言 学生成绩管理系统 控制台 文件操作(未涉及数据库)最符合我的...
  • linux 文件管理系统

    千次阅读 2021-02-06 16:57:55
    高级格式化:分区之后对分区进行,创建文件系统。 2、元数据区和数据区 文件系统分为元数据区和数据区。 元数据区存放文件元数据(inode (index node)),元数据指文件的大小、权限、属主属组、时间戳、数据块指针,...
  • 操作系统实验 文件复制/复制文件

    千次阅读 2021-01-09 16:37:34
    文件系统是使用计算机信息系统的重要接口,通过使用文件系统的系统调用命令操作文件,以达到对文件系统实现功能的理解和掌握。 2、了解Windows的文件系统时如何管理保存在磁盘、光盘等存储介质上的信息。并通过文件...
  • Linux文件系统课后作业

    千次阅读 多人点赞 2021-03-23 21:47:01
    2、若盘块大小为4KB,块地址用4字节表示,文件系统采用索引组织方式,索引项0至索引项9为直接索引,索引项10为一级间接索引,索引项11为二级间接索引,索引项12为三级间接索引。若文件索引节点已在内存中,请计算读出文件...
  • Linux目录结构和Windows目录结构差异 Windows目录结构 按照盘符划分,每个分区下都有一...一切皆是文件(包括/dev目录下的设备文件); 小型、单一用途的程序; 配置数据放置于文本。 Linux目录树思维导图 Linux挂载
  • 什么是星际文件系统(IPFS)

    千次阅读 2020-12-29 22:29:16
    星际文件系统(IPFS)会是将来一个非常重要的技术。IPFS的全称是Interplanetary File System,是一种p2p的文件分享系统,目的是要改变信息分发的方式。它在通信协议和分布式系统方面都有几项创新。我们先来看一下它...
  • 操作系统实验五:文件管理

    千次阅读 2021-01-21 17:51:50
    操作系统期末复习总结(SUES版): ...实验五 文件管理 一、实验要求 (1)了解文件权限及作用; (2)掌握文件权限的设置; ...(5)理解文件系统管理文件的实现机制。 二、实验内容 (1)验证实验:
  • Linux系统文件以及目录介绍

    千次阅读 2021-05-08 22:57:58
    linux文件系统介绍FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式,FHS 定义了系统中每个区域的用途、所需要的最小构成的文件和目录同时还给出了例外...
  • 学生信息管理系统(GUI界面布局+java版本+文件保存)

    千次阅读 多人点赞 2021-01-29 17:43:45
    学生信息管理系统(GUI界面布局) 有需要的可以自行下载 附图如下: 链接:https://download.csdn.net/download/qq_52889967/14954612
  • 文章目录5.1 文件管理概述5.2 文件结构5.2.1 文件的逻辑结构5.2.2 文件的物理结构5.3 文件目录管理5.4 文件的存储设备5.4.1 文件的存储...所以在操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存
  • 本文实例为大家分享了python实现学生信息管理系统的具体代码,供大家参考,具体内容如下代码#存放学生信息student = list()#展示菜单def showMenu():print("1.增加学生信息")print("2.删除学生信息")print("3.修改...
  • 因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但...
  • 这个系统的主要有三个角色权限,管理员、老师、学生,系统功能模块包括用户管理、班级信息管理、教师信息管理、学生信息管理、科目信息管理、成绩信息管理。 根据本系统的研究现状和发展趋势,系统从需求分析、结构...
  • 电脑重装系统后怎么恢复原来的文件?计算机文件(或称文件、电脑档案、档案),是存储在某种长期储存设备上的一段数据流。所谓“长期储存设备”一般指磁盘、光盘、磁带等。其特点是所存信息可以长期、多次使用,不会...
  • Linux磁盘管理与文件系统(实验详解,一看就懂)

    万次阅读 多人点赞 2021-01-27 22:05:28
    磁盘管理与文件系统一、磁盘管理1.1 磁盘结构1.2 MBR与磁盘分区表示1.2.1 MBR1.2.2 磁盘分区表示二、文件系统2.1 文件系统类型2.2 检测并确认新硬盘2.3 管理磁盘分区2.4 创建文件系统2.5 创建文件系统swap2.6 挂载、...
  • GFS分布式文件系统(理论+实操)

    千次阅读 2021-03-01 18:43:58
    2、条带卷3、复制卷4、分布式条带卷5、分布式复制卷二、GFS分布式文件系统部署步骤(一)、环境准备:(二)、添加磁盘,所有主机添加步骤都相同(除了client客户机),格式化并挂载(三)、防火墙设置和GFS集群开局...
  • 第11章文件系统实现 1、文件系统的两大组成部分:一组文件、目录结构 2、操作系统中与管理文件有关的软件和数据称为文件系统 3、文件系统提供了在线存储和访问计算机操作系统和所有用户的程序与数据的机制。...
  • 书面作业:文件系统1

    千次阅读 2021-01-05 19:49:10
    在某个文件系统中,每个盘块为512个字节,文件控制块占64个字节,其中文件名占8个字节。如果索引节点编号占2个字节,对一个存放在磁盘上256个目录项的目录,试着比较引入索引节点前后,为找到其中一个文件的FCB,...
  • 一、default.prop 配置信息、 二、修改 default.prop 配置信息文件
  • 在Linux中,所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是...虚拟文件系统其实就是一个目录树,树上不同的节点可以映射到物理的文件地址,也可以进行挂载,相当于一个解耦层,在具体的文件系统之上
  • 当数据集的大小超过一台独立的物理计算机的存储能力时,就有必要对他进行分区存储到若干台单独的计算机上,管理网络中跨多台计算机存储的文件系统称为分布式文件系统(Distributed FileSystem)。 Educo

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,377,486
精华内容 1,350,994
关键字:

文件系统信息