段页结合的实际内存管理
如何让操作系统既支持段又支持页?
虚拟内存
:我们让应用程序分为段,然后映射到一段虚拟内存中,再让虚拟内存映射到物理内存中的页中,这样就完成了段和页的结合
段、页同时存在时的重定位(地址翻译)
- 根据段号找到偏移求出虚拟地址
- 根据虚拟地址求出页号找到物理地址
一个实际的段、页式内存管理
内存管理核心:内存分配
- 分配段、建段表:分配页、建页表
- 进程带动内存使用的图谱
- 从进程fork中的内存分配开始
使用内存分为五步
- 分配段
- 建段表
- 分配页
- 建页表
- 重定位
1.分配段、建段表
fork()->sys_fork->copy_process
//在linux/kernel/fork.c中
int copy_process(int nr, long ebp, ...)
{
...
copy_mem(nr, p);
...
}
int copy_mem(int nr, task_struct *p) //nr表示第几个进程,p为PCB
{
unsigned long new_data_base;
new_data_base = nr*0x4000000; // 64M*nr ,这一步完成了虚拟