-
应用程序请求文件读取: 用户态的应用程序发起文件读取请求,通常是通过标准的文件操作函数(例如,在Linux中是 read(),在Windows中是 ReadFile())
-
系统调用: 操作系统内核接收到应用程序的读取请求,这将触发一个系统调用(system call)。系统调用是用户态和内核态之间的通信机制,用于执行操作系统内核中的特定功能
-
内核态处理: 操作系统内核根据请求打开相应的文件,确定要读取的数据位置等,并准备好数据进行读取。这一过程通常发生在内核态
-
磁盘读取: 操作系统内核通过设备驱动程序或文件系统模块与硬盘或存储设备进行通信,以从磁盘中读取请求的数据块
-
数据加载到内核缓冲区: 读取的数据通常会被加载到内核缓冲区(kernel buffer)中,这是内核维护的一块内存区域
-
数据复制到用户态缓冲区: 一旦数据被加载到内核缓冲区中,内核将执行一个额外的操作,将数据从内核缓冲区复制到用户态缓冲区(user buffer),这是应用程序所拥有的内存区域
-
系统调用返回: 当数据成功复制到用户态缓冲区后,系统调用返回到用户态,通知应用程序已经完成读取操作
-
应用程序使用数据: 应用程序处理从磁盘读取的数据