操作系统教程第三版 COSEC.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统教程第三版 COSEC

6.4文件系统其他功能实现 6.4.1 文件系统调用的实现 6.4.2 文件共享 6.4.3 文件空间管理 6.4.4 主存映射文件 6.4.5 虚拟文件系统 6.4.1 文件操作的实现 文件系统提供给用户程序的一组系统调用,包括:建立、打开、关闭、撤销、读、写和控制,通过这些系统调用用户能获得文件系统的各种服务。 文件系统磁盘结构 1 超级块:占用1#号块 2 索引节点区:2#~k+1#块 3 数据区:k+2#~n#为数据块 两个重要数据结构: 1 用户打开文件表: 2 系统打开文件表: 文件系统内部结构 目录项、inode和数据块的关系 文件系统调用 (1) (1)文件的创建 系统调用C语言格式为: int fd, mode; char *filenamep; fd = create (filenamep, mode); 文件系统调用 (2) 文件创建执行过程 ① 为新文件分配索引节点和活动索引节点,并把索引节点编号与文件分量名组成新目录项,记到目录中。 ② 在新文件所对应的活动索引节点中置初值,如置存取权限i_mode,连接计数i_nlink等。 ③ 分配用户打开文件表项和系统打开文件表项,置表项初值。包括在f_flag中置“写”标志,读写位移f_offset清“0”。把各表项及文件对应的活动索引节点用指针连接起来,把文件描述字返回给调用者。 文件系统调用 (3) (2) 文件的删除 删除把指定文件从所在的目录文件中除去。如果没有连接用户(i_link 为“1”),还要把文件占用的存储空间释放。删除系统调用形式为:unlink (filenamep)。在执行删除时,必须要求用户对该文件具有“写”操作权。 文件系统调用 (4) (3)文件的打开(1) 调用方式为: int fd, mode; char * filenamep; fd = open (filenamep, mode); 文件系统调用 (5) 文件打开执行过程(2) ① 检索目录,把它的外存索引节点复制到活动索引节点表。 ②根据参数mode核对权限,如果非法,则这次打开失败。 ③ 当“打开”合法时,为文件分配用户打开文件表项和系统打开文件表项,并为表项设置初值。通过指针建立这些表项与活动索引节点间的联系。把文件描述字,即用户打开文件表中相应文件表项的序号返回给调用者。 文件系统调用 (6) (4)文件的关闭(1) 调用方式为: int fd; close (fd); 文件系统调用 (7) 文件的关闭(2) ① 根据fd找到用户打开文件表项,再找到系统打开文件表项。释放用户打开文件表项。 ② 把对应系统打开文件表项中的f_count减“1”,如果非“0”,说明还有进程共享这一表项,不用释放直接返回;否则释放表项,并找到与之连接的活动索引节点。 ③ 把活动索引节点中的i_count减“1”,若不为“0”,表明还有用户进程正在使用该文件,不用释放而直接返回,否则在把该活动索引节点中的内容复制回文件卷上的相应索引节点中后,释放该活动索引节点。 文件系统调用 (8) (5)读文件(1) 调用的形式为: int nr, fd, count; char buf [ ] nr = read (fd, buf, count); 文件系统调用 (9) 读文件(2) 系统根据f_flag中的信息,检查读操作合法性,再根据当前位移量f_offset值,要求读出的字节数,及活动索引节点中i_addr指出的文件物理块存放地址,把相应的物理块读到缓冲区中,然后再送到bufp指向的用户主存区中。 文件系统调用 (10) 读文件(3) 文件系统调用 (11) (6)写文件 调用的形式为: nw = write (fd, buf, count); buf是信息传送的源地址,即把buf所指向的用户主存区中的信息,写入到文件中。 文件系统调用 (12) (7)文件的随机存取(1) 系统调用的形式为: long lseek; long offset; int whence, fd; lseek (fd, offset, whence); 文件系统调用 (13) 文件的随机存取(2) 文件描述字fd必须指向一个用读或写方式打开的文件,当whence是“0”时,则f_offset被置为offset,当whence是“1”时,则f_offset被置为文件当前位置加上offset。 6.4.2文件共享 1文件的静态共享 2文件的动态共享 3文件的符号链接共享 1文件的静态

文档评论(0)

sunshaoying + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档