特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料,本文大部分内容和所有图片来源于这个专栏。

00、计算机的工作模式

关键词: CPU、总线、内存、其他设备
理解: 计算机仅通过cpu执行数据运算,中间结果保存到内存,最终运算结果传递给到其他进程处理
<图片>

  • CPU是这台计算机的大脑
  • 总线组成CPU和其他设备的高速通道
  • 内存存储介质,保存CPU计算的中间结果
  • 其他设备,显卡/显示器、磁盘控制器/磁盘、usb控制器/鼠标键盘等

01、CPU和内存

关键词: 运算单元、数据单元、控制单元、代码段、数据段、指令指针寄存器、进程切换、总线
理解: CPU内部有3个单元组成。当程序加载到内存时,cpu通过总线读取进程的数据段(数据)和代码段(指令),将运算后的结果写回数据段。
<图片>

  • 运算单元只管算,例如做加法、做位移等等。
  • 数据单元包括 CPU 内部的缓存和寄存器组,空间小速度快,可以暂时存放数据和运算结果。
  • 控制单元是一个统一的指挥中心,它可以获得下一条指令,然后执行这条指令。
  • 内存分段这里简单分为代码段和数据段两块,分别存放指令和数据。
  • 指令指针寄存器是控制单元部分,存放下一条指令在内存中的位置。
  • 进程切换CPU 里有两个寄存器,专门保存当前处理进程的代码段的起始地址,以及数据段的起始地址(A进程切换B进程后,指令指针寄存器也会指向B的代码段)。
  • 总线有地址总线的位数决定寻址范围,数据总线的位数决定一次读取多少数据。

02、x86平台

关键词: 开放、统一、兼容
理解: 约定俗成
<图片>

03、x86平台处理器(8086处理器和32位处理器)

关键词: CS、DS、SS、20位地址总线、32位地址总线、段描述符、选择子、实模式、保护模式
理解: 实模式是为了16位处理器(20bits总线),但这样对于32位处理器(32bits总线)无法做到兼容, 开机后会从实模式切换到保护模式。
<图片>

04、总结

对于X86架构在32bits处理器会开启段的工作模式,CPU对内存寻址的过程中,控制单元寄存器中存放的是段选择子, 通过它在内存的表格中找到段描述符,最终拿到段起始地址。下图说明在此模式下cpu各单元和内存的工作模式。
<图片>

05、练习题

# 了解下汇编指令:
mov, call, jmp, int, ret, add, or, xor, shl, shr, push, pop, inc, dec, sub, cmp

# 答案: 
move a b :把b值赋给a,使a=b
call和ret :call调用子程序,子程序以ret结尾
jmp :无条件跳
int :中断指令
add a b : 加法,a=a+b
or :或运算
xor :异或运算
shl :算术左移
ahr :算术右移
push xxx :压xxx入栈
pop xxx: xxx出栈
inc: 加1
dec: 减1
sub a b : a=a-b
cmp: 减法比较,修改标志位

参考资料

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐