标签:alt 执行 切换 系统调用 src 如何 code buffer 用户
一、Linux系统模型
其中最重要的部分是内核,向上为系统调用和应用程序提供支持,向下对硬件资源和驱动程序进行管理。
二、传统I/O操作读写流程
1.用户进程向 CPU 发起 read 系统调用读取数据,由用户态切换为内核态,然后一直阻塞等待数据的返回。
2.CPU 在接收到指令以后对 DMA 磁盘控制器发起调度指令。
3.DMA 磁盘控制器对磁盘发起 I/O 请求,将磁盘数据先放入磁盘控制器缓冲区,CPU 全程不参与此过程。
4.数据读取完成后,DMA 磁盘控制器会接受到磁盘的通知,将数据从磁盘控制器缓冲区拷贝到内核缓冲区。
5.DMA 磁盘控制器向 CPU 发出数据读完的信号,由 CPU 负责将数据从内核缓冲区拷贝到用户缓冲区。
6.用户进程由内核态切换回用户态,解除阻塞状态,然后等待 CPU 的下一个执行时间钟。
三、标准文件I/O流程
从磁盘读取文件
1.文件系统从disk上读取内容到FS Cache(文件系统缓冲)的bufferCache中
2.通过VFS(虚拟文件系统)从FS Cache的Page cache中获取数据---FS Cache 把Buffer Cache组装成PageCache
(即一个PageCache包含多个bufferCache)。
3.当PageCache的内容进入到物理内存Page,进程通过调用操作系统函数Read即可以获取Page数据。
写数据到磁盘
1.进程开始写数据的时候通过页表拿到可写的Page开始写数据
2.通过VFS将数据写入到PageCache。
3.调用文件系统的函数将PageCache数据写入到Disk
四、对课程的认识
通过本课程的学习,更深入的了解了linux系统是如何运作的,经过几次实际上手跟踪调试,加深了对于linux下程序的运行流程的了解。
在这里要感谢孟宁老师和李春杰老师的辛苦备课,即使是因为疫情导致无法面对面授课的情况下,依然能产出这样优质的网课,让我学到了很多。
标签:alt 执行 切换 系统调用 src 如何 code buffer 用户
原文地址:https://www.cnblogs.com/baozhw/p/13273574.html