<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p><img src="https://img-blog.csdnimg.cn/direct/a12a291ea55b4dfa9eefc0bdba790ccf.png#pic_center" alt="在这里插入图片描述" /></p>
讯享网
文件系统可以向上提供以下几种功能:创建文件(creat系统调用)、删除文件(delete系统调用)、打开文件(open系统调用)、读取文件(read系统调用)、写入文件(write系统调用)、关闭文件(close系统调用)。可用几个基本操作完成更复杂的操作,比如:“复制文件”:先创建一个新的空文件,再把源文件读入内存,再将内存中的数据写到新文件中。
1.功能介绍:通过提供文件名、存储地址、所需空间大小等参数创建文件;
2.执行流程:
(1)在外存中找到空间(通过空闲链表、位图、成组链接等空闲盘块管理算法);
(2)创建目录项,目录项包含文件名、地址等。
1.功能介绍:通过提供文件名、存储地址等参数删除文件;
2.执行流程:
(1)找到文件目录项;
(2)通过目录项找到文件存储位置,回收文件所占磁盘块;
(3)删除目录项。
1.功能介绍:通过提供文件名、存储地址、操作类型等参数打开文件;
2.执行流程:
(1)找到文件的目录项,检查用户是否具有操作权限;
(2)将目录项复制到内存中的“打开文件表”中,系统会将文件的索引号(这个“索引号”,也称“文件描述符”)返回给用户,之后用户使用打开文件表的索引号来指明要操作的文件,即之后用户进程再操作文件就不需要每次都重新查目录了,这样可以加快文件的访问速度;
3.注意事项:
(1)打开文件时并不会把文件数据直接读入内存,而是将目录项复制到内存的“打开文件表”中,而读文件会将文件数据从外存读入内存。
1.功能介绍:通过打开文件表中的索引号,定位读指针,并从读指针指向的外存中,将用户指定大小的数据读入用户指定的内存区域中。
2.执行流程:
(1)找到打开文件表中文件对应的索引号;
(2)指明读取数据大小、位置。
3.注意事项:
(1)打开文件时并不会把文件数据直接读入内存,而是将目录项复制到内存的“打开文件表”中,而读文件会将文件数据从外存读入内存。
1.功能介绍:通过打开文件表中的索引号,从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存。
2.执行流程:
(1)找到打开文件表中文件对应的索引号;
(2)指明写入数据大小、保存位置。
1.功能介绍:关闭打开的文件。
2.执行流程:
(1)删除进程打开文件表相应表项;
(2)系统打开文件表的打开计数器count减1,若count=0,则删除对应表项;
(3)回收分配给该文件的内存空间等资源。
首先,读取磁盘文件首先要通过open系统调用从磁盘中打开文件,之后,read系统调用从打开文件表中找到该文件并读取。
- open系统调用过程:用户提供路径和文件名两个信息,操作系统根据路径和文件名找到FCB并调入内存。调入内存的是FCB,不是文件,且FCB中也仅仅只有文件的一个指针,并在打开文件表中添加表项,此时open系统调用返回一个文件描述符(文件对应打开文件表表项的索引值)。
- read系统调用过程:用户程序使用文件描述符查找文件是否在内存中。注意,read时不需要提供路径和文件名,只需要提供文件描述符即可,此时用户程序从用户态变换到核心态,如果发现文件不在内存的话,就产生中断,进程阻塞,等待将数据调入内存。
写在后面
这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!
参考资料
[1]王道408教材(2025版)
[2]王道课程资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/184592.html