zoukankan      html  css  js  c++  java
  • 20191221 十一章学习笔记

    在Linux下,命令
    mke2fs [-b blksize -N ninodes] device nblocks
    在设备上创建一个带有nblocks个块(每个块大小为blksize字节)和ninodes个索引节点的EXT2文件系统。
    举例:
    dd if=/dev/zero of=vdisk bs=1024 count=1440
    mke2fs vdisk 1440
    在vdsik的虚拟擦盘文件上创建一个EXT2文件系统。
    超级块:
    s_first_data_block: 0表示4KB块大小,1表示1KB块大小。它用于确定块组描述符的 起始块,即 s_first_data_block + 10
    s_log_block_size :确定文件块大小,为 lKB*(2**s_log_block_size),例如:0 表示 1KB块大小,1表示2KB块大小,2表示4KB块大小等。最常用的块大小是用于小文件系 统的1KB和用于大文件系统的4KB。
    s_mnt_count :已挂载文件系统的次数。当挂载计数达到max mnt count时,fsck会话 将被迫检查文件系统的一致性。
    s_magic:文件系统类型的幻数。EXT2/3/4文件系统的幻数是0xEF53
    块和索引节点位图
    Block#8 :块位图(Bmap)(bg_block_bitmap)位图是用来表示某种项的位序列,例如 磁盘块或索引节点。位图用于分配和回收项。在位图中,0位表示对应项处于FREE状态, 1位表示对应项处于IN_USE状态。一个软盘有1440个块,但是Block#。未被文件系统使 用。所以,位图只有1439个有效位。无效位被视作IN_USE,设置为1。
    Block#9 :索引节点位图(Imap) (bg_inode_bitmap) 一个索引节点就是用来代表一个 文件的数据结构° EXT2文件系统是使用有限数量的索引节点创建的。各索引节点的状态用 B9的Imap中的一个位表示。在EXT2 FS中,前10个索引节点是预留的。所以,空EXT2 FS的Imap以10个1开头,然后是0。无效位再次设置为1。
    文件系统的实现分为三个级别:
    每个级别处理文件系统的不同部分。这使得实现过程模块化,更容易理解。在文件系统的实现过程中,FS目录包含实现EXT2文件系统的文件。
    第1级别实现了基本文件系统树。它包含以下文件,实现了指定函数。
    mkdir_creat.c : make directory, create regular file
    ls_cd_pwd.c : list directory, change directory, get CWD path
    rmdir.c : remove directory
    link_unlink.c : hard link and unlink files
    symlink_readlink.c : symbolic link files
    stat.c : return file information
    misc1.c : access,chmod, chown, utime, etc.
    第2级别实现了文件内容读/写函数。
    open_close_lseek.c : open file for RBAD | WRITE|APPEND,close file and lseek
    read.c : read from file descriptor of an opened regular file
    write.c : write to file descriptor of an opened regular file
    opendir_readdir.c : open and read directory
    第3级别实现了文件系统的挂载、卸载和文件保护。
    mount__umount.c : mount/umount file systems
    file_protection : access permission checking
    file-locking : lock/unlock files
    文件锁定
    文件锁定机制允许进程对一个文件或文件的某些部分设置文件锁,以防止在更新文件时出现竞态条件。文件锁可共享(允许同步读取),也可独占(执行独占写)。文件锁既可以是强制性的,也可以是建议性的。例如, Linux既支持共享文件锁,也支持独占文件锁,但文件锁定只是建议性的。在 Linux I中,文件锁可通过ntl(系统调用设置,也可通过fock系统调用操作。为简单起见,我们假设一种非常简单的文件锁定。

    当一个进程试图打开一个文件时,将会检查目标操作模式的兼容性。唯一容模式是读模式。如果已经为更新模式打开了一个文件,即写读写追加,则该文件无法再次打开。但是,这并不会阻止相关进程(例如父进程和子进程)修改父进程打开的同一文件,而且在Unix/ Linux中同样如此。在这种情况下,文件系统只能保证每个写操作是原操作,但不能保证进程的写入顺序,写入顺序取决于进程调度。

    文件系统项目的扩展
    简单的EXT2文件系统使用1KB块大小,只有一个磁盘块组它可以轻松进行以下扩展。

    (1)多个组:组描述符的大小为32字节对于1KB大小的块,一个块可能包含

    1024/32=32组描述符。32个组的文件系统大小可以扩展为32*8=256MB

    (2)4KB大小的块:对于4KB大小的块和一个组,文件系统大小应为4*8=32MB。

    对于一个组描述符块,文件系统可能有128个组,可将文件系统大小扩展到128*32=4GB

    对于2个组描述符块,文件系统大小为8GB等。大多数扩展都很简单,适合用于编程项目。

    (3)管道文件:管道可实现为普通文件,这些文件遵循管道的读/写协议。此方案的优点是:它统一了管道和文件索引节点,并允许可被不相关进程使用的命名管道。为支持快速读/写操作,管道内容应在内存中,比如在 RAMdisk中。必要时,读者可将命名管道实现为FIFO文件。

    (4)I/O缓冲:在编程项目中,每个磁盘块都是接读写的。这会产生过多的物理磁盘I/O操作。为提高效率,实际文件系统通常使用一系列I缓冲区作为磁盘块的缓存内存。文件系统的IO缓冲将会在第12章中讨论,但是可把它合并到文件系统.

  • 相关阅读:
    [转]windows Mobile使用ActiveSync上网
    C++剪切板操作
    jdk1.8源码分析hashMap
    【杂项】VMware 虚拟机安装ubuntu 16.04教程
    【Linux命令】数据流重定向
    【ceph | 运维】crush相关命令
    【Linux命令】更改hostname
    【Linux命令】sed命令
    【Linux命令】vim基本快捷键
    【Linux命令】install
  • 原文地址:https://www.cnblogs.com/ginjzlbg/p/15418052.html
Copyright © 2011-2022 走看看