RISC:精简指令集,低功耗低性能,以ARM为代表。
CISC:复杂指令集,高功耗高性能,以INtel为代表。

一段C代码如何变成可执行的代码
hello.c >> 预处理器 >> hello.i >> 编译器 >> hello.s >> 汇编器 >> hello.o + printf.o >> hello 过程如下图

计算机系统层级:
用户模式(User Mode): 在用户模式下,代码没有对硬件的直接控制权限,也不能直接访问地址的内存。程序是通过调用系统接口(System APIs)来达到访问硬件和内存。在这种保护模式下,即时程序发生崩溃也是可以恢复的。在你的电脑上大部分程序(Application programs)都是在用户模式下运行的。
内核模式(Kernel Mode): 在内核模式下,代码具有对硬件(虚拟内存,操作系统,进程,内存,io device,处理器。)的所有控制权限。可以执行所有CPU指令,可以访问任意地址的内存。内核模式是为操作系统最底层,最可信的函数服务的。在内核模式下的任何异常都是灾难性的,将会导致整台机器停机。

堆栈

堆栈的基本概念:
1.堆栈是一段连续的存储空间
2.后入先出的工作方式
3.只能从栈顶取出数据
4.能保持数据的执行顺序

用处:保存函数调用的返回地址,应对函数跳转指令(比如JMP指令)

堆栈指针寄存器Rsp: 用于保存一个地址,地址指向堆栈使用的内存地址,也就是栈顶。

关于堆栈只有两条指令:PUSH和POP;
PUSH:把内容加入到堆栈顶端,⼊栈时递减堆栈指针
POP:将堆栈顶端的内容弹出;弹出后,⾃增堆栈指针
汇编用法:

push ax:将寄存器ax中的数据送入栈中;
pop ax :从栈顶取出数据送入ax。

堆栈在函数中的使用:
函数顺次被调用 >> 堆栈顺次保存函数返回地址(下一条指令的地址) >> 执行函数 >> 堆栈逆序弹出返回地址,用作下一条指令的地址。

汇编转C
source:源操作数; dest:目的操作数.操作数有三种类型
立即数(Imm)——用数字文本表达式
寄存器操作数(Reg)——使用 CPU 内已命名的寄存器
内存操作数(Mem)——引用内存位置(指针存储)
reg:寄存器
mem:存储器
下图中:有括号代表地址,用指针变量表示(目的操作数是Mem类型),无括号代表变量,用寄存器变量表示。

计算地址实例:%rdx: 0xf000; %rcx: 0x0100;

xPSR是状态寄存器:记录 ALU 标志(0 标志ZF,进位标志CF,负数标志SF,溢出标志OF),执行状态,以及当前正服务的中断号,以下是 ALU 标志的理解实例;

D锁存器:

时序分析:
1)Clock = 1 Q+ 等于 D (透明)
2)Clock = 0 Q+ 等于Clock 变为低电平时的D
下图为有延迟情况

累加器电路:

时序分析:
1)上升沿输出;
2)上升沿期间Load是高电平就装载In的内容,是低电平就累加;
(tips: Load为高电平,重新装载,前面的内容清空,输出的累加是重新装载的)

C语言if…else转汇编
指令cmpq: 比较大小,即两个数做减法,仅修改标志位
指令jle :前<=后就跳转 Jump if less or equal

C语言CASE语句转汇编
ja: ⼤于则跳转

计算机执行代码过程:
1.取指:读9个字节,PC+9;
2 译码:读栈指针
3 执行:栈指针减去8;
4 访存:把增加的PC写入新的栈;指针指向新的值;
5 回写:更新栈指针

数据冒险:source和destination相同时可触发
当前指令需要前一条指令的计算结果,往往会造成阻塞。
解决冒险的方法
1.调整顺序
2.推迟执行
3.前推策略

控制冒险
控制冒险即跳转指令的冒险。跳转时,需要根据前面某条指令的结果确定分支的选择。
解决方法:停顿


超标量流水线
每个时钟周期可并发多条独立指令,即以并行操作方式将两条或多条指令编译并执行,为此需要配备多个功能部件。

乱序执行
下一条指令的执行不依赖前面那条延时较长的指令,只要有了操作数就能执行,此时可以打乱机器指令顺序,就算指令在后面,只要能执行,就先执行。

虚拟内存
MMU( Memory manage unit) 设置在总线上的内存管理单元, 是用于虚拟内存映射到物理内存的硬件。
①Processor( 处理器) 生成虚拟地址;
②MMU 生成 PTEA(页表条目地址)从内存的页表中请求内容;
③ 内存中的页表返回相应的 PTE 值;
④ PTE 的有效位是 0, MMU 触发异常, 转到异常处理程序;
⑤ 异常处理程序确定内存中的牺牲页, 并将其写会到磁盘上;
⑥缺页处理程序页面调入新的页面, 更新 PTE。
⑦ 由于 PTE 已经被更新好了, 重新发送虚拟地址到 MMU( 后面就和命中的过程一样了)

计算机体系架构学习笔记相关推荐

  1. MIPS架构学习笔记

    MIPS架构学习笔记 来源: ChinaUnix博客 日期: 2007.03.13 23:18 (共有条评论) 我要评论 MIPS架构学习笔记                              ...

  2. 专家谈计算机体系架构研究获“图灵奖”

    来源:科学网   作者:王佳雯 韩扬眉 近日,有着"计算机界的诺贝尔奖"之称的"图灵奖"揭开面纱.国际计算机协会宣布,美国科学家约翰·轩尼诗和大卫·帕特森获得2 ...

  3. 《王道计算机组成原理》学习笔记和总目录导航

    <王道计算机组成原理>学习笔记和总目录导读 本篇文章是阅读和学习<王道计算机组成原理>后总结的理论知识笔记导航,专门用于遗忘后复习 下面的文章是我在学习了<王道计算机组成 ...

  4. 计算机图形学基础学习笔记-其一:向量与线性代数

    计算机图形学基础学习笔记-其一:向量与线性代数 前言 计算机图形学概述 向量(矢量) 点乘 叉乘 点乘,叉乘与直角坐标系 矩阵 前言 GAMES101现代计算机图形学入门的学习笔记 正在为TA实习攒作 ...

  5. 计算机二级Python学习笔记(七)

    上一篇:计算机二级Python学习笔记(六) 第7章 文件和数据格式化 7.1 文件的使用 文件:数据的集合和抽象,存储在辅助存储器上的一组数据序列,可以包含任何数据内容. 文件类型:文本文件(由单一 ...

  6. 1-Kubernetes基础入门体系架构学习(一)

    0x00 基础简述 Borg 系统 Kubernetes 系统 1.发展经历 2.简要介绍 3.系统架构 0x01 组件详述 1.Kubernetes-Master 2.Kubernetes-Node ...

  7. 大型网站架构学习笔记

    前言 最近一直在拜读两本书: 1.李智慧老师的<大型网站技术架构 核心原理与案例分析> 2.曾宪杰老师的<大型网站系统与Java中间件实践> 看了并结合自己目前的工作进行了思考 ...

  8. 图形学基础 | 计算机图形学MOOC学习笔记

    计算机图形学 学习笔记 视频链接 http://www.icourse163.org/learn/CAU-45006?tid=1001746004#/learn/announce 补充一下一些图形学基 ...

  9. 实验室云平台架构学习笔记

    这些日子学习了实验室云平台的体系架构,在多次与小孟哥请教后对该架构有了一定了解.首先应明白建立云平台的目的,与传统的服务器相比,云平台可以将物理资源虚拟化为虚拟机资源池,灵活调用软硬件资源,实现对用户 ...

最新文章

  1. switch手柄可以连电脑吗_电脑可以拍照吗
  2. Spring教程--IOC(注解方式)和整合junit
  3. Python基础第三课
  4. EffectiveC++编程的50个建议
  5. php安装dat,PHP Parsing a .dat file
  6. oracle之数据处理之其他数据库对象练习
  7. 【重版】朴素贝叶斯与拣鱼的故事
  8. 假设以带头结点的循环链表表示队列_数据结构·链表(C实现)
  9. Java 1.3 控制流程(条件语句、循环结构)
  10. Sublime Text 支持GBK , 解决中文乱码问题
  11. The server of Apache (四)——配置防盗链和隐藏版本信息
  12. eclipse hibernate mysql_[s2sh]_3_hibernate与mysql还有eclipse的笔记
  13. 安卓版有道词典的离线词库-《21世纪大英汉词典》等
  14. 从 HTML 提取文本的 7 个工具
  15. Linux下VirtualBox出现kernel driver not installed的解决方法
  16. 利用 CSS 实现文字二次加粗和多重边框效果
  17. OSI七层协议的简介
  18. 信息学奥赛一本通(C++版)在线评测系统 1205:汉诺塔问题
  19. windows ESP分区丢失处理方案与磁盘分区注意事项
  20. 哪些公司在为制造业企业提供智能工厂解决方案?

热门文章

  1. 限制网速软件_最具良心的三款下载软件丨你pick哪款?
  2. php exif信息,php如何给jpg图片写入exif信息?
  3. Java 并发编程之 CopyOnWriteArrayList
  4. 日期类型前后台传递格式控制注解@DateTimeFormat@JsonFormat@JSONField
  5. 中移4G模块-ML302-OpenCpu开发-(固件编译和烧录)
  6. vega56刷64_Vega56刷入BIOS跑分直逼旗舰Vega64
  7. python中文人名识别(使用hanlp,LTP,LAC)
  8. scrapy导入配置文件setting.py,防止运行时找不到文件
  9. ubuntu18.04升级cmake
  10. python四中方法获取列表中最大/最小的前n个数值的位置索引