当前位置: 首页 > ds >正文

图解系统的学习笔记--硬件结构

CPU是如何执行程序的?

图灵机的工作方式
  1. 图灵机的基本组成
    1. 纸带:纸带由一个个连续的格子组成,每个格子可以写入字符,纸带就好比内存,而纸带上的格子的字符就好比内存中的数据或程序
    2. 读写头:可以读取只带上任意格子的字符,也可以把字符写入到纸带的格子
    3. 读写头上的部件-存储单元、控制单元、运算单元
      1. 存储单元用于存放数据
      2. 控制单元用于识别字符是数据还是指令、以及控制程序的流程等
      3. 预算单元用于执行运算指令
冯诺依曼模型
  1. 计算机的基本结构:运算器、控制器、存储器、输入设备和输出设备
  2. 运算器、控制器是在中央处理器里面的
  3. 存储器:内存
  4. 输入、输出设备是计算机外接的设备,键盘、显示器
  5. 内存
    1. 程序和数据是存储在内存,存储的区域是线性的
    2. 存储数据的基本单位是字节,一个字节等于8位bit,每一个字节都对应一个内存地址
    3. 内存的地址是从0开始编号的,然后自增排列,最后一个地址为内存总字节数-1,类似于数组,所以内存的读写任何一个数据的速度都是一样的
  6. 中央处理器-CPU
    1. 中央处理器就是CPU,32位CPU和64位CPU最主要的区别是一次可以计算多少字节的数据
      1. 32位CPU一次可以计算4个字节
      2. 64位CPU一次可以计算8个字节
    2. CPU内部还有一些组件:寄存器、控制单元、逻辑计算单元
      1. 控制单元:负责控制CPU工作
      2. 逻辑运算:负责计算
      3. 寄存器:很多种类,每种寄存器不一样
        1. 主要作用是存储计算时的数据
        2. 通用寄存器:用来存放需要进行运算的数据
        3. 程序计数器:用来存储CPU要执行下一条指令(所在的内存地址),注意部署存储了下一条要执行的指令,此时指令还在内存中,程序计数器只是存储了下一条指令的地址
        4. 指令寄存器:用来存放当前正在执行的指令,也就是指令本身,指令被执行完成之前,指令都存储在这里
总线
  1. 总线是用于CPU和内存以及其他设备之间的通信
    1. 地址总线:用于指定CPU将要操作的内存地址
    2. 数据总线:用于读写内存的数据
    3. 控制总线:用于发送和接收信号,比如中断、设备复位等信号,CPU收到信号后自然进行响应,这个时候也需要控制总线
  2. 当CPU读写内存数据的时候,一般需要通过下面这三个总线
    1. 地址总线来指定内存的地址
    2. 控制总线控制是读或写命令
    3. 数据总线用于传输数据
输入、输出设备
  1. 输入设备向计算机输入数据,计算机经过计算后,将数据输出给输出设备
  2. 如果输入设备是键盘,按下按键的时候是需要和CPU进行交互的,这个时候就会用到控制总线
线路位宽与CPU位宽
  1. 数据是通过线路进行传输的,通过操控电压,低电压表示0,高电压表示1
    1. 构造了高低高这样的信号,其实就是101二进制数据,十进制则表示5,如果只有一条线路,就意味着每次只能传递1bit的数据,即0或1,那么传输101这个数据,就需要三次才能完成,效率很低
    2. 一位一位传输的方式,称为串行,下个bit必须等待上一个bit传输完成才能进行传输,当然,一次想多传一些数据,增加线路即可,这时数据就可以并行传输
    3. CPU想要操作内存地址,需要地址总线
      1. 如果地址总线只有1条,那每次只能表示0或1这两种地址,所以CPU能操作的内存地址最大数量为2(2^1)个
      2. 如果地址总线有2条,那每次能表示00、01、10、11这四种地址,所以CPU能操作的内存地址最大数量是4(2^2)个
      3. 想要CPU操作4G大的内存,那么就需要32条地址总线2^32=4GB
  2. CPU位宽
    1. CPU的位宽最好不要小于线路位宽,32位的CPU最好和32位宽的线路搭配
程序执行的基本过程
  1. CPU执行程序的过程如下
    1. CPU读取程序计数器的值,这个值是指令的内存地址,然后CPU的控制单元操作地址总线指定需要访问的内存地址,接着通知内存数据准备数据,数据准备好之后通过数据总线将指令数据传给CPU,CPU收到内存传来的数据后,将这个指令数据存储到指令寄存器
    2. 程序计数器的值自增,表示指向下一条指令
      1. 这个自增的大小由CPU的位宽决定
    3. CPU分析指令寄存器中的指令,确定指令的类型和参数,如果是计算类型的指令,就把指令交给逻辑计算单元;如果是存储类型的指令,则交由控制单元执行
  2. 总结:一个程序执行的时候,CPU会根据程序计数器里的内存地址,从内存里面把需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令
  3. CPU的指令周期:CPU从程序计数器读取指令到执行再到下一条指令,这个过程会不断循环,直到程序执行结束
a=1+2执行具体过程
  1. 需要把程序翻译为汇编语言的程序,这个过程称为编译汇编代码
  2. 汇编代码需要汇编器翻译成机器码,这些机器码由0和1组成的机器语言,这一条条机器码,就是一条条的计算机指令,这个才是CPU能够真正认识的东西
  3. 程序编译过程中,编译器通过分析代码,发现1和2是数据,于是程序运行时,内存会有专门的区域来存放这些数据,这个区域就是数据段
  4. 注意:数据和指令是分开区域存放的,存放指令区域的地方称为正文段
  5. 指令
    1. 指令的内容是一串二进制数字的机器码,每条指令都有对应的机器码,CPU通过解析机器码来知道指令的内容
    2. 不同的CPU有不同的指令集,也就是对应着不同的汇编语言和不同的机器码
    3. MIPS的指令
      1. R指令:用在算数和逻辑操作,里面有读取和写入数据的寄存器地址,如果是逻辑位移操作,后面还有位移操作的位移量,而最后的功能码则是在前面操作码不够的时候,扩展操作码来表示对应的具体指令的
      2. I指令:用在数据传输、条件分支等,这个类型的指令,就没有了位移量和功能码,也没有了第三个寄存器,而是把这三部分直接合并成一个地址值或一个常数
      3. J指令:用在跳转,高6位之外的26位都是一个跳转后的地址
    4. 编译器在编译程序的时候会构造指令,这个过程叫做指令的编码
    5. CPU执行程序的时候,就会解析指令,这个过程叫做指令的解码
    6. 一个指令周期:取得指令--指令译码--执行指令--数据回写
      1. 取得指令:通过程序计数器读取对应内存地址的指令
        1. 指令存放在存储器里面
        2. 程序计数器和指令寄存器取出指令的过程是由控制器操作的
      2. 指令译码:CPU对指令进行解码
        1. 由控制器进行的
      3. 执行指令:CPU执行指令
        1. 算数操作、逻辑操作、数据传输、条件分支操作:算术逻辑单元操作的,也就是由运算器处理的
        2. 一个简单的无条件地址跳转,是直接在控制器里面完成的
      4. 数据回写:CPU将计算结果存回到寄存器或将寄存器的值存到内存中
http://www.xdnf.cn/news/16655.html

相关文章:

  • 【安卓笔记】OOM与内存优化
  • Sentinel 不同层面的流控保护
  • Ubuntu、pytorch、mamba安装
  • SD卡简介与驱动开发
  • kotlin基础【3】
  • C++模板元编程从入门到精通
  • Java设计模式-通俗举例
  • 项目上线中的跨域问题
  • 2025年人工智能三大突破:多模态推理、具身智能与全球治理
  • 【计算机网络】OSI七层模型
  • 重生之我在暑假学习微服务第三天《Docker-上篇》
  • 前端工程化常见问题总结
  • Ubuntu lamp
  • 前端静态资源优化
  • selenium 特殊场景处理
  • 手游遇攻击为何要用游戏盾SDK?
  • 常用设计模式系列(十五)—解释器模式
  • WAIC 2025深度解析:当“养虎”警示遇上机器人拳击赛
  • 《计算机“十万个为什么”》之 [特殊字符] 序列化与反序列化:数据打包的奇妙之旅 ✈️
  • 7、Docker 常用命令大全
  • HLS视频切片音频中断问题分析与解决方案
  • 力扣17:电话号码的字母组合
  • vue-grid-layout元素交换位置及大小
  • 【uniapp】---- 使用 uniapp 实现视频和图片上传且都可以预览展示
  • Python系统交互库全解析
  • Cloudflare CDN 中设置地域限制并返回特定界面
  • 基于Vue3.0+Express的前后端分离的任务清单管理系统
  • 虚拟地址空间:从概念到内存管理的底层逻辑
  • “本地计算机上的 mysql 服务启动后停止,某些服务在未由其他服务或程序使用时将自动停止”解决方式
  • R语言与作物模型(DSSAT模型)技术应用