zoukankan      html  css  js  c++  java
  • 计算机系统基础:计算机系统概述

    这是一个 CSAPP-like 的系列博客


    通用电子计算机历史

    第一台通用电子计算机是宾夕法尼亚大学于1946年研制的ENIAC,它采用十进制,是可编程、图灵完备的电子计算机。
    随后,Von Neumann 加入ENIAC的研制组,进行新的 “存储程序式通用电子计算机” EDVAC的研制,
    为此冯诺依曼以"关于EDVAC的报告草案"为题发表了全新的"存储程序式通用电子计算机方案",
    在该方案中,提出了冯诺依曼体系结构
    然而第一台完成的存储程序计算机,是1949年剑桥大学研制的EDSAC,而非1951年完成的EDVAC


    计算机系统的基本组成与基本功能

    计算机是一种能对数字化信息进行自动、高速算术和逻辑运算的处理装置

    冯·诺依曼结构

    几乎所有的现代通用计算机都采用冯·诺依曼结构
    冯·诺依曼结构的主要思想是:

    • 计算机由运算器控制器存储器I/O设备 五个基本部件组成
    • 各部件的基本功能是:
      • 存储器不仅能存放数据,而且也能存放指令,形式上两者没有区别都是01序列(而是通过存储位置区分)
      • 控制器可以自动取出指令,逐条执行
      • 运算器能进行加减乘除四则运算,并且可以进行一些逻辑运算和附加运算
      • 操作人员可以通过输入设备输出设备和主机进行通信
    • 计算机内部以二进制表示指令和数据,每条指令由操作码和地址码组成,操作码指出操作类型,
      地址码指出操作数的地址;程序由一系列指令组成
    • 采用存储程序工作方式
      计算机要完成的工作都要先被编写成程序,然后将程序和原始数据送入主存并启动执行
      一旦程序启动,计算机能在不需要人工干预的情况下,自动完成逐条取出指令并执行指令的任务

    冯·诺依曼结构的计算机也称为冯·诺依曼机器
    在这里插入图片描述
    早期部件间用分散方式连接,现在部件间大多使用总线方式连接

    计算机的工作方式:"存储程序"工作方式
    数据和指令都按序存放在存储器中,存储器上每个存储单元都按一定的存储单位编址

    • 指定起始PC位置
    • 根据PC取指令
    • 指令译码
    • 取操作数
    • 执行指令
    • 回写结果
    • 修改PC值
    • 执行下一条指令

    指令执行过程中,指令和数据被从存储器取到CPU,存放在CPU的寄存器中;指令在IR中,数据在GPR中;
    指令中需给出的信息:

    • 操作码(操作性质)
    • 源操作数1 或/和 源操作数2 (单目运算/双目运算) (操作数形式:立即数、寄存器型号、存储地址)
    • 目的操作数地址(结果:寄存器编号、存储地址)
      存储地址的描述与操作数的数据结构有关

    计算机实现的所有任务都是通过执行一条一条指令完成的

    计算机中的基本部件(微结构)

    在这里插入图片描述
    CPU:中央处理器;PC:程序计数器;MAR:存储器地址寄存器;
    ALU:算术逻辑部件;IR:指令寄存器;MDR:存储器数据寄存器;
    GPRs:通用寄存器组(由若干通用寄存器组成,早期就是累加器);
    总线:地址总线(AddressBus,AB),控制总线(ControlBus,CB),数据总线(DataBus,DB),

    其中:

    • 运算器(数据运算):ALU、GPRs、标志寄存器等
    • 存储器(数据存储):存储阵列、地址译码器、读写控制电路
    • 总线(数据传输):数据(MDR)、地址(MAR)和控制线
    • 控制器(控制):对指令译码生成控制信号

    程序开发和执行过程

    机器语言

    早期,程序都是用机器语言编写的,机器语言即是用01序列表示指令与数据
    程序记录在纸带或卡片上,穿孔表示0,未穿孔表示1
    使用按钮、开关输入;指示灯等输出

    例如下面一段机器代码程序,此处假设0010表示某种跳转指令

    0 : 0101 0110
    1 : 0010 0100
    2 : .... ....
    3 : .... ....
    4 : 0110 0111
    5 : .... ....
    6 : .... ....
    

    上述程序在执行至第1条指令时,跳转到第四条指令

    若逻辑程序逻辑稍稍改变,比如在2与3间加入一条指令
    那么指令1就要重新计算跳转的地址了,再重新制作打孔卡片
    且机器语言是与机器相关的,不同机器可能使用不同的机器语言

    总之,虽然机器语言能直接被计算机执行,但机器语言并不适合写程序

    汇编语言

    在机器语言的基础上发展出了汇编语言
    汇编语言程序由汇编指令构成,
    汇编指令是用助记符和标号来表示、与机器指令一一对应的指令
     指令:
      包含操作码和操作数或其地址码
      只能描述 存/取一个数;两个数间的运算(加减乘除与或 等);根据运算结果判断是否转义执行

    add  B
    jc  L0
    ......
    ......
    L0: sub  C
    ......
    B: ......
    C: ......
    

    如上述程序,增加某行指令,无须再重新计算指令地址

    汇编语言使用更便于阅读的符号,且增减指令无须修改其他指令中的指令地址
    但是计算机并不能直接执行汇编语言程序,汇编语言程序需要用汇编程序(汇编器)转换为机器语言
    且汇编语言与机器相关,可移植性差

    汇编语言与机器语言均面向硬件,有时合称为机器级语言

    总之,在程序的编写上,汇编语言优于机器语言,但是还是有点难办

    高级程序语言

    随着计算机科学与技术的发展,出现了许多高级编程语言

    • 与具体机器结构无关(辣鸡C语言,狗头
    • 面向算法描述,抽象能力更强
    • 一条语句可能对应几条,几十条,甚至几百条指令
    • 有编程思想之分(面向过程、面向对象等)
    • 处理逻辑基本包括:顺序结构,选择结构,循环结构
    • 有两种转换方式
      • 编译执行:将高级语言源程序转换为机器级目标程序,执行时只要启动目标程序即可
      • 解释执行:每次执行时将高级语言程序逐条翻译成机器指令并立即执行,不生成目标文件

    hello world 程序的转换处理过程

    在这里插入图片描述
    编辑好源程序hello.c,hello.c肯定是不能直接在计算机上执行的
    在GCC/Linux平台下,hello.c(源程序 文本) 经预处理得到hello.i(源程序 文本),
    再经编译得hello.s(汇编语言程序 文本),继续经过汇编得到hello.o(可重定位目标程序 bin),
    hello.o与其他可能用到的.o文件(如 printf.o )链接后,得到可执行二进制程序hello

    不同层次语言之间的等价转换入下
    在这里插入图片描述

    程序开发与运行环境

    早期的程序由于是由机器语言编写,直接输入指令和数据,
    启动时把第一条指令地址送入程序计数器PC即可

    而高级语言需要复杂的支撑环境

    语言处理系统
      编辑器:编辑源代码
      翻译程序:
        编译方式:预处理程序、编译器、汇编器、链接器
        解释方式:解释器
    操作系统
      人机接口:
        图形用户界面(GUI)
        命令行用户界面(CUI)
      语言的运行时系统
      操作系统内核
    指令集体系结构
    计算机硬件

    语言处理系统运行在操作系统之上,操作系统利用指令管理硬件


    计算机系统层次结构

    计算机系统层次是与编程语言的抽象过程对应的

    机器语言 汇编语言 高级语言
    (现代(传统)计算机系统的层次)
    应用程序 应用程序
    汇编程序 语言处理系统
    应用程序 操作系统 操作系统
    指令集体系结构 指令集体系结构 指令集体系结构
    计算机硬件 计算机硬件 计算机硬件

    指令集体系结构是对计算机硬件的抽象,而机器语言直接编写指令,故应用程序直接构筑在指令集体系结构上

    汇编语言出现之后,应用程序需要通过汇编程序翻译为指令,
    而汇编语言程序的编写需要有与计算机交互的界面等,这些由操作系统来提供

    现代高级语言出现后,高级语言编写的应用程序需要语言处理系统转换为机器指令,
    程序的编写环境、运行环境也由操作系统提供

    计算机系统的抽象层

    下图中,上层是下层的抽象与应用。下层是上层的具体实现
    在这里插入图片描述
    程序的执行结果不仅取决于算法程序编写,而且取决于语言处理系统(翻译)
    操作系统(服务例程)ISA微体系结构

    计算机系统的不同用户所在的层次:
    在这里插入图片描述
    可以看出,ISA是非常重要的层次,它是硬件的抽象,所有的软件都建立在ISA之上,ISA是软件和硬件的接口

    指令集体系结构

    指令集体系结构ISA,Instruction Set Architecture,指令系统
    ISA是通用计算机系统中必不可少的一个抽象层,它是一种规约(Specification),规定了如何使用硬件,包括:

    • 可执行的指令的集合,包括指令格式操作种类操作数类型
    • 操作数所能存放的寄存器组的结构,包括每个寄存器的名称、编号、长度和用途
    • 操作数所能存放的存储空间大小存放方式(大小端)编址方式
    • 指令获取操作数的方式,即寻址方式
    • 指令执行过程的控制方式,包括程序计数器(PC)条件码定义

    ISA和计算机组成(微结构)(IA-32、MIPS、ARM等)有很大关系,因为不同微结构的硬件组成有差别
    计算机组成必须能够实现ISA规定的功能,如提供GPR等
    同一ISA可以有不同的计算机组成,如有些指令可以由不同的硬件实现


    本系列博客的内容:
    在这里插入图片描述
    在这里插入图片描述


    2019/8/9

  • 相关阅读:
    Ajax beforeSend和complete 方法与防止重复提交
    tablesorter周边文档
    对委托的一些短浅理解
    Nginx核心要领五:worker_processes、worker_connections设置
    二进制安装k8s 教程
    安装 Docker Engine-Community
    centos7.x 安装 NodeJS、yarn、pm2
    cfssl
    k8s各个进程 占用内存大小
    Linux下查看某一进程所占用内存的方法
  • 原文地址:https://www.cnblogs.com/kafm/p/12721800.html
Copyright © 2011-2022 走看看