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

计算机组成原理学习笔记:计算机系统的层次结构

概述

  • 高级语言编写的代码最终需要翻译成机器语言,才能被我们的CPU执行,所以我们传统意义上的机器它只能识别机器语言
  • 机器语言就是用二进制来表述的这种指令,CPU在执行这些用二进制表示的机器指令的时候
  • 还需要把这些机器指令细分为更细的一些小步骤来执行, 我们把这些更细分的小步骤称为微指令或者微操作

体系结构构成

  • 微程序机器M0:微指令系统
    • 可以看成是传统机器M1的分解
    • 也就是用微指令来解释执行传统机器的每一条二进制机器指令
    • 由硬件直接执行微指令
  • 传统机器M1:用机器语言的机器
    • 只能识别二进制机器指令
    • 编程不方便
  • 虚拟机器M3:操作系统机器
    • 向上提供 广义指令,也就是系统调用
  • 虚拟机器M4:汇编语言机器
    • 对于使用汇编语言的程序员来说,看到的机器似乎是可以直接识别汇编语言程序, 只是看起来像
    • 我们把汇编语言机器称为虚拟机器,之所以叫虚拟是因为任何一台机器都不可能直接识别汇编语言
    • 汇编语言编写的程序必须通过汇编程序的翻译,成为等价的机器语言程序
    • 汇编语言和机器语言对应举例:
      • LOAD 5
      • MUL 6
  • 虚拟机器M5:高级语言机器
    • 同汇编语言一样,看似可以直接识别高级语言,其实都是看起来像,所以称之为虚拟的机器
    • 高级语言代码会经过编译程序翻译成汇编语言程序
    • 再经过汇编语言翻译,最终会得到机器语言程序
    • 我们所编写的程序难免会调用操作系统服务, 比如系统调用
    • 用汇编语言编写的程序,同样也需要通过系统调用的方式请求操作系统服务
    • 系统调用可以称为广义指令
  • 综上
    • 操作系统机器之上称之为软件部分,下面称为硬件部分
    • 下层是上层的基础,上层是下层的扩展
    • 计算机系统的层次结构在计算机组成原理和操作系统中的划分不一样,只不过我们选取的视角不一样而已
    • 这里计算机组成原理中给出了层次结构的更多是为了编程人员和硬件设计人员的视角来进行的划分

三种级别的语言

  • 我们最熟悉的高级语言:c/c++,我们用高级语言编写的源程序,需要通过编译程序的翻译,它翻译为一系列与之等价的汇编语言程序
  • 汇编语言本质上就是一些助记符, 为了更方便人类记忆的一些符号而已,本质上它和机器语言都是一一对应的,那么汇编语言在经过汇编程序的翻译之后
  • 就可以得到与之等价的机器语言程序,那机器语言程序才是可以让CPU执行的程序
  • 如果你的程序里面调用了其他的库函数,那么在经过汇编之后,还需要再经过链接的操作,也就把你的程序,还有你所调用的其他的一些程序链接起来

其他场景

  • 事实上也有一些语言经过编译程序的编译之后, 可以直接用于程序得到最终可以执行的机器语言程序
  • 另外还有一些高级语言代码的执行,而并不是通过编译程序来编译的,而是通过一种叫做解释程序的东西把高级源代码翻译成与之对等的机器语言指令
    • 解释程序也可以成为解释器
    • 很多脚本类的语言采用的都是这样的机制熟悉,如:javascript,python, shell

编译程序和解释程序的区别

  • 编译程序是直接把高级语言编写的源程序全部一次性翻译成机器语言程序,然后再来执行这个机器语言程序
    • 只需要进行一次编译(翻译)的过程之后就不需要再翻译了
    • 比如我们用c语言写的程序,把经过编译和汇编步骤之后,最终会形成一个.exe文件,那这个点exe文件其实就是用机器语言描述的程序
    • 只要生成了.exe文件,那我们之后就不需要再编译了,我们每次要运行这个程序只需要加载.exe就可以了,这是编译程序
  • 而解释程序是:翻译一句,执行一句
    • 比如我们用javaScript这种脚本语言写的代码
    • 代码在执行的时候,其实每执行一句都会丢给解释程序来帮我们把这个代码翻译成与之对等的机器语言,翻译一句就立即执行
    • 紧接着再翻译下一句,所以每一次我们要执行这段代码的时候,解释程序都需要翻译一遍
    • 显然这种编译型的语言它的执行效率肯定要更高一些,解释性的语言执行效率会更低一些
    • 打一个比方,这种编译程序其实就有点像是你用手写的方式把一整个文章都翻译成英文
    • 而解释程序就有点像是同声传译,来一句我翻译一句一句翻译一句
    • 那你用手写的方式翻译的英文是不是只需要翻译一次,以后你就不需要再翻译了
    • 而对于同声传译这种方式来说,即便一个人他是重复的说同样的那几句话,但是他每说一次同声传译,就一定需要再次翻译
  • 这就是编译程序和解释程序的一个区别
    • 像c、c++这一类的语言, 它们采取的策略就是用编译程序的方式一次性把它翻译成一个可执行的机器语言程序
    • 那这种类型的语言,通常可以把它称为编译型的语言
    • javascript,python这一类的语言,我们可以把它称为解释性的语言
    • 这就是不同的语言它所采取的一个不同的策略
  • 编译程序, 汇编程序和解释程序,我们可以把它们统称: 翻译程序, 它们的作用都是把更高级的语言翻译成低级的语言

计算机体系结构和计算机组成原理的区别

  • 计算机体系结构
    • 机器语言程序员所见到的计算机系统的属性概念性的结构和功能特性
    • 侧重:
      • 指令系统、数据类型、寻址技术、I/O机理
      • 如何设计硬件与软件之间的接口
      • 有无乘法指令
  • 计算机组成原理
    • 实现计算机体系结构所体现的属性,对程序员"透明"(看不见)
    • 侧重:
      • 如何用硬件实现所定义的接口
      • 如何实现乘法指令

总结

  • 计算机层次结构
    • 五层
      • M0:微程序机器(执行微指令)
      • M1:传统机器 (执行机器语言指令)
      • M2:操作系统机器 (向上提供广义指令)
      • M3:汇编语言机器 (执行汇编语言)
      • M4:高级语言机器 (执行高级语言)
    • 三个级别的语言
      • 高级语言、汇编语言、机器语言
      • 编译程序:将高级语言一次全部翻译为汇编语言,或一次直接翻译成机器语言
      • 汇编程序:将汇编语言翻译成机器语言
      • 及时程序:高级语言翻译为机器语言(翻译一句执行一句)
  • 综上
    • 越高层的机器看起来似乎就可以识别越高级的代码
    • 但事实上每一种代码的执行最终肯定都是需要把它翻译成机器语言

相关文章:

  • 猿创征文|工作中遇到技术盲区后的自我成长
  • SpringCloud 三种服务调用方式,你学会了吗?
  • 路由-hash和history模式的区别
  • 剑指:二叉树有关题目
  • 四天拿捏SpringSecurity?这份阿里架构师编写的理论与实战结合的学习笔记到底有多强
  • Hive3.1.2的HQL执行过程
  • 浅谈前端微服务背景及Micro-app的使用
  • 【Notepad】Notepad++ 安装XML/Json插件,格式化xml/json文件
  • 3分钟学会批量混合查询多家快递的物流信息
  • ElasticSearch Query DSL(二)
  • 【重识云原生】第六章容器6.1.7.1节——Docker核心技术cgroups综述
  • 关于C# HttpClient 的用法及相关问题的解决方法
  • illustrator插件-什么是脚本-如何使用-什么是动作-AI插件
  • UVA 10405【LCS】【背包】
  • Git学习总结
  •  D - 粉碎叛乱F - 其他起义
  • docker容器内的网络抓包
  • Docker下部署自己的LNMP工作环境
  • echarts花样作死的坑
  • ES6语法详解(一)
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue小说阅读器(仿追书神器)
  • 从伪并行的 Python 多线程说起
  • 大数据与云计算学习:数据分析(二)
  • 高程读书笔记 第六章 面向对象程序设计
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 关于Flux,Vuex,Redux的思考
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 小程序button引导用户授权
  • 用jquery写贪吃蛇
  • (33)STM32——485实验笔记
  • (二)springcloud实战之config配置中心
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (实战篇)如何缓存数据
  • (四)鸿鹄云架构一服务注册中心
  • (一一四)第九章编程练习
  • (转) RFS+AutoItLibrary测试web对话框
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .Net 8.0 新的变化
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net操作Excel出错解决
  • .net开发引用程序集提示没有强名称的解决办法
  • .net连接oracle数据库
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @RestControllerAdvice异常统一处理类失效原因
  • [ vulhub漏洞复现篇 ] Django SQL注入漏洞复现 CVE-2021-35042
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [ActionScript][AS3]小小笔记
  • [AIGC 大数据基础]hive浅谈
  • [Android]创建TabBar
  • [bzoj 3124][sdoi 2013 省选] 直径
  • [BZOJ3757] 苹果树