程序地址空间(是程序编译时的给定程序内存安排方式)进程的空间(百度网盘)
物理内存:32位系统的内存最大为4G
在编译程序时就已经安排好了一个进程的全部地址分布,而且在这个安排好 的进程里,所有的地址都是连续的
(但是这是安排而已,是一种虚拟的安排,不存在实际的物理内存中)
页表的存在:1、由于程序的空间是连续的,但是为了追求内存的利用率,所以就把程序空间的地址进行转化,分割,然后寻找合适的物理内存,这样的一种离散式存储的机制,能够很好的利用的内存的空间
2、内存访问控制
task_struct{ // ' //usr/src/kernels/3.10.0-693.el7.x86_64/include/linux/sched.h '文件中1400行左右就有struct task_struct{}
mm_struct{ //内存描述符
}
}
3、在fork时,连同页表也一同复制
【重要】写时拷贝技术:操作系统通过复制父进程创建子进程,子进程初始化时于父进程指向同一块物理内存,当内存数据发生变化时,会为子进程重新开辟内存,并更新页表
虚拟地址空间和页表的作用 | 1.提高内存利用率(分割->再分配) 2.增加内存访问控制(写时拷贝技术:标记子进程的数据) 3. 保持进程独立性(mm_struct的控制产生新的进程号) |
页表是如何将虚拟地址转化成物理地址的
(每个读取单元式是4096个字节,4K)
分段式内存管理 | 【段号+段内偏移】操作系统里有一个段表,这个段表里存的是很多的段号;段号里存的是段的起始位置和段内偏移的信息 |
段页式内存管理 | 【虚拟段号+页号+页内偏移】 |
分页式内存管理 | 【页号+页内偏移】 |
分页式与分段式相似
内存置换