操作系统内存地址

来源:互联网 发布:手机电子琴软件 编辑:程序博客网 时间:2024/05/16 14:26

80x86架构中,需要区分的三种不同的地址:

  • 逻辑地址:
    包含在机器语言指令中用来指定一个操作数或一条指令的地址;由一个段和偏移量组成,并不是实际的物理内存地址,偏移量指段开始地址与实际内存地址之间的偏移位置
  • 线性地址:
    一个无符号的32位整数,也叫虚拟地址,在页式内存地址管理中,线性地址是页式管理转换前的地址

  • 物理地址:
    实际的内存地址,即内存条中的地址,与处理器引脚发送到内存总线上的电信号对应

逻辑地址转换过程:

这里写图片描述

在多处理系统中,所有的cpu都共享统一内存,ram可由cpu进行并发访问。
在ram芯片上读写操作需串行执行,引入内存仲裁器,作用是若ram芯片空闲,则允许cpu访问,若该芯片在处理另一个处理器的请求,则该cpu的访问会延迟,在单处理器上也使用内存仲裁器,内存仲裁器有硬件的电路进行管理,对于程序是隐藏的

段选择符,段寄存器

逻辑地址由两部分组成:一个段标识符和一个指定段内相对地址的偏移量(简称偏移量)
段标识符是由一个16位长的字段组成,称为段选择符,由处理器提供段寄存器来存放段标识符,段寄存器有6种:
(1)cs代码段寄存器,指向包含程序指令的段;
(2)ss栈寄存器,指向包含当前程序的段;
(3)ds数据段寄存器,指向包含静态数据或者全局数据段;
(4)其他三个寄存器es, fs, gs称为附加段寄存器,作一般用途,可以指向任意的数据段。

cs寄存器有一个重要的功能:它包含一个两位的字段,指明cpu当前的特权级:值为0代表最高优先级,值3代表最低优先级。
特权级(Ring)也叫(hierarchical protection domains),有的也称为用户态(user mode)。该机制用于保护数据和阻止恶意行为或误操作行为。特权级分4级,特权级0、1、2、3。特权级0,可以直接操作硬件,如CPU和内存;特权级3是一般的程序使用,可以调用基本的CPU指令
linux只用了0和3级,0级称为内核态,3级称为用户态。

0 0