IO是基于缓存区来做的,所谓的输入和输出就是从缓存区中移入和移出数据。以IO输入为例,首先是用户空间进程向内核请求某个磁盘空间数据,然后内核将磁盘数据读取到内核

空间的buffer中,然后用户空间的进程再将内核空间buffer中的数据读取到自身的buffer中,然后进程就可以访问使用这些数据。

                                                               内核空间、用户空间和虚拟地址(转)_内核空间

    内核空间是指操作系统内核运行的空间,是为了保证操作系统内核的能够安全稳定地运行而为内核专门开辟的空间;而用户空间是指用户程序运行的空间。用户空间的程序不能直

接去磁盘中读取数据,必须经过内核空间这个中介

    而目前的操作系统,用户空间和内核空间都是使用的逻辑地址。使用逻辑地址无非是因为其两大优势:一是它可以使多个逻辑地址指向同一个物理内存地址; 二是逻辑地址空间可

以大于物理内存的空间。

   于第一点在进行IO操作时就可以将用户空间的buffer区和内核空间的buffer区指向同一个物理内存,这样就省去了将数据从内核空间拷贝到用户空间的开销,而且还节省内存

                                                                内核空间、用户空间和虚拟地址(转)_内核空间_02

    对于第二点,当用户程序访问内存地址时,一般的操作如下:首先虚拟内存系统会到物理内存去查找该虚拟地址是否存在。如果存在,如A,则直接从物理内存中读取;如果不存

在,如D则会抛出一个信号。这时虚拟内存系统会去磁盘空间中找,找到后再按一定的策略,将其置入到内存中,如将C和D交换。然后由用户程序就可以使用D中的数据。这样就保

证了用户程序可以读取一些大型的文件。

                                                                 内核空间、用户空间和虚拟地址(转)_内核空间_03