编程大法—炼体筑基—计算机组成原理

我们行走在编程的大陆上,去向往之地。路上妖魔鬼怪层出不穷,风雨雷电骇人非轻。吾辈应该炼体而后修心,手持利剑,方可见魔除魔,遇鬼斩鬼。——《上古遗录》

计算机组成原理

前几日于慕课向咚咚呛老师学习,现记录于此。

1 背景

1.1 计算机的发展历史

1.1.1 计算机发展的四个阶段

电子管计算机、晶体管计算机、集成电路计算机、超大规模集成电路计算机、未来计算机。

1.1.2 微型计算机的发展

受限于性能、摩尔定律。

1.2 计算机的分类

超级计算机、大型计算机、迷你计算机、工作站、微型计算机。

1.3 计算机的体系与结构

1.3.1 冯诺依曼体系结构

刚开始的计算机仅包含固定用途程序,也就是说计算机是专用的。如果想执行其他任务,需要重新设计计算机结构包括硬件电路。一台计算机执行多任务也是难以实现的。这就催生了一种新的计算机设计方案:将程序指令与数据一起存储的计算机设计概念结构。
冯诺依曼机的五个基本结构:存储器、运算器、控制器、输入设备、输出设备。CPU = 运算器 + 控制器
冯诺依曼瓶颈
CPU和存储器速率之间的问题无法调和。导致CPU经常空转等待数据传输。

1.3.2 现代计算机体系结构

为了解决冯诺依曼瓶颈,它将存储器也归为CPU。这里的存储器不是广义的磁带磁盘等,而是CPU的寄存器和计算机内存等更高速的设备。可以说现代计算机体系结构是以存储器为核心的

1.4 计算机的层次与编程语言

1.4.1 程序翻译与程序解释

本质是语言的转换。程序翻译是指将高级的计算机语言L1生成低级的计算机语言L0,其中L0是计算机实际执行的语言,编译器负责生成过程。程序解释是指将高级的计算机语言L1作为输入,由L0语言实现的另外一个程序接收该输入,解释成低级的计算机语言L0,其中另一个程序称之为解释器。
程序翻译:C/C++、Object-C、Golang
程序解释:Python、Php、Javascript
翻译+解释:Java、C#(Java程序翻译JVM字节码然后JVM虚拟机解释成机器码)

1.4.2 计算机的层次与编程语言

今天的软件有可能变成硬件。下面的分层便于理解。
硬件逻辑层:电子工程领域
微程序机器层:微指令集、微指令所组成的微程序直接交由硬件执行。
传统机器层:CPU指令集(机器指令),不同架构的CPU使用不同的CPU指令集。

一个条机器指令对应一个微程序,一个微程序对应一组微指令。

操作系统层:向上提供建议的操作界面、向下对接了指令系统、管理硬件资源。
汇编语言层:汇编语言可以翻译成可执行的机器语言。完成翻译的就是汇编器。
高级语言层
应用层

1.5 计算机的速度单位

1.5.1 容量单位

比特位:bit
字节:Byte,1 Byte = 8 bit
千字节:KB,1 KB = 2^10 B = 1024 B
兆字节:MB,1 MB = 2^10 KB = 1024 KB
MB(兆)、GB(吉)、TB(太)、PB(拍)、EB(艾)

硬件厂商一般以10进制进行标记容量的。500G实际上是
500 * 1000 * 1000 * 1000 / 1024 * 1024 * 1024 = 465

1.5.2 速度单位

网络中的速度单位:2M、4M、10M、100M
100M/s = 100 Mbps = 100 Mbit/s = 100/8 MB/s = 12.5 MB/s
CPU的速度一般是指CPU的时钟频率

1.6 计算机的字符与编码集

1.6.1 字符编码集的历史

ASCII码:使用7个bits、包含95个可打印字符、35个不可打印字符(控制字符)
Extended ASCII码:使用8个bit,常见的属性运算符,带音标的欧洲字符,其他常用符号
字符编码集的国际化:语言的多样性,不以有限字符组合的语言。

1.6.2 中文编码集

GB2312:7445个字符,6763个汉字和682个其他符号
GBK:汉字内码扩展规范,向下兼容GB2312,向上支持国际ISO标准,21003个汉字,支持全部中日韩汉字。
Unicode:统一码,万国码,定义了世界通用字符集,UTF-*实现了编码,UTF-8以字节为单位对Unicode进行了编码。
编程推荐使用UTF-8编码

2. 组成

2.1 计算机的总线

2.1.1 总线概述

总线是什么?比如USB是一种通用串行总线。解决不同设备之间的通信问题。总线的分类?片内总线和系统总线。片内总线是高集成度芯片内部的信息传输线,可以简化电路结构。寄存器与寄存器之间,寄存器与控制器、运算器之间。系统总线分成三类:数据总线、地址总线、控制总线。数据总线,双向传输各个部件的数据信息,数据总线的位数(总线宽度)是数据总线的重要参数(一般与CPU位数相同32、64)。地址总线,指定源数据或目的数据在内存中的地址,总线的位数与存储单元有关(n是地址总线位数,寻址范围为0~2^n)。控制总线,是用来发出控制信号的传输线,由一个组件发给另一个组件,监视设备的状态。

2.1.2 总线仲裁

为什么要总线仲裁?解决不同设备使用总线导致的冲突,也就是为了解决总线使用权的冲突问题。

总线仲裁的方法:

  • 链式查询
    仲裁控制器的仲裁控制线分别连接各个设备。仲裁控制器发出“允许使用”信号,信号传输方向为设备1、设备2、设备3等等。
  • 计时器定时查询
    仲裁控制器的仲裁控制线分别连接各个设备。仲裁控制器对设备编号并使用计数器累计计数,接收到仲裁信号后往所有设备发出计数值,计数值与设备编号一致则获取总线使用权。
  • 独立请求
    每个设备均有与总线独立连接的仲裁器,设备可单独向仲裁器发送请求和接收请求,当同时收到多个请求信号,仲裁器有权按照优先级分配使用权。优点:响应速度快,优先顺序可以动态改变。缺点:相对于前两种,设备联系多,总线控制复杂。

2.2 计算机的输入输出设备

2.2.1 常见的输入输出设备

字符输入设备
键盘:薄膜键盘、机械键盘(黑轴、红轴、青轴、茶轴)
图形输入设备
鼠标、数位板、扫描仪

2.2.2 输入输出接口的通用设计

读数据?发数据?设备占用?设备启动?设备连接?
数据线:I/O设备与主机之间进行数据交换的传送线,单向传输或者双向传输。
状态线:I/O设备向主机报告的信号线,查询设备是否已经正常连接并就绪,查询设备是否被占用。
命令线:CPU向设备发送命令的信号线,读写信号、启动停止信号。
设备选择线:主机选择I/O设备进行操作的信号线,对连接在总线上的设备进行选择。

2.2.3 CPU与IO设备的通信

CPU速度与I/O设备的速度不一样。

程序中段方法:当外围的I/O设备就绪,向CPU发出中断信号,CPU有专门的电路响应中断信号。提供低速设备通知CPU的一种异步的方式,CPU可以高速运转同时兼顾低速设备的响应。
DMA(直接存储器访问):DMA直接连接主存与IO设备,DMA工作时不需要CPU参与。当主存与IO设备交换信息时,不需要中断CPU,可以提高CPU的效率。在硬盘和外置显卡中一般有DMA。

2.3 计算机存储器概览

2.3.1 存储器的分类

半导体存储器、磁存储器。随机存储器(RAM),随机读取与位置无关。串行存储器、与位置有关,按顺序查找。只读存储器(ROM),只读不写。

2.3.2 存储器的层次结构

读写速度、存储容量、价格。位价。金字塔形状,从高到低:缓存、主存、辅存。

  • 缓存-主存层次
    原理:局部性原理
    实现:在CPU与主存之间增加一层速度快(容量下)的Cache
    目的:解决主存速度不足问题
  • 主存-辅存层次
    原理:局部性原理
    实现:主存之外增加辅助存储器
    目的:解决主存容量不足问题

2.4 计算机的主存储器与辅存储器

2.4.1 主存储器——内存

RAM通过电容存储数据,必须每隔一段时间刷新一次,如果掉电,那么一段时间后将丢失所有数据。CPU中的主存数据寄存器(MDR)通过数据总线与主存连接,主存地址寄存器(MAR)通过地址总线与主存相连。32位系统最大4G内存。

2.4.1 辅存储器——磁盘

磁盘的调度算法:
先来先服务算法、最短寻到时间优先、扫描算法、循环扫描算法。

2.5 计算机的高速缓存

2.5.1 高速缓存的工作原理

字:存放在一个存储单元中的二进制代码组合
字块:存储在连续的存储单元中而被看做是一个单元的一组字
字的地址:前m位指定字块的地址,后b位指定字在字块中的地址。
主存中有M个字块,每个字块有B个字。缓存中有C个字块,每个字块有B个字。

CPU访问的数据在缓存里面;CPU访问的数据不在缓存里面,需要从主存去拿数据。
缓存命中率:h = Nc / (Nm + Nc)
访问缓存效率:e = tc / ta = tc / ( h * tc + (1 - h) * tm)

2.5.2 高速缓存的替换策略

发生时机:CPU访问的数据不在缓存里面,需要从主存去拿数据。

随机算法:在缓存中随机选择一个位置,需要的数据替换该位置的数据。
先进先出算法(FIFO):把高速缓存看成先进先出的队列。
最不经常使用算法(LFU):优先淘汰最不经常使用的字块,需要额外的空间记录字块使用频率。
最近最少使用算法(LRU):优先淘汰一段时间内没有使用的字块;有多种实现方法,一般使用双向链表;使用双向链表时,把当前访问节点置于链表前面(保证链表头部节点是最近使用的)。

2.6 计算机的指令系统

2.6.1 机器指令形式

指令由操作码和地址码组成。地址码:数据或者地址。
根据地址码中地址的个数可以分为三地址指令、二地址指令、一个地址指令和零地址指令。

2.6.2 机器指令的操作类型

数据传输:寄存器之间、寄存器与存储单元之间、存储单元之间传送,数据读写、交换地址数据、清零置一等操作。算数逻辑类型。移位操作。控制指令:等待、停机、中断等待,空操作。

2.6.3 机器指令的寻址方式

指令寻址:顺序寻址,跳跃寻址。
数据寻址:立即寻址(直接获得操作数)、直接寻址(操作数在主存的地址)、间接寻址(操作数地址的地址)。

2.7 计算机的控制器

程序计算器、时序发生器、指令译码器、各种寄存器。其中寄存器有:指令寄存器、主存地址寄存器、主存数据寄存器、通用寄存器。通用寄存器可用来保存ALU的运算中间结果。

2.8 计算机的运算器

数据缓冲器:输入缓冲、输出缓冲。ALU:算数逻辑单元。状态字寄存器:存放运算状态(条件码、进位、溢出、结果正负等),运算控制信息。通用寄存器。

2.9 计算机指令的执行运过程

指令执行的过程:取指令(从缓存取指令、送到指令寄存器),分析指令(指令译码器译码、发出控制信号、程序计数器加一),执行指令(装载数据到寄存器、ALU处理数据、记录运算状态、送出运算结果)。
上面的过程中,控制器和运算器没有同时工作,CPU综合利用率不高。所以有了CPU的流水线设计。在同一时刻,不同产品均位于不同的加工阶段。

3. 计算

进制的概念、有符号数和无符号数、二进制的补码与反码表示法、小数的二级制补码表示法、定点数与浮点数及其运算。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值