linux内存地址

虚拟地址(线性地址)

	逻辑地址:每一个逻辑地址都由一个段标示符和段偏移组成。
	线性地址:也叫虚拟地址,在32位系统下,每个进程会虚拟出4G内存,其中0×00000000 到 0xBFFFFFFF是用户进程空间,
0xC0000000 到 0xFFFFFFFF是内核进程空间。
	物理地址:实际的内存地址

逻辑地址 ----(段表)—> 线性地址 — (页表)—> 物理地址

逻辑地址是段标识+段内偏移量的形式,MMU(内存管理模块)通过查询段表,可以把逻辑地址转化为线性地址。

段寄存器(找到逻辑地址)
intel处理器有两种方式进行地址转换:实模式、保护模式。
段寄存器的唯一目的是为了存放段选择符。分别为cd,ss,ds,es,fs和gs六个。
六个寄存器有三个有特殊的用途:
	cs:代码段寄存器,指向包含程序指令的段,其中包含一个两位的字段,用以指明CPU的当前特权(CPL),0表示最高级,3表示最低级。
分别称之为内核态和用户态。
	ss:栈段寄存器,指向当前程序栈的段
	ds:数据段寄存器,指向静态数据或全局数据段。

Linux 内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的。这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。

你可能感兴趣的:(Linux)