参考文档
https://www.jianshu.com/p/486b0965c296
一 概念说明
用户空间和内核空间
操作系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限
。为了保证用户进程不能直接操作内核(kernel),保证内核的安全,操作系统将虚拟空间划分为两部分,一部分为内核空间,一部分为用户空间
。针对linux操作系统而言,将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为内核空间,而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为用户空间。-
保存处理机上下文,包括程序计数器和其他寄存器。
-
更新PCB信息。
-
把进程的PCB移入相应的队列,如就绪、在某事件阻塞等队列。
-
选择另一个进程执行,并更新其PCB。
-
更新内存管理的数据结构。
-
恢复处理机上下文
进程的阻塞
当进程进入阻塞状态,是不占用CPU资源的
。
文件描述符
文件描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念
。
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表
。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于UNIX、Linux这样的操作系统。
缓存io
缓存 IO 又被称作标准 IO,大多数文件系统的默认 IO 操作都是缓存 IO
。在 Linux 的缓存 IO 机制中,操作系统会将 IO 的数据缓存在文件系统的页缓存( page cache )中,也就是说,数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间
。
缓存 IO 的缺点:
数据在传输过程中需要在应用程序地址空间和内核进行多次数据拷贝操作
,这些数据拷贝操作所带来的 CPU 以及内存开销是非常大的。
阻塞io