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


    概述

    • 高级语言编写的代码最终需要翻译成机器语言,才能被我们的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:高级语言机器 (执行高级语言)
      • 三个级别的语言
        • 高级语言、汇编语言、机器语言
        • 编译程序:将高级语言一次全部翻译为汇编语言,或一次直接翻译成机器语言
        • 汇编程序:将汇编语言翻译成机器语言
        • 及时程序:高级语言翻译为机器语言(翻译一句执行一句)
    • 综上
      • 越高层的机器看起来似乎就可以识别越高级的代码
      • 但事实上每一种代码的执行最终肯定都是需要把它翻译成机器语言
  • 相关阅读:
    [附源码]计算机毕业设计springboot基于Java的失物招领平台
    无胁科技-TVD每日漏洞情报-2022-9-8
    anaconda:Env creation from python 3.7 not working M1 Apple Silicon Mac
    Reference for Ruijie Switch Configuration
    数据库系统原理与应用教程(079)—— MySQL 练习题:操作题 181-185(二十三):综合练习
    C++知识点5:如果一个函数中是if else的结构,在每个条件判断后返回值,和在函数的结尾处返回值有什么区别?
    【博客458】BGP(边界网关协议)-----状态机
    消息队列基本原理和选型对比
    动态内存管理
    腾讯云三年轻量2核4G5M服务器优惠价格(3年566元)
  • 原文地址:https://blog.csdn.net/Tyro_java/article/details/126688350