计算机组成原理
骚火棍
这个作者很懒,什么都没留下…
展开
-
计算机组成原理-原理篇:指令与运算-14乘法器:如何像搭乐高一样搭电路(下)?
1. 顺序乘法的实现过程十进制中的 13 乘以 9,计算的结果应该是 117。我们通过转换成二进制,然后列竖式的办法,来看看整个计算的过程是怎样的。从列出竖式的过程中,你会发现,二进制的乘法有个很大的优点,就是这个过程你不需要背九九乘法口诀表了。因为单个位置上,乘数只能是 0 或者 1,所以实际的乘法,就退化成了位移和加法。在 13×9 这个例子里面,被乘数 13 表示成二进制是 1101,乘数 9 在二进制里面是 1001。最右边的个位是 1,所以个位乘以被乘数,就是把被乘数 1101 复制下来。原创 2020-12-04 16:19:09 · 1019 阅读 · 1 评论 -
计算机组成原理-原理篇:指令与运算-13加法器:如何像搭乐高一样搭电路(上)?
1. 异或门和半加器面这些门电路的标识,你需要非常熟悉,后续的电路都是由这些门电路组合起来的。这些基本的门电路,是我们计算机硬件端的最基本的“积木”,就好像乐高积木里面最简单的小方块。看似不起眼,但是把它们组合起来,最终可以搭出一个星球大战里面千年隼这样的大玩意儿。我们今天包含十亿级别晶体管的现代 CPU,都是由这样一个一个的门电路组合而成的。我们看到的基础门电路,输入都是两个单独的 bit,输出是一个单独的 bit。如果我们要对 2 个 8 位(bit)的数,计算与、或、非这样的简单逻辑运算,其实原创 2020-12-03 13:20:57 · 1254 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-12理解电路:从电报机到门电路,我们如何做到“千里传信”?
1. 从信使到电报,我们怎么做到“千里传书”?从信息编码的角度来说,金、鼓、灯塔、烽火台类似电报的二进制编码。电报传输的信号有两种,一种是短促的点信号(dot 信号),一种是长一点的划信号(dash 信号)。我们把“点”当成“1”,把“划”当成“0”。这样一来,我们的电报信号就是另一种特殊的二进制编码了。电影里最常见的电报信号是“SOS”,这个信号表示出来就是 “点点点划划划点点点”。比起灯塔和烽火台这样的设备,电报信号有两个明显的优势。第一,信号的传输距离迅速增加。因为电报本质上是通过电信号来进行传播原创 2020-12-03 10:13:24 · 587 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-11二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
1. 理解二进制的“逢二进一”任何一个十进制的整数,都能通过二进制表示出来。把一个二进制数,对应到十进制,非常简单,就是把从右到左的第 N 位,乘上一个 2 的 N 次方,然后加起来,就变成了一个十进制数。当然,既然二进制是一个面向程序员的“语言”,这个从右到左的位置,自然是从 0 开始的。比如 0011 这个二进制数,对应的十进制表示,就是0×23+0×22+1×21+1×20 = 3 ,代表十进制的3。对应地,如果我们想要把一个十进制的数,转化成二进制,使用短除法就可以了。也就是,把十进制数除以原创 2020-12-02 13:37:22 · 896 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-10动态链接:程序内部的“共享单车”
1. 链接各异分动、静,共享运行省内存我们上一节解决程序装载到内存的时候,讲了很多方法。说起来,最根本的问题其实就是内存空间不够用。如果我们能够让同样功能的代码,在不同的程序里面,不需要各占一份内存空间,那该有多好啊!就好比,现在马路上的共享单车,我们并不需要给每个人都造一辆自行车,只要马路上有这些单车,谁需要的时候,直接通过手机扫码,都可以解锁骑行。这个思路就引入一种新的链接方法,叫作动态链接(Dynamic Link)。相应的,我们之前说的合并代码段的方法,就是静态链接(Static Link)。原创 2020-12-01 10:33:53 · 220 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-09程序装载:“640K内存”真的不够用么?
1. 程序装载面临的挑战说起来只是装载到内存里面这一句话的事儿,实际上装载器需要满足两个要求。第一,可执行程序加载后占用的内存空间应该是连续的。我们在第6讲讲过,执行指令的时候,程序计数器是顺序地一条一条指令执行下去。这也就意味着,这一条条指令需要连续地存储在一起。第二,我们需要同时加载很多个程序,并且不能让程序自己规定在内存中加载的位置。虽然编译出来的指令里已经有了对应的各种各样的内存地址,但是实际加载的时候,我们其实没有办法确保,这个程序一定加载在哪一段内存地址上。因为我们现在的计算机通常会同时运原创 2020-11-27 15:35:08 · 270 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-08ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
1. 编译、链接和装载:拆解程序执行下面,我们一起具体来看,C 语言程序是如何变成一个可执行程序的。我们先把前面的 add 函数示例,拆分成两个文件 add_lib.c 和 link_example.c。// add_lib.cint add(int a, int b){ return a+b;}// link_example.c#include <stdio.h>int main(){ int a = 10; int b = 5; int c原创 2020-11-25 18:01:25 · 180 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-07stack overflow
1. 为什么我们需要程序栈?我们从一个非常简单的 C 程序 function_example.c 看起。// function_example.c#include <stdio.h>int static add(int a, int b){ return a+b;}int main(){ int x = 5; int y = 10; int u = add(x, y);}$ gcc -g -c function_example.c$原创 2020-11-25 16:49:01 · 315 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-06指令跳转
1. CPU如何执行指令?拿我们用的 Intel CPU 来说,里面差不多有几百亿个晶体管。实际上,一条条计算机指令执行起来非常复杂。好在 CPU 在软件层面已经为我们做好了封装。对于我们这些做软件的程序员来说,我们只要知道,写好的代码变成了指令之后,是一条一条顺序执行的就可以了。逻辑上,我们可以认为,CPU 其实就是由一堆寄存器组成的。而寄存器就是 CPU 内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。触发器和锁存器,其实就是两种不同原理的数字电路组成的逻辑门。原创 2020-11-23 11:41:15 · 858 阅读 · 0 评论 -
计算机组成原理-原理篇:指令与运算-05计算机指令
1. 在软硬件接口中,CPU帮我们做了什么事?CPU 就是计算机的大脑。CPU 的全称是 Central Processing Unit,中文是中央处理器。从硬件的角度来看,CPU 就是一个超大规模集成电路,通过电路实现了加法、乘法乃至各种各样的处理逻辑。从软件工程师的角度来讲,CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器。这里的计算机指令,就好比一门 CPU 能够听得懂的语言,我们也可以把它叫作机器语言(Machine Language)。不同的 CPU 能够听原创 2020-11-21 18:32:20 · 1202 阅读 · 0 评论 -
计算机组成原理-入门篇-04功耗与性能
1. 功耗我们的 CPU,一般都被叫作超大规模集成电路(Very-Large-Scale Integration,VLSI)。这些电路,实际上都是一个个晶体管组合而成的。CPU 在计算,其实就是让晶体管里面的“开关”不断地去“打开”和“关闭”,来组合完成各种运算和功能。想要计算得快,一方面,我们要在 CPU 里,同样的面积里面,多放一些晶体管,也就是增加密度;另一方面,我们要让晶体管“打开”和“关闭”得更快一点,也就是提升主频。而这两者,都会增加功耗,带来耗电和散热的问题。在 CPU 里面,能够放下的原创 2020-11-21 11:30:18 · 2807 阅读 · 0 评论 -
计算机组成原理-入门篇-03通过CPU主频看性能
什么是性能?计算机的性能,其实和我们干体力劳动很像,好比是我们要搬东西。对于计算机的性能,我们需要有个标准来衡量。这个标准中主要有两个指标。第一个是响应时间(Response time)或者叫执行时间(Execution time)。想要提升响应时间这个性能指标,你可以理解为让计算机“跑得更快”。第二个是吞吐率(Throughput)或者带宽(Bandwidth),想要提升这个指标,你可以理解为让计算机“搬得更多”。计算机的计时单位:CPU时钟虽然时间是一个很自然的用来衡量性能的指标,但是用时原创 2020-11-21 00:13:46 · 395 阅读 · 0 评论 -
计算机组成原理-入门篇-02计算机组成原理知识地图
计算机组成原理知识地图参考链接:https://time.geekbang.org/column/article/92378原创 2020-11-20 23:30:17 · 246 阅读 · 2 评论 -
计算机组成原理-入门篇-01冯·诺依曼体系结构
1. 冯·诺依曼体系结构计算机祖师爷之一冯·诺依曼(John von Neumann)提出的冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机。什么是存储程序计算机呢?这里面其实暗含了两个概念,一个是“可编程”计算机,一个是“存储”计算机。可编程什么是“不可编程”?计算机是由各种门电路组合而成的,然后通过组装出一个固定的电路板,来完成一个特定的计算程序。一旦需要修改功能,就要重新组装电路。这样的话,计算机就是“不可编程”的,因为程序在计算机硬件层面是“写死”原创 2020-11-20 23:22:54 · 1033 阅读 · 0 评论