目录
0.0、打个招呼
又是元气满满的一天~~
昨天了解了学习本书的目的、内容和方法,以及信息的本质和C程序的编译过程。这些我们每天都在看、在用、在创造的东西。过去也许一知半解,只知其然而不知其所以然。当然现在也不能说是完全理解,只能说是”只知其一二,不知其三“。根据二八定律,最后二里路本就艰辛,但是一天一点点,大不了向天再借五百年,我不管我要做”大牛“~~
区区计算机系统,我已经摩拳擦掌迫不及待开始今天的挑战了~~
1.4、处理器读并解释存储在内存中的指令
妈耶,这个标题描述得我一愣一愣的,直到读完这一节我才明白这个标题的意思”处理器/读/并解释/存储在内存中的指令“。讲了Unix系统上使用shell运行可执行文件,Windows一般使用CMD,因人而异自行探索。
1.4.1、系统的硬件组成
在讲解hello world程序运行过程前,需要先了解所有于这个程序运行有关的硬件。大致来说分别有总线、I/O设备、主存、处理器。
*总线:在I/O设备、主存储器、CPU等多个设备间传递数据信息字节的一组电子管道。总线单次传输的字节块称为字。这里会出现最头疼的字节、字、字节数、字长的概念,诸君莫慌,听我慢慢道来。
先说”字节“:所有计算机系统单次处理的最小单位称为”字节“,有人可能要说了,最小单位不是“位”吗?说的没错,最小单位确实是“位”。但是计算机系统不会处理单独的一位,所以“位”是计算机硬件单次处理的最小单位,而不是计算机系统单次处理的最小单位。那么一个字节有多少位呢,使用联想记忆法——一个字节是8位,能表示0~255,ASIIC码是以一个字节为单位,中文文本至少需要两个字节。这样都还记不住,那也没关系,爱因斯坦曾经说过“我从来不去记哪些能够查找到的无聊的数字”。
再来说“字”:该计算机系统单次处理的最大单位称为“字”,字大小不是唯一的,而是根据当前整个系统变化的,最常见的就是Windows 32位/64位 系统。这里的32位/64位,指的就是字的大小。总线、CPU和主存储器等也有其字的大小,一个计算机系统能达到的最大的字的大小,是其系统中字的大小最小的部分决定的。这也说明了为什么重装系统时,原本64位的系统一定可以装32位的系统,而原本32位的系统不一定能装64位的系统。最后再唠叨一下,“字”的大小不固定,“字”的大小不固定,“字”的大小不固定。
最后说说“字长”和“字节数”:理解了“字节”和“字”以后就很好理解了。“字长”和“字节数”都是形容字的大小的,只不过“字长”的单位是位(bit),而“字节数”的单位是字节(Byte)。还有一个重要区别是“字长”是特指“字”的大小,而“字节数”不止可以表示“字”的大小,还可以表示内存、网速、数据类型大小等诸多方面。
说回总线,如下图红色见图为总线,它连接了整个硬件系统的各个部分。本节未对总线知识进行更多的讲解,看来与总线的偶遇,只能随缘了。
*I/O设备:系统与外部世界连接的通道,包括上图的鼠标、键盘、显示器、磁盘。I/O设备需要经过控制器或适配器才能与I/O总线相连接。控制器和适配器的作用大概是参与总线协议,而适配器应该还需要适配多设备协议,如一个显卡可以适配多种不同型号的显示器,和调整不同分辨率等。说到控制器和适配器的区别,分不清!分不清!根本分不清!借用书上的一句话“无论如何,他们的的功能都是在I/O总线和I/O设备之间传递信息”。
*主存:就是我们常说的运行内存,这个因该不用多说,是不是计算机专业的小伙伴,对他当是很熟悉。就连我爸这个这个老古董都能在看到我画的图时说出“就是内存”这样的话。
*处理器:这个也很常见,就是装机三大件的老大哥——CPU。CPU的工作原理说简单也简单,说复杂也复杂,简单来说,就是PC寄存器一条一条的读取主存中的指令,结合ALU(逻辑单元)在主存和寄存器文件间,执行诸如:加载、存储、操作、跳转等操作。
加载:从主存复制一个字节或字到寄存器,并覆盖该寄存器原来的内容。
存储:与加载正好相反,从寄存器复制一个字节或字到主存的某个位置,并覆盖该位置上原来的内容。
操作:或者叫“运算”,将两个寄存器中的内容复制到ALU中,进行诸如:加、减、乘、除、与、或、非等运算,将结果放到一个寄存器中,并覆盖该寄存器原来的内容。
跳转:修改PC中的值,从主存的其指定位置开始执行指令。通常用于循环、条件判断等场景。
看似简单,其实这只是CPU的冰山一角,关于CPU还有很多重要知识,如:指令集架构、微体系结构。书上说这些内容在后续章节中会详细讲解,我现在就不深挖了。简单来说,指令集架构就是指令集的理论,而微体系结构就是对指令集架构的具体现实实现。不同型号CPU的微体系结构的不同,是相同指令集而不同型号的CPU会有性能差异重要原因之一。
1.4.2、运行hello程序
整个运行过程枯燥而乏味,我就不在复述了。这里讲一些个人见解,这个就直接看图说话了,
上图使用红黄蓝三种线表示了执行流程先后顺序,红色第一组操作,黄色第二组操作,蓝色第三组操作。画在一起可以看出很多问题,比如:
*主存储器交互频繁,所以单独为他设计了一条内存总线。
*数据不会在CPU中停留,看蓝线和红线,都是再CPU中转了一圈就出来了。
*不是所有得操作都是由CPU控制,如黄线就是DMA技术控制的数据直接从磁盘复制到主存。
虽然我还意犹未尽,怎奈天色已晚,诸君只好明日再见~~