• [面试直通版]操作系统之编程语言与运行原理(上)


    点击->操作系统复习的文章集<-点击

    目录

    计算机的层次结构划分

    学习目标

    回顾为什么分层?

    计算机的层次结构

    程序编译与程序解释

    典型问题:

    语言表达

    编译与解释

    高级语言的虚拟机

    编译器原理剖析


    • 计算机的层次结构划分

    • 由于是基础性知识,所以没有相关的面试题
    • 学习目标

    • 掌握高级语言、汇编语言、指令集等概念
    • 掌握计算机层次结构
    • 回顾为什么分层?

    • 在网络那说了
    • 分层的目的是为了不同层实现不同的功能,并且层与层之间的关联是解耦合的
    • 类比函数的实现与设计,函数体不能太长
    • 太长就应该分成多个函数去实现、设计
    • 计算机层次结构也是由于如此原因也进行了划分
    • 一个良好的设计规范:
    • 复杂系统的实现要有清晰明确的分层设计
    • 计算机的层次结构

    • 也可以划分为7个层次:
    • 应用层
    • 高级语言层
    • 汇编语言层
    • 操作系统层
    • 传统机器层
    • 微程序机器层
    • 硬件逻辑层
    • 操作系统层及其以上的层次可以理解为软件
    • 以下的层次可以理解为硬件
    • 应用层
    • 主要解决的是
    • 满足用户在各种场景下便捷使用计算机的需求
    • 呈现为不同的多种多样的软件,满足办公场景、娱乐场景、学习场景等等
    • 呈现为满足各种需求的应用
    • 高级语言层
    • 程序员面向的计算机层次
    • 主要目的是
    • 编程实现易用的应用层软件提供用户使用
    • 汇编语言层
    • 偏底层软件工程师面向的计算机层次
    • 汇编语言可以翻译成可直接执行的机器语言
    • 操作系统层
    • 传统硬件与传统软件的分界线
    • 向上提供了简易的操作接口
    • 向下对接了指令系统,管理硬件资源
    • 传统机器层->微程序
    • 微程序机器层->微指令
    • 硬件逻辑层->门电路
    • 一条微程序由多条微指令所组成
    • 门电路就是实现微指令具体的工作硬件
    • 具体例子理解
    • QQ这个软件在用户的层面是一个应用
    • 应用层呈现为一个app
    • 底层有很多语言来实现,如有c/c++、Qt、MFC、HTML,这些属于高级语言层
    • 这些高级语言通过编译器编译成汇编语言,然后交给操作系统去执行
    • 操作系统它作为中介把汇编语言翻译成机器语言,然后实际地在门电路上来执行
    • 程序编译与程序解释

    • 典型问题:

    • 请简述对Java字节码的理解
    • 编译和解释有什么区别?请举例说明
    • 语言表达

    • 进行编程时要把人类语言转换为计算机语言实现
    • 人类语言->程序语言(编程:软件工程师)
    • 程序语言->机器语言(编译/解释:编译器/解释器)
    • 编译与解释

    • 为方便理解引入2概念
    • 抽象的高级计算机语言L1
    • 抽象的低级计算机语言L0
    • 编译
    • 使用L1进行程序逻辑描述
    • L1实现一个程序,通过编译器来生成对应底层语言L0的程序,然后在操作系统上运行
    • 2者实现的程序是逻辑一致
    • 解释
    • 同样的,使用L1进行程序逻辑描述
    • 不同的是,会有另外一个角色的加入
    • 它是另外一种使用L1/L0实现的程序
    • 这个程序称为解释器
    • 解释器会把L1的每一行程序代码作为输入
    • 输入进解释器
    • 输入不是完整的输入,是一条一条的输入
    • 然后输出一条又一条的偏底层的计算机语言L0
    • 编译时是完整的生成另外一种程序
    • 解释时只是作为一种输入,进行一条又一条的解释
    • 来个例子理解
    • 解释
    • 用中英文翻译来理解
    • 解释是一行一行逐字地把中文翻译成英文
    • 因为是逐字逐行地去翻译的
    • 所以在这个过程里没有全局的优化
    • 编译
    • 是整体的,有全局的优化和考虑
    • 高级语言的虚拟机

    • 以Java为例
    • 从上往下为:
    • Java程序
    • Java字节码
    • Java虚拟机
    • 操作系统
    • 为什么要有虚拟机
    • 不同平台有不同的编译器
    • 不同平台部署需要重新编译
    • 如果程序从一个平台到另外一个平台,代码通常是需要重新编译的
    • 编译结果不复用,导致无法运行
    • 通过虚拟机,能一次编译,随处运行
    • Java虚拟机向下兼容了不同的操作系统,再往下有不同架构CPU的兼容
    • 所以Java虚拟机在某种程度上给编程用户是屏蔽了底层不同平台细节的
    • Java是编译+解释型语言
    • 它的编译和解释发生在2个部分
    • 首先由Java程序编译为JVM字节码
    • 再由虚拟机把字节码解释为对应的机器码进行运行
    • 字节码(英语:Bytecode):通常指的是已经经过编译,但与特定机器代码无关,需要解释器转译后才能成为机器代码的中间代码
    • 字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列
    • 编译器原理剖析

    • 编译器的运行过程
    • 开始->词法分析->语法分析->语义分析->中间代码生成->优化分析->代码生成->结果
    • 词法分析
    • 保留关键字:int、float....
    • 保留运输符:+、-、*、/
    • 变量的转换
    • 把代码作为字符流,来进入词法分析器,输出符合流,方便后面的工作
    • 语法分析
    • 构建语法树,判断语法树是否合法
    • 将前面的符号流改造成语法树
    • 语义分析
    • 构建语义树
    • 进行类型检查与类型转换
    • 中间代码生成
    • 生成计算机容易理解的代码
    • 大多是三地址代码
    • 优化分析
    • 顾名思义
    • 代码生成
    • 得到前面优化的三地址代码
    • 对其进行映射成相应的汇编语言指令
  • 相关阅读:
    SpringBoot 整合 Quartz 定时任务框架
    Metabase学习教程:仪表盘-1
    如何批量查询搜狗收录?提升搜狗收录8个方法介绍
    《论文阅读》同情对话生成的知识桥梁 AAAI 2021
    【408计算机组成原理】—进位计数制(二)
    Peluso音乐现场-Hesitation Blues话筒:P47SS
    中电金信技术实践|分布式事务简说
    20种最常见的网络安全攻击类型
    京东数据平台:2023年9月京东净水器行业品牌销售排行榜!
    PayPal/Stripe/Square轮询系统成功避免一次钓鱼
  • 原文地址:https://blog.csdn.net/weixin_59624686/article/details/126841973