一、设备咱应用程序之间的共享
终端
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)可以将把设备挂载在任何位置
- mount系统调用
- int mount(const char *source, const char *target,
- const char *filesystemtype, unsigned long mountflags,
- const void *data);
mount /dev/sdb /mnt
umount mnt
四、Linux的启动流程
Linux-minimal运行在‘initramfs’模式
1、Linux-minimal启动流程
- export PATH=/bin
- busybox mknod /dev/sda b 8 0
- busybox mkdir -p /newroot
- busybox mount -t ext2 /dev/sda /newroot #将/dev/sda设备挂载在/newroot
- exec busybox switch_root /newroot/ /etc/init
2、文件的挂载
文件 = 磁盘上的虚拟磁盘
挂载文件 = 在虚拟磁盘上虚拟出的虚拟磁盘
(1)Linux的处理方式
创建一个loopback(回环)设备
设备驱动把设备的read/write翻译成文件的read/write
使用lsblk查看系统中的block devices(strace)
strace查看挂载的流程
- ioctl(3, LOOP_CTL_GET_FREE)
- ioctl(4, LOOP_SET_FD, 3)
五、目录管理
1、mkdir
(1)创建一个目录
(2)可以设置权限
2、rmdir
(1)删除一个空目录
(2)没有”递归删除“的系统调用
rm -rf 遍历删除
六、硬链接
需求:同一个运行库有多个版本
使用一个链接可以避免一份拷贝
七、软链接
软链接:在文件里存储一个跳转提示
1、软链接也是一个文件
(1)当引用这文件时,去找另一个文件
(2)可以跨文件系统,可以链接目录