欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

处理器体系结构

程序员文章站 2022-05-18 14:49:03
...

ASCII标准:以单字节的整数来表示字符
文本文件:由ASCII字符构成(例如.c,.i,.s文件,其他都为二进制文件)

linux> gcc -Og -S 文件名.c
//-Og:符合原代码整体结构的优化等级
//-S:产生汇编代码
linux> gcc -Og -c 文件名.c
//-c:产生文件名.o文件
linux> gcc -Og -d 文件名.o
//-d:产生文件名.s文件

操作系统:位于应用程序和硬件之间的软件

  • 文件:I/O设备
  • 虚拟内存:主存和I/O设备
    1.每个进程看到的内存一致
    2.地址

    • 多字节对象的地址是所用字节最小的地址(32位int被存储在0x100至0x103 4个地址)
    • 小端法:最低有效字节在最前面(intel,Android,IOS)

    3.字节数组,每个字节都有唯一的地址。
    4.虚拟地址空间所有可能地址集合
    5.由不同的区域构成。(地址由小到大)
    处理器体系结构

    • 程序代码和数据
    • 共享库
    • 栈:
      处理器体系结构
      • 函数调用
      • 栈底不变,向下生长(越下地址越小)
      • 从栈顶插入或删除元素
      • pushq Src:
        • 从地址 Src 中取出操作数
        • 把 %rsp(栈指针位于栈顶) 中的地址减去 8(向下移动)
        • 把操作数写入到 %rsp 的新地址中
      • popq Dest:
        • 从 %rsp 中存储的地址中读入数据
        • 把 %rsp 中的地址增加 8(向上移动)
        • 把刚才取出来的值放到 Dest (必须是寄存器)中
    • 内核虚拟内存
  • 进程:CPU,主存和I/O设备。
    1.并发运行:不同进程的指令交错进行,操作系统内核(管理进程的代码和数据结构的集合)进行上下文切换实现。多核处理器将多个CPU集成到1块芯片,每个CPU都有自己的L1L2高速缓存。
    2.上下文:程序运行所需的状态信息
    3.由多个线程组成

  • 虚拟机:对计算机的抽象

buffer overflow(缓存区溢出):参考虚拟地址空间,运行时栈有 8MB 的大小限制,一般用来保存局部变量。由于C对数组引用不进行边界检查,对越界数组元素的写操作会破坏栈中的状态信息。

void echo() {
    char buf[4]; //为字符串分配的空间
    gets(buf);   //gets函数无法确定空间是否足够
    puts(buf);
}
void call_echo() {
    echo();
}

参考图3-40(CP196)输入的字符串长度越长,造成的破坏越大。可以用指向攻击代码的指针覆盖返回地址。
处理缓冲区溢出攻击:

  1. 编写代码时可以对边界进行检查
  2. 系统层级的保护:栈随机化
  3. 认证机制(Stack Canaries):在超出缓冲区的位置加一个特殊的值

主板:主印制电路板
控制器:I/O设备或主板的芯片组
适配器:主板插卡
I/O设备:通过控制器或适配器和I/O总线相连
主存:
缓存存储在容量较大,慢速磁盘的数据
- 执行程序时,存放程序和其需要处理的数据
- 由DRAM芯片组成。

CPU(*处理单元,处理器)

  • 核心为大小为1个字的寄存器(程序计数器PC)。

  • Intel处理器俗称x86.x86-64是该处理器的机器语言。

  • 通用目的寄存器CP120
  • 16个存储64位
  • 存储整数数据和指针
  • 名字都以%r开头
  • 条件码寄存器
  • 描述算术或逻辑操作的属性,用于条件结构分支
  • 除leaq指令外的其他指令都会隐式设置条件码
  • CMP和TEST指令只根据结果设置条件码但不会改变参数的值
  • 部分条件码:

    • CF:无符号溢出
    • ZF:结果为0
    • SF:结果为负
    • OF:补码溢出
  • 功能:

    • 存取数据:在内存和寄存器之间传输数据
    • 计算:对寄存器或者内存中的数据执行算术运算
    • 传输控制:非条件跳转和条件分支
  • 性能CP361

    • 延迟:运算所需的总时间
    • 发射:连续相同类型的运算所需的间隔时间
    • 容量:执行某运算的功能单元数量(最大吞吐量为其倒数)
      吞吐量界限:原始计算能力
      乱序:指令执行的顺序和机器级程序的顺序可能不一致
  • 运行示意
    处理器体系结构

  • ICU(指令控制单元):从内存中读出指令序列
    • 1条指令可被译成多个操作
    • 退役单元:指令操作完成后且引起该指令的分支点预测正确后,可以退役该指令。
  • EU(执行单元):执行操作
    • 每个时钟周期会接收到多个操作,这些操作会被分配到一组功能单元执行实际的操作。
    • 操作结果可以直接在功能单元之间传送。
    • 条件分支如果预测错误,EU会丢弃分支点计算出的结果。

示例:helloworld程序

  1. 将I/O设备输入的字符读入寄存器,再放入内存。
  2. 结束输入后,编译系统把.c文件转化为.o文件。并从磁盘复制到主存。
  3. 把指令复制到处理器后,开始执行机器代码。

cache:(高速缓存)

可移植性:使程序减少对数据类型的字节数的依赖性

相关标签: 处理器