存储介质:越向上,存储容量越小。
ALU只会加法运算,与左移运算。
CPU内部运算,数据存储在寄存器内
x86: eax寄存器的值与ebx寄存器内的值相加,结果保存到eax寄存器中。
寄存器堆:CPU内部的一堆寄存器,eax,ebx等等
MMU,主要完成物理内存与虚拟内存的映射
MMU位于CPU内部,作为一个硬件存在
.text段存放代码
.data段存放数据
heap:堆区,从下到上是由低地址区到高地址区
靠近3G的部分,是栈区。
0~3G为用户空间
3G~4G为内核区,内核区里面有一个区域,叫进程控制块
程序运行的时候,就会产生虚拟内存区。
程序运行a.out时,就会产生进程,同时也产生了虚拟内存。
虚拟内存并不是真实存在的,真正的内存是物理内存。
即使物理内存大小为512MB的物理内存,也可以运行虚拟内存为4G的应用程序。
虚拟地址:可用的地址空间/范围。不代表占用物理内存的大小。
Linux下,用户空间ring3,内核空间ring0
上例,同一个a.out 运行,产生两个
物理内存空间:用多大,加载多大。
按照页面大小进行分配,一个页面最小4K。
用户空间(0G·3G部分) 数据区/代码区等都可能需要进行映射,每一块都以4K为单位进行映射。对于同一个程序映射出来的不同进程,有多少个进程,就需要单独映射多少个区域。因为进程彼此独立。
内核空间间(4G部分),尽管是不同的进程,但是由于位于同一个OS/同一个内核空间,因此,这两部分空间映射到内存的同一个为同一个物理空间。
总之:用户空间,有多少给进程,就分配多少份独立的存储空间。内核空间,同一个程序的不同进程共用物理内存。