• 操作系统之文件的基本操作


    文件的基本操作

    创建文件

    使用create的系统调用,需要提供的主要参数:
    1.所需的外村空间;
    2.文件存放路径;
    3.文件名;
    在这里插入图片描述
    操作系统处理create系统调用时主要做的两件事:
    1.在外存中找到文件所需的空间;
    2.根据文件存放路径的信息找到该目录对应的目录文件,在目录中创建该文件对应的目录项;
    目录项中包含了文件名,文件在外村中的存放位置等信息
    在这里插入图片描述

    删除文件

    使用了Delete的系统调用:需要的参数创建文件,但是没有“所需的外存空间大小”;
    在这里插入图片描述
    操作系统处理Delete系统调用时需要做的事情;
    1.根据文件路径找到对应位置的目录文件;
    从目录文件中找到文件名对应的目录项

    2.根据目录项记录的文件在外存中的存放位置,文件大小等信息,回收文件占用的磁盘快
    在这里插入图片描述

    打开文件

    使用open系统调用;三个参数
    在这里插入图片描述
    open系统调用处理的事情:
    在这里插入图片描述
    在这里插入图片描述

    用户和系统的打开文件表

    1.系统有且仅有一张系统的打开文件表,返回的是对应文件的编号;
    如图,编号就是文件的编号,打开计数器表示了该文件被几个用户进程打开;
    2.用户进程表可以有多个,其中由于对文件读写指针和访问权限不同而被放在表项之中,另外有系统表索引号,用来指向系统的打开文件表中的某一个表项,表示用户对指向的文件进行某些操作;
    3.用户进程的读写指针记录了该进程对用户的读写操作进行到的位置,不同用户的读写指针进行到的位置不一样,因此不同进程的读写指针也不一样;
    4.访问权限则记录了该用户进程所能对该文件进行操作的权限,如果是只读,那么就不能进行写操作等等;
    在这里插入图片描述
    我们可以通过打开文件表份方便的实现某些文件管理功能。如图:在这里插入图片描述

    关闭文件

    在这里插入图片描述

    读文件

    在正式开始读文件的时候,记事本进程已经有了该文件对应的表项,因此记事本进程只需要知道要读的文件对应的文件编号就可以了;
    在这里插入图片描述
    在这里插入图片描述

    写文件

    在这里插入图片描述
    读文件和写文件的区别:
    读文件:从读指针指向的外存区域,将用户指定大小的数据读入用户指定的内存区域中;
    需要明确的信息:指明是哪个文件(提供打开文件表中的文件索引号);指明要读入多少数据;指明要从外存读入的数据存放在内存中的什么位置;
    写文件:从用户指定的内存区域中,将指定大小的数据写回写指针指向的外存;
    需要明确的信息:指明是哪个文件(提供打开文件表中的文件索引号);指明要写出多少数据;指明要写回外存的数据存放在内存中的什么位置;

    文件系统的层次结构

    在这里插入图片描述
    用户接口:文件的基本操作;
    文件目录系统:文件目录;
    存取控制模块:文件保护;
    逻辑文件系统与文件信息缓冲区:文件的逻辑结构;
    物理文件系统:文件的物理结构;
    辅助分配模块:文件存储空间分配管理; 设备管理模块:磁盘管理,和硬件交互;

    举例子来进行说明:
    在这里插入图片描述
    如图,用户给定文件路径,请求删除文件;
    1.用户通过os提供的接口,发出请求删除文件的请求,操作系统执行删除的系统调用;
    2.根据用户提供的文件的路径,os一层层的查找目录,找到文件对应的目录项;
    3.不同的用户有着不同的操作权限,为了保证安全,检查用户是否具有访问权限;
    4.验证了用户的访问权限之后,将用户提供的文件的记录号,转变为对应的逻辑地址;
    5.将文件的逻辑地址转换成实际的物理地址;
    6.向磁盘设备发出请求以删除这条记录;
    7.删除记录后,会有磁盘空闲,将空闲磁盘回收;

  • 相关阅读:
    利用STM32 HAL库实现USART串口通信,并通过printf重定向输出“Hello World“
    易用且免费的在线3D交互编辑器?
    Python之程序调试
    2022/08/20、21、22 day07/08/09:redis的持久化
    数位DP - 带49的数
    Java基础之 JDK8 HashMap 源码分析(中间写出与JDK7的区别)
    软件工程导论——第四章——形式化说明技术
    [机器学习]-分类问题常用评价指标、混淆矩阵及ROC曲线绘制方法-python实现(多分类)
    学会安装Redis数据库到服务器或计算机(Windows版)
    st语言【关键字】
  • 原文地址:https://blog.csdn.net/linjianshaonian_/article/details/127828819