内核空间、用户空间和虚拟地址(转)
2015-01-17 02:43
337 查看
原文:http://www.cnblogs.com/yanhaidong/archive/2011/02/11/2339050.html
IO是基于缓存区来做的,所谓的输入和输出就是从缓存区中移入和移出数据。以IO输入为例,首先是用户空间进程向内核请求某个磁盘空间数据,然后内核将磁盘数据读取到内核
空间的buffer中,然后用户空间的进程再将内核空间buffer中的数据读取到自身的buffer中,然后进程就可以访问使用这些数据。
![](http://images.cnitblog.com/blog/564326/201501/170240382611691.gif)
内核空间是指操作系统内核运行的空间,是为了保证操作系统内核的能够安全稳定地运行而为内核专门开辟的空间;而用户空间是指用户程序运行的空间。用户空间的程序不能直
接去磁盘中读取数据,必须经过内核空间这个中介。
而目前的操作系统,用户空间和内核空间都是使用的逻辑地址。使用逻辑地址无非是因为其两大优势:一是它可以使多个逻辑地址指向同一个物理内存地址; 二是逻辑地址空间可
以大于物理内存的空间。
对于第一点在进行IO操作时就可以将用户空间的buffer区和内核空间的buffer区指向同一个物理内存,这样就省去了将数据从内核空间拷贝到用户空间的开销,而且还节省内存
![](http://images.cnitblog.com/blog/564326/201501/170241395897993.gif)
对于第二点,当用户程序访问内存地址时,一般的操作如下:首先虚拟内存系统会到物理内存去查找该虚拟地址是否存在。如果存在,如A,则直接从物理内存中读取;如果不存
在,如D则会抛出一个信号。这时虚拟内存系统会去磁盘空间中找,找到后再按一定的策略,将其置入到内存中,如将C和D交换。然后由用户程序就可以使用D中的数据。这样就保
证了用户程序可以读取一些大型的文件。
IO是基于缓存区来做的,所谓的输入和输出就是从缓存区中移入和移出数据。以IO输入为例,首先是用户空间进程向内核请求某个磁盘空间数据,然后内核将磁盘数据读取到内核
空间的buffer中,然后用户空间的进程再将内核空间buffer中的数据读取到自身的buffer中,然后进程就可以访问使用这些数据。
![](http://images.cnitblog.com/blog/564326/201501/170240382611691.gif)
内核空间是指操作系统内核运行的空间,是为了保证操作系统内核的能够安全稳定地运行而为内核专门开辟的空间;而用户空间是指用户程序运行的空间。用户空间的程序不能直
接去磁盘中读取数据,必须经过内核空间这个中介。
而目前的操作系统,用户空间和内核空间都是使用的逻辑地址。使用逻辑地址无非是因为其两大优势:一是它可以使多个逻辑地址指向同一个物理内存地址; 二是逻辑地址空间可
以大于物理内存的空间。
对于第一点在进行IO操作时就可以将用户空间的buffer区和内核空间的buffer区指向同一个物理内存,这样就省去了将数据从内核空间拷贝到用户空间的开销,而且还节省内存
![](http://images.cnitblog.com/blog/564326/201501/170241395897993.gif)
对于第二点,当用户程序访问内存地址时,一般的操作如下:首先虚拟内存系统会到物理内存去查找该虚拟地址是否存在。如果存在,如A,则直接从物理内存中读取;如果不存
在,如D则会抛出一个信号。这时虚拟内存系统会去磁盘空间中找,找到后再按一定的策略,将其置入到内存中,如将C和D交换。然后由用户程序就可以使用D中的数据。这样就保
证了用户程序可以读取一些大型的文件。
![](http://images.cnitblog.com/blog/564326/201501/170343384331489.gif)
相关文章推荐
- 内核空间、用户空间、虚拟地址
- 虚拟内存,虚拟地址空间,用户空间,内核空间
- 《java NIO》缓存区之内核空间、用户空间和虚拟地址
- 《java NIO》缓存区之内核空间、用户空间和虚拟地址
- Unix v6中对虚拟地址映射到物理地址以及在内核态如何访问用户空间的u值
- Linux 文件系统剖析: 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口
- linux 内存映射 remap_pfn_range操作(内核地址映射到用户空间)
- Binder进程间通信(五)----内核虚拟地址空间管理
- Linux架构-内核空间,用户空间,虚拟文件系统
- 【转载】64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)
- 用户空间地址和内核空间地址说明
- Linux 文件系统剖析: 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口
- 原创翻译: 64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)
- 从MDL(把应用层的地址空间映射到系统内核空间)得到系统虚拟空间地址
- 用户空间的虚拟地址如何转换得到实际的物理地址
- Linux内核---62.用户空间获得变量的物理地址
- Linux 内核空间虚拟地址和物理地址相互转换
- 在用户空间(和内核空间)访问内存的绝对地址
- 在用户空间(和内核空间)访问内存的绝对地址