前言:
每天一点点,愚公移山的概念,本文的学习是为了更好地理解操作系统底层的工作原理~
概念说明:
CPU:
信息处理、寄存器、控制器控制单元、通过总线(FSB、前端总线、前端总线)传输数据的信息处理、寄存器、
内存设备:
两个连续的内存单元、N号单元和N号单元可以被认为是两个内存单元,也可以被认为是具有N地址的“字符单元”。
物理地址:
在此空间中,每个内存设备的唯一地址,此唯一地址是物理地址。
段寄存器:
为管理内存中的段而设置的寄存器
通用寄存器:
共8个,AX、BX、CX、DX、SI、DI、SP和BP:
物理模式和保护模式寻址:
16位元CPU(x86-16)、20个位址汇流排、16位元暂存器、实际模式
16位CPU(x86-16),物理模式,旧版MS-DOS操作环境
20条总线,最多2 20=1,048,576=1mb地址,寻址功能:1 MB;
16位寄存器,最大值:2 16=65,536=64kb,内存不足以显示物理地址,因此物理地址=段默认地址偏移地址
4个段寄存器:cs(代码段寄存器)、ds(数据段寄存器)、ss(堆栈段寄存器)、es(
存储要访问的指令的段地址的CS寄存器存储要访问的数据的段地址的DS寄存器SS寄存器、堆栈顶部的默认地址定义、SP寄存器、堆栈顶部的偏移地址定义
访问内存时需要给:CS,DS,ES,SS写入段地址,段寄存器中存放16位的段地址,段地址是参与寻址的,段地址左移4位,加上偏移地址,就是20位的物理地址;
32位CPU(x86-32),32根地址总线,32位寄存器,保护模式(Protected Mode)
32位CPU(x86-32),保护模式,就是通常所说的32位操作系统。
由于30根总线,最多:2^32=1,073,741,824=4GB个地址;
段寄存器(6个):CS(Code Segment,代码段寄存器)、DS(Data Segment,数据段寄存器)、SS(Stack Segment,堆栈段寄存器)、ES(Extra Segment,附加段寄存器)、FS(辅助段寄存器),GS(辅助段寄存器);
段寄存器FS和GS,没有处理器定义的目的,而是由操作系统运行它们来赋予目的;
段寄存器扩展了两个FS和GS,称为:段选择器,向其中写入的是:段选择子,段选择器的位数也为16位;
32位寄存器,最大:2^32=4,294,967,296=4GB,可以表示物理地址,为了兼容,表示形式还是:物理地址=段选择器(段基地址)+偏移地址;
32位机里完整的保留了16位寻址模式,即:寻址能力为1M,分段机制,每段不超过64KB,这就是通常所说的"实模式",在地址储存模型中属于“实地址储存模型”。
段寄存器中存放16位:段选择器(Segment Selector),这个值不直接的参与寻址,是指向段描述表(Segment Descriptor Table)的索引,段描述表中存放着:段描述符(Segment Descriptor)。
段描述符包含段的描述:段基地址(段在内存中的位置),段的大小,段的类型(是数据段还是代码段),权限等。
GDT(Global/Segment Descriptor Table):全局段号记录表,用来存储内存的分段信息,通过段选择子进行访问。
说简单点,GDT就是一个数组,每一个元素就是一个描述符,多个组合一起就构成了全局描述符表,而每一个描述符共64位。
实模式时的段寄存器,存储的值不再是段基地址了,而是GDT的索引,通过该索引可以找到对应的描述符,从描述符中获取到段基地址,然后再通过偏移地址就可以得到物理地址了。
操作系统,是否开启分页机制:
1、关闭,寄存器CR0的最高位,即位31为0,表示不采用分页机制:32位线性地址就等于32位物理地址;
2、开启,寄存器CR0的最高位,即位31为1,表示采用分页机制:32位线性地址内容分三部分:页目录索引<位31~22(10位)>,页表索引<位21~12(10位>、字节索引<位11~0(12位)>。
1.文章《【ds为什么寄存器】Linux,操作系统,CPU寻址,物理地址,段基址和段选择器》援引自互联网,为网友投稿收集整理,仅供学习和研究使用,内容仅代表作者本人观点,与本网站无关,侵删请点击页脚联系方式。
2.文章《【ds为什么寄存器】Linux,操作系统,CPU寻址,物理地址,段基址和段选择器》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
相关推荐
- . 现代买票为什么带上携程保险
- . 潮阳怎么去广州南站
- . 湖南马拉河怎么样
- . 烧纸为什么到三岔路口
- . 百色为什么这么热
- . 神州租车怎么样
- . 芜湖方特哪个适合儿童
- . 护肤品保养液是什么类目
- . 早晚的护肤保养有哪些项目
- . 女孩护肤品怎么保养的最好