1.程序不占用内存,进程占用内存
2.kernel有pcb进程控制块,有一些成员变量,进程描述符
3.
虚拟地址(真正的物理地址在内存条上)./a.out
4G(可用) |
---|
kernel(内核数据) |
环境变量,main参数 |
stack(栈) |
.so加载位置 |
heap(堆) |
.bss |
地址8000.data(int a=10;) |
.rodata(只读数据段) |
.text(代码段) |
./b.out
kernel(内核数据) |
---|
环境变量,main参数 |
stack(栈) |
.so加载位置 |
heap(堆) |
.bss地址 |
8000.data(int a=10;) |
.rodata(只读数据段) |
.text(代码段) |
想把虚拟地址放在内存条上就需要MMU
如果两个进程虚拟内存地址一样,分块映射
4.一个page是4kb,MMU是4kb,一个寄存器是4kb
5.当申请的内存过大,需要连续空间时,MMU需要映射多个内存条区域
6.操作系统只有一个,所有进程的kernel共享,所以所有进程位于kernel的pcb都映射到内存条的一块区域内
7.MMU可以修改访问级别,CPU会将内存分级(Windows分4级,Linux分2级),MMU可以进行权级切换