




已阅读5页,还剩107页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第七章文件系统 7 1文件与文件系统文件具有符号名而且在逻辑上具有完整意义的信息项的序列 文件系统文件与管理文件的程序集合 UNIX文件分类 普通文件内容可以是程序 数据 图象 MP3等 保存在磁盘块中目录文件 文件名 文件号 序列 保存在磁盘块中特殊文件设备设备作为文件管理的好处界面统一 使用文件与使用设备命令相同 申请设备open 释放close 读read 写write利用文件保护功能可以保护设备 7 2文件的访问方式 顺序访问从文件起始位置开始顺序访问从文件中间某处开始顺序访问随机访问按记录编号随机访问按关键字 key 随机访问 7 3文件的组织 逻辑组织用户看到的文件组织形式记录式文件 记录的序列等长记录 优点 处理方便 速度快 缺点 空间浪费 不等长记录 优点 省空间 缺点 处理不便 速度慢 流式文件 字节的序列 UNIX Windows etc 物理组织逻辑组织到磁盘块的映射文件 记录 字节 序列磁盘 块 block 序列 变换关系 7 3 2文件的物理组织 考虑因素记录格式等长或不等长 流式不必考虑空间开销除保存文件内容之外的存储开销访问速度随机访问速度长度变化动态增长 顺序结构 一个文件占有若干连续的磁盘块 优点 速度快 节省空间缺点 长度变化困难 链接结构 一文件可存于不连续块中 块间以指针相连 优点 节省空间 长度变化容易 缺点 随机访问速度慢 索引结构 一文件可存于不连续块中 块号记在索引块中 优点 速度快 长度变化容易 缺点 索引块占空间 磁盘空间 索引块 29块数 4 FCB 索引块29 Hash结构 计算地址 hash key addr 在磁盘或文件中的存放位置 问题 给定key1 key2hash key1 addr1 hash key2 addr2 addr1 addr2 conflict Conflictresolution 顺序探查法 如发生冲突 则在冲突位置开始顺序探查第一个空闲的存储位置 文件空间 Hash key addr 起始位置 计算addr hash key 对应冲突记数加1 本记录空闲 顺取下一个 标记为占用填记录内容 保存记录 T F 记录内容 查找记录 计算addr hash key 取addr对应记录的冲突记数 count count 0 无此记录 本记录空闲 顺取下一记录 key相等 找到 hash key 相等 count count 1 count 0 无此记录 顺取下一记录 T F F T T F T F T F 删除记录 调用查找过程 key 找到 错误返回 置空闲标志 找到记录 冲突记数 1对应hash key 特点 按关键字检索速度非常快 用途 常用于目录检索 注意 文件可循环使用 满时保存失败 F T UNIX文件物理结构 索引 链接 i addr 0 i addr 9 i addr 10 i addr 11 i addr 12 inode 最大 10 256 2562 2563 块 7 4文件目录 文件控制块与目录项文件控制块 FCB 文件存在的标志 其中保存系统管理文件需要的全部信息目录项目录文件中的一项 内容为FCB文件目录与目录文件文件目录用于检索文件的目录目录文件内容为目录项的文件 文件控制块FCB FileControlBlock 文件名文件号文件主文件类型文件属性共享说明文件长度文件地址建立日期最后修改日期最后访问日期口令其它 FCB创建 建立文件时FCB撤消 删除文件时 单级目录 Single LevelDirectory Asingledirectoryforallusers 缺点 NamingproblemGroupingproblemProtectionproblem 两级目录 Two LevelDirectory Separatedirectoryforeachuser 特点 1 Pathname2 Canhavethesamefilenamefordifferentuser3 Efficientsearching4 Nogroupingcapability root bin usr lib dev etc unix lp cc vi users Li Wang d1 d2 f1 console passwd bin yacc s f2 多级目录 Multi LevelDirectoryasinUNIX clib flib 文件目录的查找 查找路径由根目录开始查找由当前目录开始查找查找算法顺序查找 UNIX hash查找 Solo 对分查找 要求文件名排序 文件目录的改进 FCB次部 文件名 文件号 UNIX16bytes 保存在目录文件中主部 其它 链接记数 UNIX32bytes 保存在外存inode区域 打开时读入内存 改进的好处可以提高查找速度 顺序查找 可以实现文件链接 link UNIX文件卷 volume 组织形式 7 5文件的共享 共享目的节省存储空间 cc vi yacc 进程相互通讯UNIXpipe 文件共享模式不同时使用根据共享说明同时使用根据共享说明和 relaxed R W规则 文件的共享 文件共享的实现公共目录共享说明连接 d1 link usr users wang d1 f1 usr users li f2 unlink usr users wang d1 f1 usr root 7 6文件的保护 保密与安全 保护防止用户对文件进行非授权的访问保密防止文件内容泄露安全防止文件被破坏自然因素人为因素 7 6 1文件的保护 Protection Fileowner creatorshouldbeabletocontrol whatcanbedonebywhomTypesofaccessReadWriteExecuteAppendDeleteList 1 存取控制矩阵 aij 特点 权限规定细 过于繁琐 占较多存储空间 2 访问权限说明 UNIX i mode RWERWERWE 文件主 同组用户 其他用户 文件主判别 访问进程u uid i uid同组用户判别 访问进程u gid i gidi mode在创建文件时给出 creat filename mode 其后文件主可以修改 chmod filename new mode 特权用户 7 6 2文件保密 口令使用创建文件时用户规定一个口令 系统将其记在FCB中访问文件要求给出口令 并与FCB中口令比较特点简单保密性不强 eg 对系统操作员不保密 密码特点对文件内容加密 速度慢 效果好使用保存时加密 key 读取时解密 key 保存时 用一个key启动一个随机数发生器 产生一个随机数序列 将其依此加到文件的各个字中 读取时 用同一个key启动同一个随机数发生器 产生相同随机数序列 将其依次由文件的各个字中减去 线性同余法产生伪随机数 Procedurerandom Varkey integer Beginkey key C1 C2 MODC3End 7 6 3文件系统的安全 Backup 备份 定期将磁盘上文件复制到磁带上发生故障时由磁带恢复 limitedrecovery 实现方法完全转储定期将磁盘上文件全部复制到磁带上恢复 最后一次转储磁带优点 恢复容易缺点 大量冗余增量转储 incrementalbackup 每次只复制上次转储以来修改部分恢复 由初始转储磁带起 利用第二次转储磁带 第三次转储磁带 最后一次转储磁带 逐步恢复到最终版本优点 每次转储数据少缺点 实现麻烦 某次转储磁带发生问题将使恢复困难 7 6 3文件系统的安全 差分转储 differentialbackup 开始进行一次完全转储以后每次备份当天与开始第一次备份不同的数据恢复 利用第一次转储磁带和最后一次转储磁带优点 实现简单 恢复容易磁盘整理利用转储和恢复可以对磁盘进行整理 使文件物理块连续 空闲盘块连续 7 7文件系统的实现 7 7 1内存所需表目系统打开文件表 系统一个 7 7文件系统的实现 7 7 1内存所需表目用户打开文件表 每个进程一个 文件描述符 7 7文件系统的实现 FCB主部文件号共享计数修改标志 系统打开文件表 2 文件描述符 文件描述符 用户打开文件表 15 外存空间的管理 空闲块表空闲块链位示图 bitmap Linux 分给一个文件的磁盘块连续UNIX 成组连接 空闲块管理 成组连接 100个空闲块为一组 组之间相互链接 最前面的组记在超级块中 安装后缓冲到内存 特点 速度快 空间省 空闲块管理 申请时 1 s nfree 1 分配s free s nfree 所指的块 2 s nfree 1 将s free 0 所指的连接块读入内存缓冲区 前202字节复制到filesys 分配s free 0 所指的块 释放时 1 s nfree 100 s free s nfree 释放块号 2 s nfree 100 将s nfree和s free拷贝到释放块中 写回外存 s free 0 释放块号 s nfree 1 7 8文件系统的界面 创建文件命令形式 creat path name fcb args 参数说明Path name 文件路径名Fcb args FCB参数执行步骤 1 为此文件分配一个FCB主部 初始化 文件主 共享说明 创建时间 长度等 2 将文件名和文件号作为FCB次部填到末级目录中 3 以写方式打开例如 creat usr li d1 f1 mode 7 8文件系统的界面 打开文件命令形式 fd open path name mode 参数说明path name 文件路径名 mode 打开方式 执行步骤 1 根据文件路径名查目录找到文件号 和FCB主部 2 合法性检查 根据打开方式 共享说明 用户身份 3 根据文件号查系统打开文件表看该文件是否已被打开 如是共享计数加1 否则取一个空闲的系统打开文件表项并将外存中FCB主部等信息填入此表项 共享计数置为1 4 在用户打开文件表中取一空表项 填写打开方式和读写指针 并指向系统打开文件表的对应表项 返回信息 fd 文件描述符 在用户打开文件表中的入口 它是一个非负整数 7 8文件系统的界面 关闭文件命令形式 close fd 参数说明fd 文件描述符 执行步骤 1 由fd查用户打开文件表 找到系统打开文件表入口 2 系统打开文件表中共享计数减1 如减1后的值为0且修改标志为1 则将此FCB由内存写回外存FCB主部 3 将fd所对应的用户打开文件表项置为空闲 7 8文件系统的界面 指针定位命令形式 seek fd offset 参数说明 fd 文件描述符 offset 新的指针位置 执行步骤 1 由fd查用户打开文件表 得系统打开文件表入口 2 查系统打开文件表 得文件长度 2 检查参数合法性 3 将用户打开文件表中文件读写指针位置设定为offset 后继读写命令由该指针处存取文件内容 7 8文件系统的界面 读文件命令形式 read fd nrd buf 参数说明 fd 文件描述符 nrd 读入记录个数 buf 内存起始位置 步骤 1 由fd查用户打开文件表 找到对应的入口 2 合法性检查 用户打开文件表中所记录的打开方式 存取方式 3 查系统打开文件表 找到文件的地址 4 根据逻辑地址 offset 和物理结构计算物理地址 5 如在缓冲区中 所需字节复制到进程空间buf起始位置 6 否则申请缓冲区 可能多个 链入设备IO队列 若设备空闲启动设备 等待IO传输完成 切换进程 所需字节复制到进程空间buf起始的位置 7 8文件系统的界面 写文件命令形式 write fd nwt buf 参数含义 fd 文件描述符 nwt 写出记录个数 buf 内存起始位置 执行步骤 1 由fd查用户打开文件表 找到对应的入口 2 合法性检查 用户打开文件表中所记录的打开方式 存取方式 3 查系统打开文件表 找到文件的地址 4 根据逻辑地址 offset 和物理结构计算物理地址 5 如果需要 分配磁盘块 6 将内存中由buf起始的nwt个记录复制到缓冲区中 可能多个 缓冲区链入磁盘IO队列 如设备空闲启动设备 7 8文件系统的界面 建立连接命令形式 link old name new name 参数含义 old name 已存在的文件路径名 new name 欲连接的文件路径名 执行步骤 1 查目录找到文件old name的FCB主部 由此得到文件号 2 查目录找到文件new name的末级目录 3 将文件号与new name中末级名字合起来构成一个新的目录项 将其填入new name的末级目录文件中 4 将FCB主部中的连接计数加1 如 link usr Li f1 usr Zhang d2 f2 7 8文件系统的界面 断开连接命令形式 unlink path name 参数含义 path name 文件路径名 执行步骤 1 查目录找到文件path name的FCB主部 2 将连接计数i nlink减1 3 如减1后的值为0 则归还该文件所占用的全部存储块 该文件将被撤销 4 将FCB次部由上级目录中清除 如 unlink usr Zhang d2 f2 UNIX文件系统的实现 内存所需表目 UNIX 用户打开文件表u ofile 每个进程一个 file 整个系统一个 系统打开文件表Inode 整个系统一个 外存空间的管理空闲块表位示图 bitmap Linux 成组连接 UNIXapproach 1 u ofile 每进程一个 structuser intu ofile NOFILE defineNOFILE15 2 file 系统一个 structfile charf flag R W PIPEcharf count intf inode char f offset 2 读写指针 file NFILE defineNFILE100 UNIX内存表目 UNIX系统的FCB structinode 外存 inti mode chari nlink chari uid chari gid chari size0 char i size1 inti addr 8 inti atime 2 inti mtime 2 structinode 内存 inti flag chari count chari dev chari number chari mode chari nlink chari uid chari gid chari size0 char i size1 inti addr 8 inti lastr inode NINODE 表间联系 u ofile file n 1 file inode n 1 write 4 write 4 read 2 用户空间 u ofile u ofile file inode 磁盘空间 系统空间 数据块 i list 表间联系 UNIX外存空间管理 超级块 superblock 1 记载文件卷上k 1块到n 1块中所有空闲块 2 inode区中100个空闲inode 缓存 文件安装 mount 后超级块读入内存 注 占用区域已经记载在各个文件的inode中 Structfilesys ints isize sizeinblocksofilistints fsize sizeinblocksofentirevolumeints nfree numberofincorefreeblocksints free 100 incorefreeblocksints ninode numberofincoreIlistints inode 100 incorefreeInodeschars flock freelistlockingchars ilock ilistlockingchars fmod superblockmodifiedflagchars ronly mountedreadonlyflagchars time 2 currentdateoflastupdateintpad 50 空闲块管理 100个空闲块为一组 组之间相互链接 特点 速度快 空间省 申请时 1 s nfree 1 分配s free s nfree 所指的块 2 s nfree 1 将s free 0 所指的连接块读入内存缓冲区 前202字节复制到filesys 分配s free 0 所指的块 释放时 1 s nfree 100 s free s nfree 释放块号 2 s nfree 100 将s nfree和s free拷贝到释放块中 写回外存 s free 0 释放块号 s nfree 1 空闲块管理 s inode最多可以记载100个空闲inode 编号 申请时 1 s ninode 0 取s inode s ninode 2 s ninode 0 由磁盘inode区顺取100个空闲I节点 i nlink 0 将其编号填入s inode表中 修改s ninode 然后分配 释放时 1 s ninode 100 s inode s ninode i number 释放的 2 s ninode 100 丢弃 空闲inode管理 文件系统界面 UNIX系统调用 creatopencloseseekreadwritelinkunlinkpipe mknodesmountsumountchmodchownerstatefstatechdir fd creat pathname mode pathname 路径名 mode 共享说明 分配一个inode 初始化 i size 0 i mode mode i nlink 1 i uid u uid i gid u gid 2 填写目录项 name i number 3 以写方式打开 填写inode表 file表和u ofile表 4 返回文件描述符 例子 creat d1 d2 f1 mode 假定分配i number 15 f1 15 d2中 1 fd open pathname mode pathname 路径名 mode 打开方式 fd 文件描述符 u ofile表的入口 1 查目录找inode 移入内存i count 1 如已在内存i count 2 权限检查 mode打开方式 i mode共享说明 i uid i gid文件主 组 u uid u gid用户身份 3 在file表中分配一个表项 f count 0的 初始化f count 1 f offset 0 f flag mode f inodep指向inode 4 在u ofile中取一空闲表目 指向file表中对应表目 5 返回文件描述符fd 在u ofile表中的入口 close fd fd 文件描述符 1 由fd查u ofile找到对应入口 2 由u ofile fd 找到file表对应入口 3 f count 如 0转6 4 由f inode找到对应inode f inode指向空 5 i count 如为0 i flag标志有修改 写回外存inode区 6 u ofile fd 1 空闲标志 seek fd whence offset fd 文件描述符 whence 相对位置 0 1 2 3 4 5 头 当前位置 尾 offset 移动量 1 由u ofile fd 找到file表入口 2 由f inode找到内存inode 3 检查参数合法性 i size0 i size1 f offset offset whence 4 按参数要求调整f offset指针 nrd read fd buf count fd 文件描述符 buf 进程空间接收区地址 count 读字节数 1 由u ofile fd 找到file表对应入口 2 检查访问合法性 f flag READ 3 由f inode找到内存inode入口 4 由f offset count和i addr计算访问磁盘块号 可能多个块 和块内字节 bmap函数 5 若缓冲区有 所需字节复制到进程空间由buf起始位置 iomove 6 若缓冲区无 申请空缓冲 可能多个 缓冲区链入设备IO队列 若设备空闲启动设备 切换进程 缓冲区信息复制到进程空间 iomove 7 返回实际传输字节数nrd nwt write fd buf count fd 文件描述符 buf 进程空间发送地址 count 写字节数 1 由u ofile fd 找到file表对应入口 2 检查访问合法性 f flag WRITE 3 由f inode找到内存inode入口 4 由f offset count和i addr计算磁盘地址块号 可能分配盘块 5 申请系统缓冲区 将buf起始count字节送到缓冲区 可多次 6 缓冲区链到设备IO链上 如设备空闲启动设备 7 修改inode中文件长度i size 8 返回实际传输字节数nwt pipe fd intfd 2 1 分配一个inode i count 2 2 分配2个file表目 f flag分别为PipeR和PipeW 读 写指针offset为0 3 分配2个u ofile表目 分别指向2个file表目 4 返回2个文件描述符fd 0 fd 1 分别为u ofile中的2个入口 内存inode表 内存file表 fd 0 fd 1 u ofile表 进程执行pipe fd 之后 内存inode表 内存file表 fd 0 fd 1 u ofile表 fork创建子进程1之后 fd 0 fd 1 父进程 子进程1 内存inode表 内存file表 fd 0 fd 1 u ofile表 fork创建子进程2之后 父进程 子进程1 子进程2 内存inode表 内存file表 fd 0 fd 1 u ofile表 父进程close fd 0 close fd 1 父进程 子进程1 子进程2 内存inode表 内存file表 fd 0 fd 1 u ofile表 子进程1 读者 close fd 1 父进程 子进程1 子进程2 内存inode表 内存file表 fd 0 fd 1 u ofile表 子进程2 写者 close fd 0 父进程 子进程1 子进程2 内存inode表 内存file表 u ofile表 子进程2 写 write fd 1 buf1 count1 子进程1 读 read fd 0 buf0 count0 父进程 子进程1 子进程2 write fd 1 read fd 0 盘块 有缓冲 内存inode表 内存file表 u ofile表 子进程2 写完 close fd 1 父进程 子进程1 子进程2 close fd 1 read fd 0 盘块 有缓冲 内存inode表 内存file表 u ofile表 子进程1 读完 close fd 0 父进程 子进程1 子进程2 fd 0 fd 1 close fd 1 close fd0 Pipe文件同步与互斥 pipe读写同步写满 写者等待 读出后唤醒读空 读者等待 写入后唤醒读写关闭所有读者关闭 写时返回错误信号所有写者关闭 读者立即返回读写互斥i flag ILOCK 管道通讯的局限性 只有相关进程 同一家族进程 能通讯先创建管道再创建子进程 子进程继承父进程打开的文件 包括管道文件 管道是没有名字的文件所有进程都关闭后即被撤销 命名管道 FIFO 长久性通讯机构具有文件名可被打开 读写 关闭和删除任何进程都能找到它即使是不同祖先的进程 也可以利用命名管道进行通信 读取和写入遵循FIFO原则阻塞 管道读 假如没有线程实行写管道操作 读线程将一直阻塞 直到有线程往里面写为止 管道写 假如没有线程实行读操作 写线程将一直阻塞 直到有线程读数据为止 不阻塞 管道读 假如没有线程实行写管道操作 读线程将立即返回 管道写 假如没有线程实行读操作 写线程将立即返回 返回不正确码 1 系统调用mkfifo intmkfifo pathname mode pathname FIFO文件名mode 权限说明0666 所有用户可读可写返回值 正常0 失败 1一旦创建了一个FIFO 就可用open打开它 一般的文件访问函数 close read write等 都可用于FIFO 但lseek不可以 为什么 FIFO例子 includeincludeincludemain unlink FIFO mkfifo FIFO 0666 if fork 0 chars hello n fd open FIFO O WRONLY write fd s sizeof s close fd else fd open FIFO O RDONLY read fd buffer 80 printf s buffer close fd link oldpathname newpathname oldpathname 已存在文件名 newpathname 待连接文件名 1 查目录找到oldpathname inode 2 查目录找到newpathname的末级目录 3 检查操作合法性 4 Inode的i nlink 5 name i number newpathname的末级目录 例子 link d1 d2 f1 d1 d3 f2 d1 d2 f1 存在 d1 d3 存在 f2 不存在 unlink pathname pathname 文件路径名 1 查目录找到pathname inode 2 i nlink 如结果为0 释放所有磁盘块 删除文件 3 清除末级文件名在末级目录中的登记 例子 unlink d1 d2 f1 假定 f1文件号i number 15 操作后 f1的i nlink d2中原 f1 15 改为 f1 1 mknode pathname typeandpermissions dev pathname 节点名 typeandpermissions 节点类型和访问权限 dev 主次设备号 功能 创建特殊文件 1 如非特权用户 失败 2 建立一个i node 初始化 i mode typeandpermission i addr 0 dev 3 填写目录项 structmount intm dev structbuf m bufp 超级块structinode m inodep mount NMOUNT defineNMOUNT5 dev root rk05 makenode创建 usr Li d01 安装 smount dev rk05 usr Li d01 0 卸下 sumount dev rk05 i flag IMOUNT bit 1514131211109876543210 Setgid Setuid 大文件 00普通01字符10目录11块型 i mode i flag ILOCK IUPD IACC IMOUNT IWANT ITEXT 执行该文件进程的身份暂时改为文件主的身份即 u uid i uid u gid i gid 文件主权限 同组用户权限 其他用户权限 smount special pathname directory pathname roflag special pathname 特殊文件名directory pathname 目录文件名 安装节点 roflag 只读标志1 检查是否超级用户 2 找到special pathname文件的inode 用mknode建立 3 合法性检查 特殊块型文件 4 找到directory pathname节点的inode 5 如非目录或引用数大于 错返 6 安装节点inode的i addr 0 设备文件i addr 0 dev 7 读入superblock到buf 按filesys格式解释 8 分配一个mount表项 填写 m dev m bufp m inodep 9安装节点inode的i flag IMOUNT 例子 smount dev disk1 usr d1 0 安装之前 disk1只能作为特殊文件 块序列文件 访问 rawIO 安装之后 d1成为disk1文件卷的根目录 disk1的superblock读入内存缓冲区中 按filesys格式解释 根目录inode读入内存inode区中 内存中inode区是所有安装文件卷共用的 因而在内存inode中有i dev指明inode对应的卷 用于回写 sumount special file name special file name 待卸下卷的特殊文件名 1 查目录找到inode 取dev i addr 0 2 释放特殊文件的inode 3 由dev查mount表 m dev 找到对应superblock 4 系统缓冲区延迟写块写回 5 该卷所有更新i node写回 6 superblock写回 7 释放superblock所占用的缓冲区 8 由m inodep找到安装节点的inode 9 安装节点i flag 10 释放mount表项 chdir pathname pathname 目录路径名 查目录找到pathname的inode 不在内存读入 i count 1 已在内存i count 2 检查权限 3 u cdir当前所指inode的i count 如为0且修改过 写回外存 4 新inode入口 u cdir chown pathname owner group pathname 文件路径名owner 新文件主group 新文件组1 查目录找到文件 inode 2 权限检查 文件主 特权用户 3 更新owner和group i uid i gid 4 inode写回 chmode pathname newmode pathname 路径名 newmode 新权限说明 1 查目录找到文件 inode 2 权限检查 文件主 特权用户 3 更新i mode newmode 4 inode回写 state pathname statbuffer pathname 文件路径名 statbuffer 状态缓冲区 1 查目录找到内存inode 2 inode信息 所有者 大小 权限 属性 链接数 inode号 访问时间等 statbuffer fstate fd statbuffer 1 由u ofile fd 找到file表 2 由file表找到i node 3 i node信息 statbuffer 7 9日志结构文件系统 背景CPU速度越来越快内存容量以接近指数级速度增长磁盘容量 更大更便宜磁盘速度的提高却相对较慢成为系统效率的瓶颈 7 9日志结构文件系统 在UNIX系统中创建一个文件 1 文件名 文件号 写入目录中 2 新文件inode更新 3 目录文件inode更新 长度变化 4 写入文件内容 小量写 smallwrite 一次写修改磁盘块上的一小部分数据假定一次写需要10ms寻道时间 4ms旋转延迟 50 s读写 磁盘访问效率 0 36 延迟写发生故障给一致性带来威胁 LogStructuredFileSystem 日志结构文件系统UCBerkeley的研究人员提出一种全新的文件系统 日志结构文件系统 LSFS将整个磁盘看做一个日志 周期性地追加新日志 写操作并非直接反映到磁盘上 而是被暂时存到内存缓冲区中 其中包括新写的数据 也包括更新数据 当积累到一定规模时 作为一个segment追加到日志的末尾 LSFS结构图 segment1 segmentk newsegment segment结构 summary Inodes directories datablocks 日志结构文件系统 Inodemap Inode存储位置不能由其编号确定 系统维持一个Inodemap 以实现i number到磁盘inode的映射 清洁线程 cleaner 循环扫描磁盘并对segment进行压缩 Cleaner首先读入第一个segment 舍弃过时内容 仍有用的inode和数据块与内存当前segment合并作为新的segment写回磁盘 旧segment被标记为空闲 然后顺序处理下个segment 7 10内存映射文件 背景文件保存于外存 存取速度慢访问之前需要打开每次访问需要经过 打开文件表 读写需要经过I O传输缓冲可以提高速度 但首次访问需要I O内存容量增加 利用率不充分进程虚拟空间大 只使用较小的一部分提示 将文件映射到内存以访问内存的方式访问文件Open mmap 使用 mumap close MemoryMappedFile Block2 Block0 Block3 Block1 文件f1 内存空间 map unmap P2页表 0123 Linux内存映射文件 1 将文件映射到内存区域void mmap void addr size tlen intprot intflag intfd off toff addr为映射区首地址 一般使用NULL 然后系统自动分配一个合适地址len为映射的长度 单位byteprot说明映射区访问属性 PROT READ 读 PROT WRITE 写 PROT EXEC 执行 flag为MAP SHARED表示映射文件共享 MAP PRIVATE表示映射文件不共享fd为打开文件返回的文件描述符off为映射位置的偏移量 设置为0的话 就映射文件的0 len个字节返回值为映射到内存空间的首地址 Linux内存映射文件 2 取消文件映射intmunmap caddr taddr size tlen addr为内存映射的地址 即mmap返回的地址len为映射的字节数 成功返回0 失败返回负数 Linux内存映射文件 3 内存映射与文件同步intmsync void addr size tlen intflags addr为内存映射地址len为长度flags为MS ASYNC MS SYNCMS ASYNC 异步写 调用后就返回不等待写完MS SYNC 等待写完后才返回成功返回0 失败为负 内存映射文件例子 将一个文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版建筑施工安全脚手架租赁及维护服务合同
- 山西考公2025真题
- 二零二五年度环保企业资产重组合同示范文本
- 二零二五年度航空航天装备制造中心场地租赁服务协议
- 2025版配电房土建施工与高压设备安装调试合同
- 2025版大型项目工程承包劳动合同编制参考
- 2025版猎头人才企业人才战略规划与执行合同范本
- 二零二五年度房产投资居间服务合同范本
- 二零二五年度代理记账合同范本注重成本管理
- 二零二五出租专业脚手架租赁及维护保养合同
- 2025年陕西省中考生物试卷试题真题(含答案详解)
- 智人扩散路径重构-洞察及研究
- 三方委托付工程款协议书
- 2026年中考英语复习:初中英语课标词汇 80天语境背诵清单
- “苏超”现象:文化破圈、城市崛起与青年力量的融合交响-2026年高考语文作文热点话题素材积累与实战训练
- 制作教学课件的完整步骤
- 货运企业安全管理规范
- 物业应急管理办法
- 设备调剂管理办法
- 生活污水管网改造提升工程建议书(模板)
- 蓝天救援队规定管理制度
评论
0/150
提交评论