当前位置: 技术问答>linux和unix
请教linux内存分段机制的问题
来源: 互联网 发布时间:2017-04-04
本文导语: linux内存管理采用分段机制 使用48位伪虚拟地址(16位段基址和32端偏移),有8192的全局地址空间和8192的局部地址空间,假设我每个段我都用了4G,也就是4*8192*2 = 2 46次方 相当于有64TB的虚拟内存空间了,而...
linux内存管理采用分段机制 使用48位伪虚拟地址(16位段基址和32端偏移),有8192的全局地址空间和8192的局部地址空间,假设我每个段我都用了4G,也就是4*8192*2 = 2 46次方 相当于有64TB的虚拟内存空间了,而物理内存只有4G
问题就来了
假设我有N个进程,每个进程我都用了4G内存,(假设n>10),那么系统在对这些进程调度的时候,如何分别保存各自的内存信息,根本存不下来啊
还望各位大牛指教,不知道是哪里理解错了!
还有为什么分段的时候还要弄个全局的和局部的,基于什么方面的考虑呢?
问题就来了
假设我有N个进程,每个进程我都用了4G内存,(假设n>10),那么系统在对这些进程调度的时候,如何分别保存各自的内存信息,根本存不下来啊
还望各位大牛指教,不知道是哪里理解错了!
还有为什么分段的时候还要弄个全局的和局部的,基于什么方面的考虑呢?
|
仅有分段机制的确不能实现虚拟内存(每个进程有自己独立的虚拟地址空间),没有分页功能的话,程序的数据必须存储在不同的段或者约定好共享某些段,不能冲突。现在很多risc体系结构的cpu也确实没有采用分段机制,如mips, arm等,上来就是分页。
但是分段机制对x86来说也不是完全没有意义,比通过段机制可以程序运行的特权级区分;
linux也定义了几个特殊的段,完成特定的功能,如任务状态段。
|
1.一个进程的内存我们通常分为代码段 数据段 堆栈段等,这和分段机制中的段有什么关系么
无关系,一个进程的内存代码段 数据段 堆栈段只和编译相关。
2.一个进程有用户栈还有内核栈,那这两个栈都属于这个进程的堆栈段么,还是内核栈是由内核自己将自己栈的一块划给这个进程?
看当前状态,若在内核态,可能使用内核堆栈(似乎也有使用用户堆栈的情况存在)
否则若在用户态 使用用户堆栈
无关系,一个进程的内存代码段 数据段 堆栈段只和编译相关。
2.一个进程有用户栈还有内核栈,那这两个栈都属于这个进程的堆栈段么,还是内核栈是由内核自己将自己栈的一块划给这个进程?
看当前状态,若在内核态,可能使用内核堆栈(似乎也有使用用户堆栈的情况存在)
否则若在用户态 使用用户堆栈