文件系统可以向上提供以下几种功能:创建文件(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]王道课程资料
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/29288.html