到底什么是IO,我们之前经常说的IO就是指进行文件的写入和读取操作所做的操作, 但是在操作系统层面的IO并不是这么狭义。从键盘获取数据从socket都可以称作IO。
在正式介绍IO之前我们需要先弄清楚几个概念。
-
用户空间和内核空间
我们都听过虚拟内存的概念,现在的操作系统都是采用的虚拟存储器,对于32位系统来说,他的地址位有32个比特位,也就是说他最大可以访问2的32次方个比特位的数据,也就是4G,操作系统的核心是内核,他和我们普通下载一个应用程序来说是不一样的,他可以访问跟多受保护的内存空间,并且也可以访问底层的硬件设备,为了保证普通用户的进程不能直接操作计算机的内核,保证内核的安全,操作系统就把虚拟空间分成了两部分,一部分是内核空间,一部分是用户空间,对于Linux操作系统来说,最高的是1G字节从c0000000到ffffffff是让内核来使用的,低的00000000到bfffffff 3G内存空间是让用户进程来使用的。
-
进程切换
我们既然了解了进程的概念就很容易理解进程切换,内核要有能力让正在CPU上执行的程序下来,并且让CPU执行以前停止的某个进程,这个过程就是进程切换,任何进程都是在操作系统内核的支持下运行的。从一个进程切换到另一个进程的时候需要1.保存处理上下文,包括程序的计数器和一些寄存器2.更新进程块PCB的信息3.把正在执行的进程PCB移到等待队列中等待下次唤醒4.选择另一个进程更新他的PCB 5.更新内存管理的数据结构 6.恢复当前进程的处理上下文。这个过程是十分消耗资源的。
-
什么是阻塞、非阻塞、什么是同步、异步