【Linux】【进程】进程的地址空间 虚拟地址 物理地址
32位系统
a. 32位操作系统可以访问4GB内存
b. cpu有八位位线 每次访问8bit 1字节
c. cpu有32根地址线 每次访问2^32
d. 因此是2^32字节-->4GB
分为1GB的内核空间和3GB的用户空间
内核空间1GB |
---|
用户空间 |
3 |
GB |
64位系统
cpu最大可以访问2^64,但是目前最大只使用了48位 256 TB
分为128TB的用户空间和128TB的内核空间
内核空间128TB |
---|
未使用 |
未使用 |
用户空间128TB |
虚拟地址 物理地址
不同系统下每个进程在虚拟地址都是一样的 需要通过虚拟地址通过查表(页表)来找到物理地址来访问和存储数据
页表是存储在物理内存(RAM)中的
cpu中的mmu负责根据页表查找对应物理地址
每个进程均有自己的用户地址空间转换表,以及所有进程共享内核地址空间转换表(如果有十个进程就有十个用户地址空间转换表和1个内核地址空间转换表)
用户地址空间转换表以及内核地址空间转换表均是每个进程的页表的组成部分)(每个进程都有自己的页表)
操作系统管理虚拟地址和物理地址主要通过
内存分段
虚拟地址分为 段选择因子和段内偏移
段选择因子有段号和标志位
段号用来索引段表
段表里面有段基地址 段界限和特权等级
段基地址和段内偏移可以定位物理地址
内存分页
虚拟地址是由虚拟页号和页内偏移构成
虚拟页号用来查询页表
页表里面主要有两大部分:页表属性和物理页号
页表属性可以判断此页是否在物理内存上
物理页号+页内偏移可以定位物理地址
多级页表
层层查找
32位–>二级目录
虚拟地址分为 1级页号+二级页号+页内偏移
64位–>四级目录
虚拟地址分为 PGD+PUD+PMD+PTE+OFFSET
标签:32,虚拟地址,空间,物理地址,地址,页表,进程 From: https://blog.csdn.net/m0_64014551/article/details/144990832