OS小班讨论——高端内存

背景:

       这周的周二有一个操作系统概念的讨论课,老师提供了一系列选题,同时也说我们的选题可以不仅限于这些内容。我选从中找了一个我觉得不错的:

我先在百度上搜索“用户空间与内核空间”,发现了一个看起来很有意思的词条(下图)——高端内存,所以以下,是我这两天对该博客以及该内容的理解与思路过程。

 

什么是高端内存?

32为Linux系统会为每一个进程分配一个4GB大小的虚拟地址空间(如下图)

该空间,0~3GB为用户空间,3~4GB为内核空间。

我看的那篇博客在讲到这个空间时,描述大概是:“用户空间通过段页的方式映射到内存,而内核空间通过一对一的方式映射到内存。”

“比如后者的逻辑地址是0xC0000000~0xffffffff,对应的地址空间可以是  逻辑地址 - 0xC0000000  也就是0x0000000~0x40000000,对应1GB大小。”

“但有一个问题:如果内核空间的内容是超过1GB的,也就是在0x40000000之后的区域也有内核空间的信息存在,那该如何映射呢?”

所以此时,提出了高端内存的概念,具体如下:

将内核空间的0~896MB的空间作为低端内存空间,仍然保持一对一的线性映射,而896MB~1GB的范围作为高端内存,具体使用方法是:

“当需要访问1GB之后的内存时,进程可以借用一部分该高端内存,建立与内存之间的直接映射关系,以供使用,使用完之后又会归还, 也就是释放该部分内存。”

 

但是,我有一个疑惑 

(那时我还不理解什么是虚拟内存,我以为虚拟内存也是和内存一样实实在在的存储空间,如果知道了可以不用看我后面啰嗦)

我们的进程空间如下:

 

也就是说,这个进程的内存空间里,放的东西,不仅仅是数据,还包括代码之类的信息,前面当在讲内核空间的内存映射的时候,是把整个内核空间都囊括在内的,可是这部分空间不能全部拿来存数据呀(我把访问内存当成从内存中取数据)

 

后来我又重新去了解了一遍,什么是虚拟内存,得到的以下的结论:

假象

虚拟内存就是一种假象:上面所说到的虚拟内存空间,它其中的内容,真实存在的地方是内存或者硬盘,但这些信息的分布并不是完全连续的,散乱地分布在存储空间,而虚拟内存,就是给CPU提供一种这些信息都连续地分布在一整块内存里的假象,当CPU需要访问内存时,对应的逻辑地址会通过MMU转换成实际的物理地址,从而真正取到需要的信息和数据。

 

文章中后部分提出了一个疑问:如果高端内存内进程一直占用而迟迟不释放,使得其他进程无法继续进行下去,该如何处理?

但紧接着这一部分内容的是三种映射:

映射到”内核动态映射空间”(noncontiguous memory allocation)

持久内核映射(permanent kernel mapping)

临时映射(temporary kernel mapping)

但这三部分,我并没看出来有怎么解决这个问题,查了很多别人的博客也没能找到合适的答案。。

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值