关于内存管理的一些疑问

georgexxl 2013-12-18 04:08:47
最近学习了linux内存管理 有一些疑问一直不太清楚
1、有人说分段是问了兼容8086的分段机制不能关闭,淡深入linux内核书中说分段后有四个常用段 用户代码段内核代码段用户数据段用户代码段 并且这些段的起始地址都是0,我想问那这样是不是采用得现代操作系统上所说的分段分页结合模式,即代码段和数据段使用的是分别单独的4g地址空间分页的时候每个段有各自的页表?
还是代码段和数据段并没有单独的地址空间也就没有单独 的页表,一个进程使用的只有一个4g的地址空间?哪种理解是对的呢?
2、既然分段中已经将内核空间和用户空间分为了两个空间 ,那为什么分页时又将4g空间分为1g和3g?
3、内核地址空间1g映射中有894m是不是映射在物理地址上由所有进程共享?既所有进程使用这部分线性地址都指向相同的物理地址 想确定下
4、内核地址空间固定映射区作用是什么。
5、 永久内存映射区用来访问高端内存那为什么要叫永久内存映射区 (这个问题可能有点白痴了)
问了好多 求好心人指教
...全文
117 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
georgexxl 2013-12-18
  • 打赏
  • 举报
回复
非常感谢楼上的回答, 对于第一个问题现代操作系统上说数据段和代码代码段可以都设为0地址开始 只要使用分别的页表映射就是两个不同的地址空间, 按楼上的说法是因为设为了0就是只能共享内存还是linux 的设定是代码和数据共享一个内存空间。 第二个问题 区分权限靠段的话 但是我的理解好像一个段权限是一样的吧? 那4g的权限岂不是一样的,怎样实现3g和1g 的权限是分开的呢
Carl_CCC 2013-12-18
  • 打赏
  • 举报
回复
1. linux吧数据段代码段都设置成0,那么他们只能共享4G空间了。没有单独页表 2. 3G,1G是内核自己定义的,为了方便,区分权限靠段。 3. 内核的空间是共享的,确实是用共同的地址。 4. 固定映射区是用来映射高端内存的,因为内核空间地址太少了,不够用。 5. 永久只是名字叫永久,他就是来维护固定映射区的,显然大内存时这个块内存会一直在,所以故名思议。

4,441

社区成员

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

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