linux内存管理 20
我在学习linux内核,在内存管理这边有几个问题想请教下高手。1.linux的内核空间是3G-4G,这里有个3G的位移,以转换逻辑地址和物理地址,不是有页表吗,为什么要有...
我在学习linux内核,在内存管理这边有几个问题想请教下高手。
1.linux的内核空间是3G-4G,这里有个3G的位移,以转换逻辑地址和物理地址,不是有页表吗,为什么要有这个3G的位移,关于内核空间的管理很不理解。
2.linxu的虚拟内存是怎么存储的,或者说在文件中怎么组织,swp_entry_t和pte_t有什么关系,怎么组织的(一个是盘上页面结构,还有一个是页表结构)
如果解决了加分 展开
1.linux的内核空间是3G-4G,这里有个3G的位移,以转换逻辑地址和物理地址,不是有页表吗,为什么要有这个3G的位移,关于内核空间的管理很不理解。
2.linxu的虚拟内存是怎么存储的,或者说在文件中怎么组织,swp_entry_t和pte_t有什么关系,怎么组织的(一个是盘上页面结构,还有一个是页表结构)
如果解决了加分 展开
3个回答
展开全部
一:你的理解有误,linux的内核空间3G到4G(32位X86系统,并且没有物理地址扩展)是指逻辑地址从0xc0000000到0xffffffff,这并不是实际的内存,它所对应的页地址,存储到页表里!至于为什么要3-4G,而不放在0-1G,这纯粹是开发人的一时想法,完全可以定在0-1G的,但是也没有什么区别,因为这0-1G对应的页表也不一定就存储在物理空间的前面
二:至于虚拟内存是怎么存储的,这个我也没有深入研究过,基本上是这样的,硬盘上一般也是以4K为单位分页的,同样也以页表的形式来管理,因此除了物理上的不同之外,软件上基本相同,就是有些标志位的使用不一样,所以从某种意义来说,那两个结构是一致的。想象下,不然如果不一致,那么每次内存调换,都需要转换,这不是浪费资源吗?当然这也只是我的个人理解
二:至于虚拟内存是怎么存储的,这个我也没有深入研究过,基本上是这样的,硬盘上一般也是以4K为单位分页的,同样也以页表的形式来管理,因此除了物理上的不同之外,软件上基本相同,就是有些标志位的使用不一样,所以从某种意义来说,那两个结构是一致的。想象下,不然如果不一致,那么每次内存调换,都需要转换,这不是浪费资源吗?当然这也只是我的个人理解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.3g的位移不是用来转换逻辑地址和物理地址的,逻辑地址转换为线性地址由分段单元完成,不过在linux中这一步简化了;线性地址转换为物理地址由分页单元完成。3g的位移是linux地址空间的设计方式,3g以上为内核空间,所有的进程在用户空间映射到不同的物理地址,而内核空间是映射到相同的物理地址。
2.虚拟内存的主要思想是线性地址到物理地址的映射推迟到需要的时候做,内存分配后如果长期不用,可以swap到磁盘,present位置0,映射撤销。pte_t表示的是一个线性地址中的一个页表,swp_entry_t表示一个置换出去的页面,当页面被置换出去,pte_t就变成了swp_entry_t,也就是说,present胃1,访问pte_t得到一个内存的页,present为0,访问pte_t得到一个交换到设备的磁盘页面
2.虚拟内存的主要思想是线性地址到物理地址的映射推迟到需要的时候做,内存分配后如果长期不用,可以swap到磁盘,present位置0,映射撤销。pte_t表示的是一个线性地址中的一个页表,swp_entry_t表示一个置换出去的页面,当页面被置换出去,pte_t就变成了swp_entry_t,也就是说,present胃1,访问pte_t得到一个内存的页,present为0,访问pte_t得到一个交换到设备的磁盘页面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询