关于用户空间和内核空间
2010-11-24 18:41
274 查看
作者:冯利美,华清远见嵌入式学院讲师。
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(内核态)。在内核态下,CPU可执行任何指令。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。用户态不能访问内核空间,包括代码和数据。
进程处于用户态时能访问的是用户空间,处于内核态时能访问的称为内核空间。
CPU执行程序所访问的地址都是虚拟地址,MMU 必须通过读取控制寄存器CR3中的值作为当前页面目录的指针,进而根据分页内存映射机制(参看相关文档)将该虚拟地址转换为真正的物理地址才能让CPU真正的访问到物理地址。
进程有4G的寻址空间,其中第一部分为“用户空间”,用来映射其整个进程空间(0x0000 0000-0xBFFF FFFF)即3G字节的虚拟地址;第二部分为“系统空间”,用来映射(0xC000 0000-0xFFFF FFFF)1G字节的虚拟地址。可以看出Linux系统中每个进程的页面目录的第二部分是相同的,所以从进程的角度来看,每个进程有4G字节的虚拟空间,较低的3G字节是自己的用户空间,最高的1G字节则为与所有进程以及内核共享的系统空间。
if(数据在物理内存中)
{ 虚拟地址转换成物理地址
读数据 }
else
{ if(数据在磁盘中)
{
if(物理内存还有空闲)
{ 把数据从磁盘中读到物理内存
虚拟地址转换成物理地址
读数据
}
else
{ 把物理内存中某页的数据存入磁盘
把要读的数据从磁盘读到该页的物理内存中
虚拟地址转换成物理地址
读数据
}
}
else
{ 报错 } }
当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(内核态)。在内核态下,CPU可执行任何指令。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。用户态不能访问内核空间,包括代码和数据。
进程处于用户态时能访问的是用户空间,处于内核态时能访问的称为内核空间。
CPU执行程序所访问的地址都是虚拟地址,MMU 必须通过读取控制寄存器CR3中的值作为当前页面目录的指针,进而根据分页内存映射机制(参看相关文档)将该虚拟地址转换为真正的物理地址才能让CPU真正的访问到物理地址。
进程有4G的寻址空间,其中第一部分为“用户空间”,用来映射其整个进程空间(0x0000 0000-0xBFFF FFFF)即3G字节的虚拟地址;第二部分为“系统空间”,用来映射(0xC000 0000-0xFFFF FFFF)1G字节的虚拟地址。可以看出Linux系统中每个进程的页面目录的第二部分是相同的,所以从进程的角度来看,每个进程有4G字节的虚拟空间,较低的3G字节是自己的用户空间,最高的1G字节则为与所有进程以及内核共享的系统空间。
if(数据在物理内存中)
{ 虚拟地址转换成物理地址
读数据 }
else
{ if(数据在磁盘中)
{
if(物理内存还有空闲)
{ 把数据从磁盘中读到物理内存
虚拟地址转换成物理地址
读数据
}
else
{ 把物理内存中某页的数据存入磁盘
把要读的数据从磁盘读到该页的物理内存中
虚拟地址转换成物理地址
读数据
}
}
else
{ 报错 } }
相关文章推荐
- 关于用户空间和内核空间
- 转:关于内核空间和用户空间的理解
- 关于内核空间与用户空间
- 关于用户空间和内核空间
- 关于进程页表和页目录是存放在内核空间,还是用户空间,低端还是高端内存的思考和验证
- 关于内核空间或用户空间拷贝数据注意事项
- 用户空间与内核空间数据交换的方式(2)------procfs
- 用户空间与内核空间,进程上下文与中断上下文[总结]
- linux用户空间和内核空间延时函数
- 用户空间与内核的通信方式之netlink
- Linux环境下用户空间与内核空间数据的交换方式
- Linux用户空间与内核空间
- [转]用户空间与内核空间,进程上下文与中断上下文[总结]
- 用户空间与内核空间数据交换的方式------seq_file
- 用户空间和内核空间通讯之【Netlink 上】
- 关于查看进程、系统、用户、内核、及一些硬件设备的命令
- Linux 系统内核空间与用户空间通信的实现与分析
- 用户与内核空间数据交换的方式(8)-syscall
- 内核和用户空间共享内存的实现例程-proc和mmap
- 在Linux用户空间做内核空间做的事情