阅读顺序
1. CPU查找物理寻址和虚拟寻址、虚拟内存优点、不同位数的操作系统虚拟内存大小关系、Linux虚拟内存用户空间和内核空间
2. 进程切换、上下文及上下文切换、进程阻塞、文件描述符
3. 传统IO数据拷贝、同步阻塞IO在哪里阻塞、同步阻塞IO怎么解决、IO多路复用、多路复用的特点、常见多路复用方案
进程切换
操作系统4核,可以同时运行几百个任务,理论上如果是并行执行的话,那么只可能同时执行4个任务,所以任务的执行是并发执行的。系统有CPU的时间的分片的算法,会在很短的时间内将CPU轮流分配给它们,所以我们看起来就像是这些应用程序同时运行,是交替执行的过程,那么也就是说内核必须有能力将一个进程暂停、挂起、阻塞、恢复,然后实现并发执行的效果,这种行为或动作就是进程的切换。
上下文及上下文切换
每个任务在运行之前,CPU必须要知道任务从哪里加载,从哪里开始运行,也就是CPU必须先给进程设置好它在寄存器和程序计数器的数据,这两个数据就是CPU的上下文,如果没有上下文,就恢复不了,因为无法找到 上一步执行的状态,这个状态就叫做上下文,是保存在系统内核里的
挂起和恢复的过程中,这种进程之间的切换,就叫做上下文切换
因为CPU从内存中找到了你的上下文,然后继续执行任务,所以在我们看起来任务就是连续执行的一样,上下文的切换需要完成一系列的工作,所以说 上下文的切换是一项比较消耗资源和时间的操作,因此要尽量避免上下文的切换
进程阻塞
正在运行的进程由于提出系统服务请求(如I/O操作),但因为某种原因未得到操作系统的立即响应,该进程只能调用阻塞原语把自己变成 阻塞状态,阻塞状态不会占用CPU的资源
文件描述符
Linux里面一切皆文件,包括你的硬件设备。文件描述符FD是内核为了高效管理已被打开的文件所创建的索引(一个非负的整数),用于指向被打开的文件,所有执行I/O操作的系统调用(System Call)都通过文件描述符
文件描述符 | 缩写 | 描述 |
---|---|---|
0 | STDIN | 标准输入(键盘) |
1 | STDOUT | 标准输出(显示器) |
2 | STDERR | 标准错误(显示器) |