- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统讲义-第七章
1、打开文件open 检索目录。内核调用namei从根目录或从当前目录,沿目录树查找指定的索引结点。若未找到或该文件不允许存取,则出错处理返回NULL,否则转入下一步; 分配内存索引结点。如果该文件已被其它用户打开,只需对上一步中所找到的i结点引用计数+1,否则应为被打开文件分配一内存i结点,并调用磁盘读过程将磁盘i结点的内容拷贝到内存i结点中,并设置i.count=1; 分配文件表项。为已打开的文件分配一文件表项,使表项中的f.inode 指向内存索引结点; 分配用户文件描述表项。 创建文件creat 核心调用namei,从根目录或当前目录开始,逐级向下查找指定的索引结点。此时有以下二种情况: 重写文件。namei找到了指定i结点,调用free释放原有文件的磁盘块。此时内核忽略用户指定的许可权方式和所有者,而保持原有文件的存取权限方式和文件主。最后打开。 新建。namei未找到。调用ialloc,为新创建的文件分配一磁盘索引结点,并将新文件名及所分配到的i结点编号,写入其父目录中,建立一新目录项。利用与open相同的方式,把新文件打开。 关闭文件close 根据用户文件描述符fd,从相应的用户文件描述符表项中,获得指向文件表项的指针fp,再对该文件表项中的f.count-1。 Linux 文件系统总结 Linux将文件系统分为 虚拟文件系统 基于磁盘的实文件系统 网络文件系统 通过各种缓冲机制提高访问外设的效率 通过将文件控制块分解为inode和目录文件提高了对文件的操作效率 西安财经学院 1.虚拟文件系统 VFS的主要功能包括: 记录可用的文件系统的类型; 把设备与对应的文件系统联系起来; 处理一些面向文件的通用操作; 涉及针对具体文件系统的操作时,把它们映射到与控制文件、目录文件及inode相关的物理文件系统。 一个分区或磁盘能作为文件系统使用前,需要初始化,并将记录数据结构写到磁盘上。这个过程就叫建立文件系统。 VFS只存在内存中,在系统启动时产生,在系统关闭时注销 . UNIX类文件系统的通用结构 超级块superblock, i节点inode, 目录项dentry。 超级块包括文件系统的总体信息,比如大小(其准确信息依赖文件系统)。 i节点包括除了名字外的一个文件的所有信息。 目录项包括文件名和文件的i节点指针。 linux系统中VFS 子系统的总体架构 包括超块(superblock)、索引节点(或 inode)、目录项(或 dentry)和文件(或file)对象。 1超块对象 存储一个已加载的文件系统的信息。对于基于磁盘的文件系统,这个对象与一个存储在磁盘上的文件系统的控制块对应。 2inode对象 存储一个特定系统中的文件的通用信息。包含在这个文件系统中的文件标识符。 3 file对象 存储在进程和打开的文件之间的互动信息。该对象只在进程打开这个文件时在内存中存在。 4dentry对象 存储与该文件对应的目录项的链接信息。磁盘中也有该文件系统目录项的相关信息。 VFS超级块 struct super_block{ kdev_t s_dev; //包含该文件系统的主、次设备号,如0x301代表/dev/hda1 unsigned long s_blocksize; //文件系统的块大小,以字节为单位 unsigned char s_lock; //锁定标志,置位表示拒绝其它进程访问 unsigned char s_dirt; //已修改标志 struct file_system_type *s_type; struct super_operations *s_op; //指向一组操作该文件系统的函数 struct inode *s_covered; //指向安装点目录项的inode节点 struct inode *s_mounted; //指向被安装文件系统的第一个inode节点 struct wait_queue *s_wait; //在该超级块上等待的队列 union{ struct minix_sb_info minix_sb; //minix文件系统的超级块 。。。。 }u; }; VFS inode struct inode{ kdev_t i_dev; //所在设备的设备号 unsigned long i_ino; //外存inode的节点号 umode_t i_mode; //表示文件类型以及存取权限 nlink_t i_nlink; //连接到该文件的link数 uid_t i_uid; //拥有此文件的用户的标识号 kdev_t i_rdev; //所在设备的设备号 off_t i_
文档评论(0)