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

内存保护

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

    本文导语:  我是Linux的新手,最近在看内存保护方面的知识,以下是自己对Linux内  核空间与用户空间,进程间隔离的认识。不知道对否,希望有大侠能帮  忙指正。这里不胜感!  Linux内核与用户空间的隔离  在linux中内核空间与...

我是Linux的新手,最近在看内存保护方面的知识,以下是自己对Linux内 
核空间与用户空间,进程间隔离的认识。不知道对否,希望有大侠能帮 
忙指正。这里不胜感! 

Linux内核与用户空间的隔离 
在linux中内核空间与用户空间的隔离是利用它们使用不同的线性地址 

空间.内核使用从3G~4G范围的虚拟地址空间.而用户空间使用0~3G的虚 

拟地址空间.这两个空间使用不同的CPU特权级,当在用户空间运行的程 

序直接访问内核空间的地址的话会因为特权级不够而被中止.但是因为 

内核又必须向应用程序提供服务,所以就必须有一种机制实现,使得在用 

户空间可以访问内核空间.linux使用系统调用来实现,通过操作系统提 

供了一系列系统调用,应用程序可以调用它们以达到访问内核的目的.系 

统调用会触发一个软中断,使CPU从用户态上升到内核态,从而达到访问 

内核的条件.即linux内核空间与用户空间的隔离是根据使用两个不同的 

地址空间,而这两个空间需要不同的CPU特权级来访问,从而达到隔离的 

目的.同时又通过系统调用机制,实现用户空间访问内核的需求. 

Linux进程间隔离 
在Linux中进程间的隔离是利用:页表来实现.每个进程有自己的一张页 

表,这张页表的所映射的虚拟地址就进程的地址空间.而在进程运行的时 

候系统会把它的页表加载为当前的,即这个进程只能访问它自己页表映 

射的内存空间,也就是它的进程地址空间.从而达到隔离的目的.

|
lz的理解不错,Linux进程间隔离 确实如此


当在用户空间运行的程序直接访问内核空间的地址的话会因为特权级不够而被中止.但是因为

内核又必须向应用程序提供服务,所以就必须有一种机制实现,使得在用户空间可以访问内核空间
-----------------
这里有点狭隘了
用户空间对于硬件的操作必须通过系统调用进入内核才有权限,而不仅是因为需要访问内存。
就是一个printf都需要系统调用sys_write进入内核
而用户空间访问内核空间,可以通过驱动程序实现的mmap。内核也不应该随便访问用户空间内存。
用户和内核之间传递的内存地址参数,应该通过copy_from_user 、copy_to_user 实现转换

|
特权级是段描述符里面的两个bit,叫做DPL,特权级比较就是当前的特权级CPL和调用门的描述符里面的DPL比较,是X86里面特有的,没必要研究的太清楚。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Vectors 成员 get_allocator():返回vector的内存分配器
  • 我的机器内存128 ,安装redhat9 后,可用内存很少了,如何节省内存呢?
  • C++ Vectors 成员 capacity():返回vector所能容纳的元素数量(在不重新分配内存的情况下)
  • 奇闻:Apache+Apache JServ 1.1.1+1G内存居然报内存不够,那位高友知道参数设置,把俺的1G内存都利用起来,感激不尽啊
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 怎样读取指定内存地址处指定长度的内存数据???(
  • C/C++内存池实现介绍及基本要求
  • 【操作系统虚拟内存和物理内存疑惑】
  • linux下free命令显示的内存使用情况分析
  • 请教一个关于内存分配的问题(系统和DMA共享一块物理内存空间)
  • c/c++内存堆分配和栈分配理解
  • Solaris下如何获得物理内存和虚拟内存的大小?
  • Ubuntu查看内存,进程相关命令介绍
  • 程序需要共享内存相当大,但是系统的内存有限
  • Linux 共享内存介绍及实现代码
  • 关于大于2G内存的使用.....按32位编译的进程怎么使用大于2G的内存?
  • Linux内存文件系统(ramdisk)的三种实现方式
  • redhat9内存使用率高达73%,怎么查看内存具体使用情况
  • Microsoft IE MSHTML内存破坏远程代码执行漏洞
  • 遇到奇怪的内存泄露问题,应用程序杀死内存无法释放!
  • Microsoft Internet Explorer内存破坏漏洞(CNVD-2013-13096)
  • 多个进程对系统V共享内存进行读写,怎样实现对共享内存部分进行加解锁?


  • 站内导航:


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

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

    浙ICP备11055608号-3