zoukankan      html  css  js  c++  java
  • 计算机组成原理学习(一)计算机结构模型,层次和编程语言

    开个新系列记录计组学习的知识点。

    主要参考教材:网课南京大学袁春风老师的MOOC,书籍《深入理解计算机系统

    袁春风老师的MOOC在b站有完整版:https://www.bilibili.com/video/av69563153?from=search&seid=18216428773595388164


    1.计算机系统的抽象层次

    首先给出一张计算机系统的抽象层次。最终用户处在最上端,是使用者,也是问题的直接提出者。ISA指令集体系结构是软件和硬件的交界层。

    计算机越向上层走越抽象,越向下层走越具体。记住一句话:上层是对下层的抽象,使用下层,底层是对上层的实现,为上层提供支撑环境

    2.冯诺依曼体系结构

    最早的计算机是上世纪40年代,美国出于军事目的(计算导弹的轨道)设计出来的。其中,冯诺依曼设计的计算机体系成为经典的计算机体系一直沿用至今。

    冯诺依曼结构的关键是存储程序

    设计的理念是,程序应该事先被存储起来,想要做某项计算工作时,只要输入数据,就会自动调用程序,程序自动一步步完成计算,最后输出结果

    所谓程序就是指令的集合

    按照上面的理念,存储程序就需要存储器,输入输出程序就需要输入输出的设备(I/O设备),完成自动化的过程需要控制器,完成计算的过程需要运算器。即如下:

    上图是高度的抽象,稍微具体一点设计如下图:

    运算器会以算数逻辑电路为基础构成,存储器可以分为主存储器(主存)和许多寄存器程序计数器(Program Counter)顺序调用程序。为了区分各项数据和程序,它们都会标有自己的地址存放在数据寄存器中,控制电路会输出控制信号来完成自动化的操作。

    3.现代计算机体系结构

    现代计算机的结构模型基于冯诺依曼体系,变化不大:

    控制器、程序计数器PC、数据和地址寄存器(MAR和MDR)、通用寄存器组(GPRs)、算数逻辑单元(ALU)、标志寄存器构成了CPU(中央处理单元)

    上世纪早期的计算机设计中,各组件是分散设计的,而现代计算机使用了总线技术设计,地址、数据和控制信号通过三条总线传输,分别为地址总线控制总线数据总线

    输入输出设备很好理解,键盘和鼠标就是典型输入设备,显示屏就是输出设备。

    CSAPP给出的图:

    程序存放在磁盘上。对外的设备都会有其配套的控制器或适配器,控制器是IO设备本身或者计算机的主印刷电路板(主板)上的芯片组,适配器就是主板上的插槽上的卡,作用都是传输数据到IO总线。

    上面说的主存实际就是通常说的“内存”,会以内存条的形式插在电脑主机里面。主存是临时存储设备,用动态随机存储器(DRAM)芯片组成。主存中会存放需要执行的机器指令。

    CPU就是通常说的“处理器”,是解释和执行指令的引擎,核心是程序计数器PC。从上电到下电为止,PC都会不断更新,指向某条指令的地址。

    4.存储器层次结构

    CPU直接从磁盘中读数据,比从主存中读慢好几个数量级,而直接从主存中读数据,又比从寄存器中读慢上几乎两个数量级。

    所以现代存储的理念是,一步步从下往上读数据,正在运行的程序会通过主存(即内存)存数据,并发展出了高速缓存存储器(Cache)技术。

    访问Cache的速度比访问内存快很多,Cache会存放可能经常访问的数据。

    一个典型的存储器层次结构:

    上层会保存来自下层的数据,越往上访问速度越快。

    5.指令的执行过程

    如PPT,袁老师拿做菜比喻。

    指令简单说,包括操作数操作码(及地址),操作数是要处理的数据,操作码描述了怎么处理。指令会以0和1的二进制字段来表示。

    6.一个程序的生成过程

    以Linux环境下用gcc编译器为例,假如写了个程序叫hello.c,打印“Hello”。

    首先,想要执行编译的过程,本身就会调用系统的一个程序,叫编译驱动程序,也叫Unix Shell。也就是平时看到的那个命令行窗口。

    输入

    gcc -o hello hello.c

    就会编译当前所在目录下的名为hello.c的程序,然后最后生成名为“hello.o”的可执行文件。

    编译过程如下:

    hello.c就是个用ASCII字符表示的文本文件预处理器会根据 后面跟的代码执行一些操作(比如包含头文件等),然后生成修改后的文本文件,再经过编译器生成机器级语言(汇编)表示的文本文件,该文本文件再通过会汇编器翻译成机器可以理解的二进制文件。因为hello调用了printf函数来自另一个程序,所以另一个程序也会经过相同的编译过程,最后链接到一起,生成可执行文件。

    7.程序开发需要的支撑环境

    现在的IDE也就是所谓的语言处理程序,把中间的编辑器和一套翻译转换程序都集成好了,比如Virtual Studio,CodeBlock,Pycharm这样的。

    操作系统简单来说就是个大软件,是对下层硬件的抽象,为操作硬件提供许多的基本指令。

  • 相关阅读:
    Selenium 疑问之一:WebDriver 获得弹出窗口(转)
    Selenium 疑问之三:Selenium2.0 对于Wrapped元素的click()不起作用怎么办?
    [转]网站性能工具Yslow的使用方法
    Hudson + Ant + SVN + Tomcat配置详解
    Selenium 疑问之二:如何使页面滚动条移动到指定元素element的位置处?
    【转】组合测试法中的全对偶测试法
    Ant 之property 总结
    [转载]使用Selenium2测试含有iframe的Ajax网页
    Nginx反向代理WebSocket链接失败问题
    WebSocket语法糖
  • 原文地址:https://www.cnblogs.com/banmei-brandy/p/12264898.html
Copyright © 2011-2022 走看看