当前位置:  技术问答>linux和unix

用户空间/内核空间

    来源: 互联网  发布时间:2016-08-08

    本文导语:  关于用户空间和内核空间,理解的不是很清楚,望高手给解答下阿,谢谢 1.在内核空间运行,在用户空间运行,怎么理解?   按我自己的理解,是内存中有一部分是特殊的,是专门用来给内核使用的。   如果是在...

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

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

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




|
内核空间是不允许随便访问修改的
这是出于安全等方面考虑

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

|
进程的空间实际上被分为了两个部分。一部分供进程独立使用,成为用户空间,另一部分容纳操作系统的内核,成为内核空间,或称为系统空间。具体到可以容纳4gb内存空间的32位Windows系统上,低2gb是用户空间,高2gb是内核空间。
用户空间是各个进程隔离的,但是内核空间是共享的,也就是说,每个进程看见的高2gb空间范围内的数据,都是一样的。
内核空间是受硬件保护的,比如x86架构下的ring0层的代码才能访问内核空间。内核模块运行在内核空间,普通ring3程序作为一个进程执行。

|
从两方面理解,一是内存管理一是程序执行。
从内存管理角度来讲:

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

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


总之,这一切都是为了安全和系统的稳定性来考虑的

|

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

 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]

    
 
 

您可能感兴趣的文章:

  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • 内核空间能否调用用户空间程序?
  • 在内核的某个函数中,如何能知道是哪个用户空间的函数调用了它,以及这个用户空间函数所在的文件?
  • 请问内核空间和用户空间有什么区别,是怎么划分的.谢谢
  • 用户进程有自己独立的地址空间,内核线程没有自己的地址空间 该怎样理解: ?
  • 如何将数据包sk_buff从内核空间提交给用户空间呢?
  • 内核空间和用户空间怎么通信?
  • linux用户空间到内核空间数据传递
  • 关于内核空间和用户空间之间的实时通信?
  • 关于在内核空间和用户空间引用一个空指针的后果很原因
  • 内核空间与用户空间通讯
  • 驱动中如何将用户空间内存映射到内核空间使用?
  • (来拿分了)谁提供一个简单的netlink的程序? 要求是内核空间发往用户空间的。
  • 有人做过内核空间和用户空间的内存映射吗 内核空间和用户空间交换数据用内存映射的方法,结果做的驱动可以工作,但经常会引起死机
  • 求助关于内核空间和用户空间通信的问题
  • Linux 内核空间与用户空间批量数据传输问题!
  • 如何更改用户空间大小?
  • 为什么内核空间与用户空间得数据交换消耗如此巨大?
  • 内核访问用户空间
  • 用netlink从内核空间向用户空间传送数据为何失败!
  • 关于打印用户空间函数栈的问题
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 求内核和用户态简单易行的通信方法,用户态只需得到一个内核模块参数
  • 内核栈~ 内核线程 ~用户线程 之间关系 问题
  • linux 用户态和内核态
  • daemon 是属于 用户态编程 还是 内核态编程? 关于内核编程的书/资料介绍些好吗?
  • 用户模式和内核模式
  • 用户态程序如何和多个内核模块进行同时数据交互??
  • 关于内核进程和用户层命令不是很理解?
  • 用户层的数据怎么传输到内核层呢?谢谢!
  • 如何利用Linux内核线程来保存用户进程
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 概念混乱,请专人解释:实际用户ID,有效用户ID,设置用户ID
  • CentOS安装Telnet,以root用户登陆Telnet以及CentOS的各种终端解释
  • proftp中,如何让FTP的用户是非Linux用户,只是FTP用户?
  • windows 系统是否是多用户操作系统,如何理解“多用户操作系统”的“多用户”?
  • 我装的是RED HAT LINUX 8.0,我在root用户中把root用户删除了,怎办也进不了root用户
  • 怎样让普通用户拥有超级用户的权限,是把普通用户的组设为root组吗?具体怎么做,急死了
  • 我一个服务器同时接受到很多个用户的认证请求(得到用户名和密码),然后把用户名密码发给认证服务器。因为是远程认证,所
  • 我装了中软Linux3.1,启动时要求输入用户名和口令,但安装时并没有提示指定用户名,所以现在输入用户名老是错误,不能进入系统,请问该怎
  • root用户附权限给其他用户问题
  • 如何添加一个用户,让这个用户只能访问某个特定的目录,
  • 如何过滤系统用户只显示创建的用户?
  • 匿名用户登录nobody用户的作用
  • 怎样在程序中将普通用户切换成root用户
  • 创建用户组创建用户出错
  • 求助:忘记了root用户的密码,如何给普通用户赋root权限
  • javascript开源软件 iis7站长之家
  • Public key用户 创建的用户不能登录
  • 利用root用户修改一般用户密码的批处理文件怎么写呢?
  • **********如何在UNIX上创建一个用户,此用户只能访问自己的目录***********
  • UNIX里每个用户是否对应一个用户目录?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3