进程调度
-
进程调度原则
- 一个CPU核统一时间只能运行一个进程
- 每个进程有近乎相等的执行时间
- 对于逻辑CPU来说进程调度采用轮询的方式执行,当轮询完成则回到第一个进程返复
- 进程执行消耗的时间和进程量成正比
操作系统在管理进程时,会创建一些对列,进程会依次放入到队列中。当CPU进行进程调度时,会从队列中依次的获取,当对列中的进程都被执行了,一次轮询结束并会再次回到开始的进程,进行下一轮调度。
轮询方式的好处是能保证所有的进程都能得到执行,不会因为某个进程的低优先级而一直得不到执行。
- 进程的系统调用
文件系统
文件系统是操作系统中负责管理持久数据的子系统,负责把用户的文件存储到磁盘硬件中,持久化的保存文件
Linux文件系统是采用树状的目录结构,最上层是/(根)目录
虚拟文件系统(VFS)
- 对应用层的提供一个标准的文件操作接口
- 对文件系统提供了一个标准的文件接入接口
虚拟文件系统的存在抹平了不同文件类别之间的差异
文件读取流程
当应用程序接收到用户的请求时,首先会从用户缓冲区中读取,查看缓冲区中之前是否命中过相同的文件是否存在数据缓存,如果存在则直接读取该文件数据。
如果不存在则需要发起一次系统调用,应用程序会从用户态切换到内核态,然后查看内核缓冲区中是否存在数据缓存,如果存在则会通过CPU把数据copy到用户缓冲区进行读取。如果依旧不存在则会通过DMA直接向磁盘发起读取文件的请求,然后通过DMA把文件数据copy到内核缓冲区,然后在通过CPU把数据copy到用户缓冲区。
应用程序获取数据后开始写入操作,通过CPU把数据copy到Socket缓冲区,然后在通过DMA把数据copy到网卡发送给用户。
实际上文件的读取流程还存在许多缓冲区,这些缓冲区的作用主要是减少对系统的调用次数,提高性能。