- 博客(14)
- 资源 (12)
- 收藏
- 关注
原创 深入浅出计算机组成原11 | 二进制编码:“手持两把锟斤拷,口中疾呼烫烫烫”?
理解二进制的“逢二进一”一个 4 位的二进制数, 0011 就表示为 +3。而 1011 最左侧的第一位是 1,所以它就表示 -3。这个其实就是整数的原码表示法。原码表示法有一个很直观的缺点就是,0 可以用两个不同的编码来表示,1000 代表 0, 0000 也代表 0。于是,我们就有了补码表示法。我们仍然通过最左侧第一位的 0 和 1,来判断这个数的正负。但是,我们不再把这一位当成单独的符号位,在剩下几位计算出的十进制前加上正负号,而是在计算整个二进制值的时候,在左侧最高位前面加个负号。eg:1011
2020-12-21 11:19:09 323
原创 深入浅出计算机组成原理10 | 动态链接:程序内部的“共享单车”
链接可以分动、静,共享运行省内存如果我们能够让同样功能的代码,在不同的程序里面,不需要各占一份内存空间,那该有多好啊!这个思路就引入一种新的链接方法,叫作动态链接(Dynamic Link)。相应的,我们之前说的合并代码段的方法,就是静态链接(Static Link)。在动态链接的过程中,我们想要“链接”的,不是存储在硬盘上的目标文件代码,而是加载到内存中的共享库(Shared Libraries)。这个加载到内存中的共享库会被很多个程序的指令调用到。在 Windows 下,这些共享库文件就是.dll
2020-12-17 21:43:59 201
原创 深入浅出计算机组成原理09 | 程序装载:“640K内存”真的不够用么?
程序装载面临的挑战上一讲,我们看到了如何通过链接器,把多个文件合并成一个最终可执行文件。在运行这些可执行文件的时候,我们其实是通过一个装载器,解析 ELF 或者 PE 格式的可执行文件。装载器会把对应的指令和数据加载到内存里面来,让 CPU 去执行。说起来只是装载到内存里面这一句话的事儿,实际上装载器需要满足两个要求。第一,可执行程序加载后占用的内存空间应该是连续的。 第二,我们需要同时加载很多个程序,并且不能让程序自己规定在内存中加载的位置。我们可以在内存里面,找到一段连续的内存空间,然后分配给装载
2020-12-16 21:17:07 172
原创 深入浅出计算机组成原理07 | 函数调用:为什么会发生stack overflow?
Stack Overflow 的名字来自于一个常见的报错,就是栈溢出(stack overflow)。为什么我们需要程序栈?从一个非常简单的 C 程序 function_example.c 看起。在这段代码里,main 函数和上一节我们讲的的程序执行区别并不大,它主要是把 jump 指令换成了函数调用的 call 指令。call 指令后面跟着的,仍然是跳转后的程序地址。我们来看 add 函数。可以看到,add 函数编译之后,代码先执行了一条 push 指令和一条 mov 指令;在函数执行结束的时
2020-12-15 22:53:54 359
原创 深入浅出计算机组成原理06 | 指令跳转:原来if...else就是goto
CPU 是如何执行指令的?对于我们这些做软件的程序员来说,我们只要知道,写好的代码变成了指令之后,是一条一条顺序执行的就可以了。我们先不管几百亿的晶体管的背后是怎么通过电路运转起来的,逻辑上,我们可以认为,CPU 其实就是由一堆寄存器组成的。而寄存器就是 CPU 内部,由多个触发器(Flip-Flop)或者锁存器(Latches)组成的简单电路。N 个触发器或者锁存器,就可以组成一个 N 位(Bit)的寄存器,能够保存 N 位的数据。比方说,我们用的 64 位 Intel 服务器,寄存器就是 64 位
2020-12-15 17:09:11 907
原创 深入浅出计算机组成原理05 | 计算机指令:让我们试试用纸带编程
在软硬件接口中,CPU 帮我们做了什么事?CPU 的全称是 Central Processing Unit,中文是中央处理器。从硬件的角度来看,CPU 就是一个超大规模集成电路,通过电路实现了加法、乘法乃至各种各样的处理逻辑。从软件的角度来讲,CPU 就是一个执行各种计算机指令(Instruction Code)的逻辑机器。这里的计算机指令,就好比一门 CPU 能够听得懂的语言,我们也可以把它叫作机器语言(Machine Language)。一个计算机程序,不可能只有一条指令,而是由成千上万条指令组成的
2020-12-15 14:47:17 240
原创 深入浅出计算机组成原理04 | 穿越功耗墙,我们该从哪些方面提升“性能”
功耗:CPU 的“人体极限”我们的 CPU,一般都被叫作超大规模集成电路(Very-Large-Scale Integration,VLSI)。这些电路,实际上都是一个个晶体管组合而成的。CPU 在计算,其实就是让晶体管里面的“开关”不断地去“打开”和“关闭”,来组合完成各种运算和功能。想要计算得快,一方面,我们要在 CPU 里,同样的面积里面,多放一些晶体管,也就是增加密度;另一方面,我们要让晶体管“打开”和“关闭”得更快一点,也就是提升主频。而这两者,都会增加功耗,带来耗电和散热的问题。功耗 ~=
2020-12-15 11:45:37 214
原创 深入浅出计算机组成原理03 | 通过你的CPU主频,我们来谈谈“性能”究竟是什么
什么是性能?时间的倒数对于计算机的性能,我们需要有个标准来衡量。这个标准中主要有两个指标。第一个是响应时间(Response time)或者叫执行时间(Execution time)。想要提升响应时间这个性能指标,你可以理解为让计算机“跑得更快”。第二个是吞吐率(Throughput)或者带宽(Bandwidth),想要提升这个指标,你可以理解为让计算机“搬得更多”。我们一般把性能,定义成响应时间的倒数,也就是:性能 = 1/ 响应时间计算机的计时单位:CPU 时钟虽然时间是一个很自然的用来衡
2020-12-15 11:39:52 186
原创 深入浅出计算机组成原理02 | 给你一张知识地图,计算机组成原理应该这么学
计算机组成原理知识地图整个计算机组成原理,就是围绕着计算机是如何组织运作展开的。计算机组成原理的英文叫 Computer Organization。这里的 Organization 是“组织机构”的意思。计算机由很多个不同的部件放在一起,变成了一个“组织机构”。这个组织机构最终能够进行各种计算、控制、读取输入,进行输出,达成各种强大的功能。在这张图里面,我们把整个计算机组成原理的知识点拆分成了四大部分,分别是计算机的基本组成、计算机的指令和计算、处理器设计,以及存储器和 I/O 设备。计算机的基本
2020-12-15 11:06:39 238
原创 深入浅出计算机组成原理01 | 冯·诺依曼体系结构:计算机组成的金字塔
计算机的基本硬件组成首先要说的是CPU,它是计算机最重要的核心配件,全名你肯定知道,叫中央处理器(Central Processing Unit)。第二个重要的配件,就是内存(Memory)。你撰写的程序、打开的浏览器、运行的游戏,都要加载到内存里才能运行。程序读取的数据、计算得到的结果,也都要放在内存里。内存越大,能加载的东西自然也就越多。主板是一个有着各种各样,有时候多达数十乃至上百个插槽的配件。我们的 CPU 要插在主板上,内存也要插在主板上。主板的芯片组(Chipset)和总线(Bus)解决了
2020-12-15 10:58:47 445
原创 深入浅出计算机组成原理00开篇词 | 为什么你需要学习计算机组成原理
开篇词 | 为什么你需要学习计算机组成原理计算机底层知识的“第一课”理论和实践相结合我要把这些知识点和日常工作、生活以及整个计算机行业的发展史联系起来,教你真正看懂、学会、记住组成原理的核心内容,教你更多地从“为什么”这个角度,去理解这些知识点,而不是只是去记忆“是什么”。...
2020-12-15 10:45:32 230
智能天线简介–材料:.rar
2019-11-28
国科大答辩PPT.rar
2019-11-28
网盘万能助手 v2.2.1 - Chrome解压后安装.zip
2019-11-26
国科大毕业设计Latex模板
2019-11-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人