1 / 39

第七章 文件系统

信息项 信息项 … 信息项 … 信息项. 读 ( 写 ) 指针. 第七章 文件系统. 7.1 文件与文件系统 文件 具有符号名而且在逻辑上具有完整意义的信息项的序列。 文件系统 文件与管理文件的程序集合。. UNIX 文件分类. UNIX 文件分类 普通文件 内容可以是程序、数据、图象等,保存在磁盘块中 目录文件 ( 文件名,文件号 ) 序列,保存在磁盘块中 特殊文件 设备 设备作为文件管理. 7.2 文件的访问方式. 顺序访问 从文件起始位置开始顺序访问 从文件中间某处开始顺序访问 随机访问

zayit
Télécharger la présentation

第七章 文件系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 信息项 信息项 … 信息项 … 信息项 读(写)指针 第七章 文件系统 • 7.1 文件与文件系统 • 文件 • 具有符号名而且在逻辑上具有完整意义的信息项的序列。 • 文件系统 • 文件与管理文件的程序集合。

  2. UNIX文件分类 • UNIX文件分类 • 普通文件 • 内容可以是程序、数据、图象等,保存在磁盘块中 • 目录文件 • (文件名,文件号)序列,保存在磁盘块中 • 特殊文件 • 设备 • 设备作为文件管理

  3. 7.2 文件的访问方式 • 顺序访问 • 从文件起始位置开始顺序访问 • 从文件中间某处开始顺序访问 • 随机访问 • 按记录编号随机访问 • 按关键字(key)随机访问

  4. 7.3 文件的组织 • 逻辑组织 • 用户看到的文件组织形式 • 记录式文件:记录的序列 • 等长记录 • 不等长记录 • 流式文件:字节的序列 • 物理组织 • 逻辑组织到磁盘块的映射 • 文件:记录(字节)序列 • 磁盘:块(block)序列 变换关系

  5. 7.3.2 文件的物理组织 • 考虑因素 • 记录格式 • 等长或不等长, 流式不必考虑 • 空间开销 • 除保存文件内容之外的存储开销 • 访问速度 • 随机访问速度 • 长度变化 • 动态增长

  6. 磁盘空间 … 块18 块19 块20 块21 块22 ... … 首块=18 块数=5 ... FCB 顺序结构: 一个文件占有若干连续的磁盘块。 优点:速度快,节省空间 缺点:长度变化困难

  7. 磁盘空间 … 块18 ... 块80 ... 块92 ... … 首块=18 块数=3 ... FCB 链接结构: 一文件可存于不连续块中,块间以指针相连。 优点:节省空间,长度变化容易。 缺点:随机访问速度慢。

  8. 块18 块19 ... 块26 ... 块30 ... 索引结构: 一文件可存于不连续块中,块号记在索引块中。 优点:速度快,长度变化容易。 缺点:索引块占空间。 磁盘空间 … 索引块=29 块数=4 ... 索引块29 FCB

  9. Hash结构: 计算地址: hash(key)=addr (在磁盘或文件中的存放位置) 问题:给定key1key2 hash(key1)=addr1; hash(key2)=addr2; addr1=addr2 (conflict) Conflict resolution: 顺序探查法: 如发生冲突,则在冲突位置开始顺序探查第一个空闲的存储位置。

  10. UNIX文件物理结构(索引+链接) 最大=10+256+2562+2563(块) ... … i_addr[0] ... i_addr[9] i_addr[10] i_addr[11] i_addr[12] ... ... ... ... ... ... inode ...

  11. 7.4 文件目录 • 文件控制块与目录项 • 文件控制块(FCB) • 文件存在的标志,其中保存系统管理文件需要的全部信息 • 目录项 • 目录文件中的一项,内容为FCB • 文件目录与目录文件 • 文件目录 • 用于检索文件的目录 • 目录文件 • 内容为目录项的文件

  12. FCB(File Control Block) 文件名 文件号 文件主 文件类型 文件属性 共享说明 文件长度 文件地址 建立日期 最后修改日期 最后访问日期 口令 其它 FCB创建:建立文件时 FCB撤消:删除文件时

  13. 单级目录(Single-Level Directory) A single directory for all users. 缺点: 1. Naming problem 2. Grouping problem

  14. 两级目录(Two-Level Directory) Separate directory for each user.

  15. 多级目录(Multi-Level Directory as in UNIX) root bin usr lib dev etc unix users bin Li Wang console lp passwd cc vi d2 s d1 yacc f2 f1

  16. Multi-Level Directory(UNIX) • 特点: • Efficient searching • Grouping Capability • Current directory (working directory) • cd /root/usr/users/wang/d1 • type f1

  17. 文件目录的查找 • 查找路径 • 由根目录开始查找 • 由当前目录开始查找 • 查找算法 • 顺序查找(UNIX) • hash查找 • 对分查找(要求文件名排序)

  18. 文件目录的改进 • FCB • 次部:(文件名, 文件号) • (UNIX 16 bytes) • 保存在目录文件中 • 主部:(其它, 链接记数) • (UNIX 32 bytes) • 保存在外存inode区域 • 改进的好处 • 可以提高查找速度(顺序查找) • 可以实现文件链接(link)

  19. 7.5 文件的共享 • 共享目的 • 节省存储空间 • 进程相互通讯 • 文件共享模式 • 不同时使用 • 根据共享说明 • 同时使用 • 根据共享说明和(relaxed)R/W规则

  20. users li wang f2 15 f1 15 f2 f1 i_number=15 文件的共享 • 文件共享的实现 • 公共目录 • 共享说明 • 连接 d1 link(“/usr/users/wang/d1/f1”, “/usr/users/li/f2”) unlink(“/usr/users/wang/d1/f1”)

  21. 7.6 文件的保护、保密与安全 • 保护 • 防止用户对文件进行非授权的访问 • 保密 • 防止文件内容泄露 • 安全 • 防止文件被破坏 • 自然因素 • 人为因素

  22. 7.6.1文件的保护(Protection) • File owner/creator should be able to control: • what can be done • by whom • Types of access • Read • Write • Execute • Append • Delete • List

  23. f1 …… fj …… fn u1 a11….… a1j ……. a1n … … …… … …… ... ui ai1 …… aij ….… ain … … …… … …… ... um am1 ….. amj ….… amn R W E A M D 1. 存取控制矩阵 aij: 特点: 权限规定细,过于繁琐

  24. R W E R W E R W E 文件主 同组用户 其他用户 2. 访问权限说明(UNIX)i_mode i_mode在创建文件时给出,creat(filename, mode) 其后文件主可以修改:chmod(filename, new_mode)

  25. 7.6.2 文件保密 • 口令 • 创建文件时用户规定一个口令,系统将其记在FCB中 • 访问文件要求给出口令,并与FCB中口令比较 • 密码 • 保存时加密(key) • 读取时解密(key)

  26. 7.6.3 文件系统的安全 • Backup • 定期将磁盘上文件复制到磁带上 • 发生故障时由磁带恢复(limited recovery) • 实现方法 • 海量转储:定期将磁盘上文件全部复制到磁带上 • 增量转储:每次只复制修改部分 • 磁盘整理 • 利用转储和恢复可以对磁盘进行整理(使文件物理块连续,空闲盘块连续)

  27. 7.7 文件系统的实现 • 内存所需表目(UNIX) • 用户打开文件表 • u_ofile (每个进程一个) • file (整个系统一个) • 系统打开文件表 • Inode (整个系统一个) • 外存空间的管理 • 空闲块表 • 字位映像图(Linux) • 成组连接 (UNIX approach)

  28. UNIX内存表目: 1. u_ofile (每进程一个) struct user { … int u_ofile[NOFILE]; … } #define NOFILE 15 2. file (系统一个) struct file { char f_flag; //R,W,PIPE char f_count; int f_inode; char *f_offset[2]; }file[NFILE] #define NFILE 100

  29. 3. inode struct inode { int i_flag; char i_count; char i_dev; char i_number; char i_mode; char i_nlink; char i_uid; char i_gid; char i_size0; char *i_size1; int i_addr[8]; int i_lastr; }inode[NINODE]; 表间联系: u_ofile  file (n) (1) file  inode (n) (1)

  30. 表间联系 read(4,…) ... u_ofile 数据块 … … ... read(4,…) … write(2,…) file i_node u_ofile i_list 用户空间 磁盘空间 系统空间

  31. Creat open Close seek Read write Link unlink 7.8 文件系统界面(UNIX系统调用)

  32. fd=creat(pathname,mode) • pathname: 路径名; • mode: 共享说明; • 分配一个inode, 初始化(i_size=0, i_mode=mode, • i_nlink=1, i_count=1) • 2. 填写目录项(name, i_number); • 3. 以写方式打开(填写file 表和u_ofile表); • 4. 返回文件描述符。

  33. fd=open(pathname,mode) pathname: 路径名;mode: 打开方式; fd: 文件描述符(u_ofile表的入口) 1. 查目录找inode(移入内存i_count=1, 如已在内存i_count+1); 2. 权限检查(mode, i_mode, i_uid, i_gid, u_uid, u_gid); 3. 在file表中分配一个表项,指向该内存i_node; 初始化 f_count=1; f_offset=0; f_flag=mode; 4. 在u_ofile中取一表目,指向file表中对应表目; 5. 返回文件描述符fd(在u_ofile表中的入口)。

  34. close(fd) fd: 文件描述符; 1. 由fd查u_ofile找到对应入口; 2. 由u_ofile[fd]找到file表对应入口; 3. f_count--, 如为0, 由f_inode找到对应inode; 4. i_count--, 如为0,i_flag标志有修改,写回外存inode区; 5. u_ofile[fd]=-1(空闲标志)。

  35. 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); 4. 按参数要求调整f_offset指针。

  36. 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计算磁盘块号; 5. 启动IO设备读取盘块到系统缓冲区中 6. 缓冲区信息复制到进程空间(iomove); 7. 返回实际传输字节数nrd。

  37. 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. 修改i_node中文件长度i_size; 8. 返回实际传输字节数nwt。

  38. link(oldpathname, newpathname) oldpathname: 已存在文件名;newpathname: 待连接文件名; 1. 查目录找到oldpathname(inode); 2. 查目录找到newpathname的末级目录; 3. 检查操作合法性; 4. Inode的i_nlink++; 5. (name, i_number)末级目录。 例子:link(“d1/d2/f1”,“d1/d3/f2”) d1,d2,f1: 存在; d1,d3: 存在,f2: 不存在,

  39. unlink(pathname) pathname: 文件路径名; 1. 查目录找到pathname(inode); 2. i_nlink--; 如结果为0, 释放所有磁盘块 (删除文件); 3. 清除末级文件名在末级目录中的登记。 例子: unlink(“d1/d2/f1”) 假定:f1文件号i_number=15; 操作后:d2中原(f1, 15)改为(f1, -1)

More Related