• 二十六、文件系统API(设备在应用间的共享;目录和文件API)


    一、设备咱应用程序之间的共享

    终端

    1、多个进程并行打印,如何保证不混乱

    2、多个进程并行读,就会发生竞争

    GPU(CUDA)

    1、每个CUDA应用程序都是一系列CUDA的API调用

    2、全部有驱动实现调度(隔离)

    磁盘需要支持数据的持久化

    1、应用程序的数据

    (1)可执行文件和动态链接库

    2、用户数据

    3、系统数据

    (1)manpage

    (2)系统配置

    二、文件系统:虚拟磁盘

    目标:

    1、提供合理的API使得多个应用程序能共享数据

    2、提供一定的隔离,使得恶意/错误不会大量奔溃

    存储设备(字节序列)的虚拟化

    1、磁盘(I/O设备)=一个可以读写的字节序列

    2、虚拟磁盘(文件)=一个可以读写动态字节序列

    (1)命名管理

            虚拟磁盘的名称,检索和便利

    (2)数归管理

            随机访问(读写)

    三、虚拟磁盘:命令管理

    信息的局部性:将虚拟磁盘(文件)组织成层次结构

    1、目录树

    目录的根

    1、Windows

    C:\Program Files\

    D:\User

    2、Unix/Linux

    (1)只有一个根目录

    /home/xxx

    3、目录树的拼接

    Unix:允许任意目录”挂载“一个设备代表的目录树

    (1)可以将把设备挂载在任何位置

    1. mount系统调用
    2. int mount(const char *source, const char *target,
    3. const char *filesystemtype, unsigned long mountflags,
    4. const void *data);

    mount /dev/sdb /mnt

    umount mnt

    四、Linux的启动流程

    Linux-minimal运行在‘initramfs’模式

    1、Linux-minimal启动流程

    1. export PATH=/bin
    2. busybox mknod /dev/sda b 8 0
    3. busybox mkdir -p /newroot
    4. busybox mount -t ext2 /dev/sda /newroot #将/dev/sda设备挂载在/newroot
    5. exec busybox switch_root /newroot/ /etc/init

    2、文件的挂载

    文件 = 磁盘上的虚拟磁盘

    挂载文件 = 在虚拟磁盘上虚拟出的虚拟磁盘

    (1)Linux的处理方式

            创建一个loopback(回环)设备

            设备驱动把设备的read/write翻译成文件的read/write

            使用lsblk查看系统中的block devices(strace)

            strace查看挂载的流程

    1. ioctl(3, LOOP_CTL_GET_FREE)
    2. ioctl(4, LOOP_SET_FD, 3)

    五、目录管理

    1、mkdir

    (1)创建一个目录

    (2)可以设置权限

    2、rmdir

    (1)删除一个空目录

    (2)没有”递归删除“的系统调用

            rm -rf 遍历删除

    六、硬链接

    需求:同一个运行库有多个版本

    使用一个链接可以避免一份拷贝

    七、软链接

    软链接:在文件里存储一个跳转提示

    1、软链接也是一个文件

    (1)当引用这文件时,去找另一个文件

    (2)可以跨文件系统,可以链接目录

  • 相关阅读:
    aws elastic beanstalk入门之简单使用
    数据结构之二叉搜索树
    springboot整合mybatisPlus全技巧(2-常用开发技巧:通用字段插入)
    Winodws10测试驱动禁用签名
    手写vue3.0 -项目结构初始化
    scp报错not a regular file - 猫头虎博主为您深入解析
    vue3 prop验证类型
    论文笔记:Few-Shot Named Entity Recognition: An Empirical Baseline Study
    MyBatis(7)MyBatis 是如何进行分页
    C++常用递归函数汇总
  • 原文地址:https://blog.csdn.net/liutit/article/details/125570702