ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

CS:APP Chapter 3 程序的机器级表示-读书笔记

2021-09-22 23:36:08  阅读:137  来源: 互联网

标签:Chapter 读书笔记 APP 描述符 地址 内存 寄存器 CPU 指针


3.1 程序的机器级表示

发展历史

Intel,AMD,ARM 等企业各有又是,CPU 从 8 位发展到 16 位,再到 32 位,近几年发展到 64 位,当下的 CPU 体系被称为 x86-64 体系结构,主要是 Intel 和 AMD 两家的产品。


IA32 处理器体系结构是 32 位芯片。

CPU 的微观视图架构

当下的计算机大多是采用冯诺伊曼体系结构,计算机由存储器,运算器,控制器,输入设备,输出设备组成。

IA32 的寄存器

通用寄存器的特殊用法

  • EAX:扩展累加寄存器。在乘法和除法指令中被自动使用;

  • ECX:循环计数器。

  • ESIEDI:扩展源指针寄存器和扩展目的指针寄存器。用于内存数据的存取;

  • ESP:扩展堆栈指针寄存器。一般不用于算术运算和数据传送,而用于寻址堆栈上的数据。

  • EBP:扩展帧指针寄存器。用于引用堆栈上的函数参数和局部变量;

特殊寄存器的用法

指令指针寄存器 EIP 也被称为程序计数器,Program Counter 也就是简称 PC。

PC 存放着下一条要执行的指令的地址,如果遇到了跳转,返回之类的指令,就会改变 PC 寄存器中存储的值,使之指向下一个目的地。

32 位的标志寄存器也就是 EFLAGS 寄存器,E 代表这个寄存器是 32 位的,FLAGS 代表里面存放的是有关程序状态的信息,有些指令将会改变这个状态信息,而有的指令则会根据这类状态信息执行不同的分支操作。

系统寄存器

只允许在最高特权级别下的程序进行访问的寄存器(例如操作系统内核),除此以外禁止应用程序访问。

  • 中断描述符表寄存器IDTR:保存中断描述符表的地址。

  • 全局描述符表寄存器GDTR:保存全局描述符表的地址,全局段描述符表包含了任务状态段和局部描述符表的指针。

  • 局部描述符表寄存器LDTR:保存当前正在运行的程序的代码段、数据段和堆栈段的指针。

  • 任务寄存器:保存当前执行任务的任务状态段的地址。

  • 调试寄存器:用于调试程序时设置断点(breakpoint)。

IA32 的内存管理

实地址模式

在实地址模式下,处理器可以使用 20 位的地址总线,因此就可以访问多达 \(2^{20}\) 大小的内存,也就是 1MB,而 8086 的 CPU 只有 16 位的地址总线,因而不能直接使用 20 位的内存地址,需要进行一种映射变换,让 20 位的地址映射到 16 位的地址空间上。

为了实现这种映射,我们可以先考虑将多出来的 4 位作为内存的分段数量,而分出来的每一段都代表一个 16 位的地址空间,这样只能控制 16 位物理内存的 8086CPU 也就可以处理高达 20 位的地址了,这是一种较为普遍而简单的做法。

其中的段首地址不一定是整数,也有可能是一个比较不那么凑整的数字。

\[08F1:0100 \\ 08F1*10H+0100H=09010H \]

可见段首地址可以是任意的地址,这个段也就是以前汇编中学到的代码段,数据段等的地址。

分页模式

  • 将内存分割成4KB大小的页面,同时将程序段的地址空间按内存页的大小进行划分。

    • 页面的大小往往是固定的
  • 分页模式的基本思想:当任务运行时,当前活跃的执行代码保留在内存中,而程序中当前未使用的部分,将继续保存在磁盘上。当CPU需要执行的当前代码存储在磁盘上时,产生一个缺页错误(也就是缺页中断),引起所需页面的换进(从磁盘载入内存)。

  • 通过分页以及页面的换进、换出,一台内存有限的计算机上可以同时运行多个大程序,让人感觉这台机器的内存无限大,因此称为虚拟内存。

在系统的内存金字塔中,所有的下层存储都是上层存储的缓存,下层的速度更慢,但是成本低廉所以容量较大,上层速度更快但是更加昂贵因此容量也相对下一层要小得多。使用缓存可以让跨层的数据读写更加快速,因为高层的时间往往更加宝贵,相同的时间堵塞,层次越高,性能影响越大。

标签:Chapter,读书笔记,APP,描述符,地址,内存,寄存器,CPU,指针
来源: https://www.cnblogs.com/tanknee/p/15322287.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有