用户空间/内核空间

SARA520 2010-03-07 06:10:01
关于用户空间和内核空间,理解的不是很清楚,望高手给解答下阿,谢谢

1.在内核空间运行,在用户空间运行,怎么理解?
按我自己的理解,是内存中有一部分是特殊的,是专门用来给内核使用的。
如果是在这段内存中运行,就是在内核空间运行,反之就是在用户空间中运行

2.程序通过系统调用进入内核空间---比如我自己写了个程序,调用了read()这个函数,就是说在read()执行过程中,其实是在内核空间中运行的,而在read()返回后,从内核空间返回用户空间?



...全文
505 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
KimenWu 2010-03-08
  • 打赏
  • 举报
回复
从两方面理解,一是内存管理一是程序执行。
从内存管理角度来讲:

Linux简化了分段机制,使得虚拟地址与线性地址总是一致,
因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最
高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间
”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称
为“用户空间)。因为每个进程可以通过系统调用进入内核,因此,Linux内核由系统内
的所有进程共享。于是,从具体进程的角度来看,每个进程可以拥有4G字节的虚拟空间。

从程序执行来讲:
Linux使用两级保护机制:0级供内核使用,3级供用户程序使用。事实上,CPU的指令分级比Linux分级的级别还多。


总之,这一切都是为了安全和系统的稳定性来考虑的
Wenxy1 2010-03-07
  • 打赏
  • 举报
回复

关于用户空间和内核空间,理解的不是很清楚,望高手给解答下阿,谢谢

1.在内核空间运行,在用户空间运行,怎么理解?
  按我自己的理解,是内存中有一部分是特殊的,是专门用来给内核使用的。
  如果是在这段内存中运行,就是在内核空间运行,反之就是在用户空间中运行
答:对于x86硬件平台,在内核空间,CPU的工作特权级是0,当然内核是常驻内存的,有将近1GB的线性地址空间。其余的线性地址为用户空间,此时CPU工作是特权级3。
更多的关于intel x86 CPU的特权级信息,请参考CPU data sheet, 或参考些贴:http://blog.csdn.net/drshenlei/archive/2009/06/12/4265101.aspx


2.程序通过系统调用进入内核空间---比如我自己写了个程序,调用了read()这个函数,就是说在read()执行过程中,其实是在内核空间中运行的,而在read()返回后,从内核空间返回用户空间?
答:是这样。



[/Quote]
hellward 2010-03-07
  • 打赏
  • 举报
回复
进程的空间实际上被分为了两个部分。一部分供进程独立使用,成为用户空间,另一部分容纳操作系统的内核,成为内核空间,或称为系统空间。具体到可以容纳4gb内存空间的32位Windows系统上,低2gb是用户空间,高2gb是内核空间。
用户空间是各个进程隔离的,但是内核空间是共享的,也就是说,每个进程看见的高2gb空间范围内的数据,都是一样的。
内核空间是受硬件保护的,比如x86架构下的ring0层的代码才能访问内核空间。内核模块运行在内核空间,普通ring3程序作为一个进程执行。
帅得不敢出门 2010-03-07
  • 打赏
  • 举报
回复
内核空间是不允许随便访问修改的
这是出于安全等方面考虑

程序运行在用户态时为了要访问内核的资源,必须经过内核提供的接口,通过系统调用linux下就是int ox80
中断 中断号由eax传入 参数由ebx ecx edx 压栈等方式传入
发生了中断则现场保护,控制权交给内核,由内核根据中断号调用相应函数,结束后清栈,pc指向原保存的返回地址,回到用户态。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧