目录
每个存储单元是一个字节,一共有2^32个字节,大概有4G。
栈往下走,堆往上走。
static修饰的局部变量编译的时候会被编译到全局数据区。
如下图,父子进程访问同一个变量,子进程修改了一下变量,如何做到同一个地址,却读到了不同的内容?
答:因为这个地址不是物理地址,这个地址是虚拟地址或线性地址,平时语言用的地址都是虚拟地址。
进程地址空间,页表,物理内存
创建父进程时,系统会创建对应的PCB,进程对应的代码和数据会加载到内存,同时PCB还能找到代码和数据。
创建父进程
实际上并没有这么简单,创建父进程后,有了PCB后,系统还要为该进程创建进程地址空间,页表。
进程用的地址是进程地址空间里面的虚拟地址。
页表存放的是虚拟地址和物理地址的映射。
假设定义一个变量,那么系统要在物理内存中为这个变量开辟一个空间,这个变量有一个物理地址和一个虚拟地址,进程通过页表将虚拟地址转成物理地址实现访问。
创建子进程
如果这个父进程创建了一个子进程,为了体现进程独立性,子进程会拷贝父进程的PCB,进程地址空间&