操作系统(四)文件系统
读取一个文件的时候,操作系统会发生什么?
读取磁盘文件的时候,CPU 不会负责从磁盘读取数据的过程,而是将磁盘数据搬运到内存的工作全部交给 DMA (直接内存访问)控制器,CPU 不再参与任何与数据搬运相关的事情,这样 CPU 就可以去处理别的工作,不会阻塞住。 具体的过程是这样的:
- 用户进程调用 read 方法,向操作系统发出 I/O 请求,然后进程进入阻塞状态;
- 操作系统收到请求后,进一步将 I/O 请求发送 DMA,然后 CPU 会执行其他任务;
- DMA 进一步将 I/O 请求发送给磁盘,磁盘收到 DMA 的 I/O 请求,把数据从磁盘读取到磁盘控制器的缓冲区中,当磁盘控制器的缓冲区被读满后,向 DMA 发起中断信号,告知自己缓冲区已满;
- DMA 收到磁盘的信号,将磁盘控制器缓冲区中的数据拷贝到内核缓冲区中,数据准备好后,然后就会发送中断信号给 CPU,CPU 收到 DMA 的信号,于是将数据从内核拷贝到用户空间,read 系统调用返回;
操作系统复制一个文件的流程是怎么样的?
复制文件的流程:
- 打开源文件,调用 read 系统调用读取源文件的数据,这时候会通过 DMA 将磁盘数据拷贝到内核缓冲区,然后 CPU 再将内核缓冲区的数据拷贝到用户缓冲区,然后 read 系统调用返回。
- 打开目标文件,调用 write 系统调用将从源文件读到的数据,写入到目标文件,这时候 CPU 会将用户缓冲区的数据拷贝到内核缓冲区, 然后write函数返回,后续操作系统会将内核缓冲区的数据刷入磁盘。
软链接和硬链接有什么区别?
软链接和硬链接都是给文件取一个别名,区别主要有:
- 软链接文件有独立的 inode 节点,文件的内容是目标文件的路径,不存储实际的文件数据,支持跨文件系统建立,而且目标文件删除了,软链接还是存在的,只不过指向的文件找不到了(类似快捷方式)
- 硬链接文件和目标文件都共用一个 inode 节点,说明他们是用一个文件,不支持跨文件系统建立,删除文件的时候,要除文件的所有硬链接以及源文件时,系统才会彻底删除该文件。