⚡作为一个前端你应该了解一下这些计算机基础

10,967 阅读20分钟

开篇

  • 为什么需要了解计算机基础知识,没有基本的计算机基础,我们会对一些概念模糊不清,例如内存,进程,线程这些的理解会有很大的困难,所以了解这些计算机基础也必然成为前端进阶的必备条件。
  • 我们在编写 JavaScript 代码的时候,可能会遇到一些 `精度丢失 的问题,那么什么是精度丢失呢,需要去真的认识这个原因你必须要掌握这些基础知识.

计算机的发展历程

  • 我们常说:断定一个人,不只是看其表面,而是要了解他全部的过去,包括生活....
  • 计算机也是这样,从1946年世界上第一台电子数字积分计算机问世以来,计算机的发展已经经历四代。

电子管时代

  • 第一代计算机,时间是1946年~1957年,主要特点是采用电子管作为基本电子元器件,体积大,耗电量大,寿命短,可靠性低,成本高;存储器采用水银延迟线。在这个时期,没有系统软件,用机器语言和汇编语言编程.计算机只能在少数尖端领域中得到运用,一般用于科学,军事和财务等方面的计算。

晶体管时代

  • 第二代计算机,时间是1958年~1964年,其主机采用晶体管等半导体器件,以磁鼓和磁盘为辅助存储器,采用算法语言(高级语言)编程,并开始出现操作系统。由于采用晶体管代替电子管,所以很轻,且运算速度比较快,达到每秒几十万次。晶体管计算机的基本逻辑元器件由电子管改为晶体管( Transistor),内存储器大量使用磁性材料制成的磁芯,外存储器采用磁盘。与此同时,计算机软件技术也有了较大发展,提出了操作系统的概念;编程语言除了汇编语言外,还开发了Ada、 FORTRAN、 COBOL等高级程序设计语言,使计算机的工作效率大大提高。

中小规模集成电路时代

  • 第三代计算机,时间是1965年~1971年,这一代计算机仍然以存储器为中心,机种多样化、系列化,外部设备不断增加、功能不断扩大,软件的功能进一步完善,除了用于数值计算机和数据处理外,已经可以处理图像、文字等资料。
  • 用中小规模集成电路作为计算机电子器件,同时主存储器开始采用半导体存诸器,外存储器有磁盘和磁带。
  • 高级语言和操作系统迅速发展,开始欧了分时操作系统。

超大规模集成电路时代

    • 第三代计算机,时间是1972年至今,其主要特点是逻辑元件采用大规模集成电路和超大规模集成电路,并产生了微处理器。
  • 半导体存储器完全取代了磁芯存储器,并不断向大容量、高速度发展,高速缓存、虚拟存储器等技术相继出现,进一步提高了存储器的性能。
  • 伴随着流水线,多处理器等并行技术的采用,计算机的运算速度已飞速提升。

计算机硬件的基本构成

  • 计算机硬件系统由运算器存储器控制器输入设备输出设备5大部件组成。
  • 随着微电子技术的进步,痛死计算机需要处理、加工的信息量也与日俱增,大量输出设备的速度的和 CPU 的速度差距悬殊,现代计算机已经发展为以存储器为中心,使输入/输出操作尽可能绕过 CPU,直接在输入/输出设备和存储器之间完成,以提高系统的整体运行效率,其结构如图:

image.png

运算器

  • 运算器由算术逻辑单元(ALU)、累加器状态寄存器通用寄存器组等组成。因此被称为算术逻辑运算单元(ALU),它的基本功能为加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、求补等操作。计算机运行时,运算器的操作和操作种类由控制器决定。运算器处理的数据来自存储器;处理后的结果数据通常送回存储器,或暂时寄存在运算器中。与Control Unit共同组成了CPU的核心部分。
  • 运算器是计算机中处理数据的功能部件。对数据处理主要包括数据的算术运算和逻辑数据的逻辑操作。因此,实现对数据的算术与逻辑运算是运算器的核心功能,其功能可以归纳为以下三点:
  1. 实现对数据的算术和逻辑运算;
  2. 暂时存放参与运算的数据和某些中间运算结果;
  3. 挑选参加运算的数据,选中要执行的运算功能,并把运算结果输出到所要求的部件中;

中央处理器(central processing unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。CPU 主要包括运算器、控制器、总线和时钟等部件。在微型计算机中使用的 CPU 也称为微处理器。

控制器

  • 控制器是计算机的控制中心,用来实现计算机本身运算过程的自动化。它只会计算机各部件按照指令功能的要求进行所需要的操作。
  • 控制器从存储器中取出指令,解释指令的操作码和地址码,并根据译码,产生一系列的控制信号,控制计算机各部件协调工作,并控制程序的执行顺序。因此,控制器的主要工作是不断取指令,分析指令和执行指令。

存储器

  • 存储器是计算机用来存放程序和数据的记忆部件,是计算机各种信息存放和交流的中心。它的基本功能是在控制器的控制下按照指定的地址存入或取出信息。
  • 现代计算机通常采用三级存储体系,如下图:

image.png

  • CPU 能按存储单元地址直接访问主存(内存),增加高速缓存(Cache)的目的是为了提高速度,解放 CPU 与主存之间速度不匹配的矛盾,增加辅存(外存)的目的是弥补主存容量的不足。
  1. 主存储器用来存放需 CPU 运行的程序和数据。用半导体 RAM 构成,常包含少部分ROM。可由 CPU 直接编程访问,采取随机存取方式,存储容量较大,常用字节数表示;
  2. Cache 位于 CPU 与主存之间,用来存放当前运行的程序和数据。由快速的半导体 RAM 构成,采取随机存取方式。存储容量较小而速度最快;
  3. 外存储器用来存放暂不运行,但需联机存放的程序和数据。用磁盘、光盘、磁带等构成,磁盘用于需频繁访问场合,光盘多用于提供系统软件,磁带多用于较大系统的备份。外存容量很大,以字节数表示。由于外存的存取时间与数据所在位置有关,所以不能用统一的存取周期指标来表示。

输入/输出设备

  • 输入/输出设备是计算机与外界联系的重要桥梁,是计算机系统中的一个不可或缺的组成部分。
  1. 输入设备: 向计算机输入数据和信息的设备。是计算机与用户或其他设备通信的桥梁。输入设备是用户和计算机系统之间进行信息交换的主要装置之一。键盘,鼠标,摄像头,扫描仪,光笔,手写输入板,游戏杆,语音输入装置等都属于输入设备。输入设备(InputDevice)是人或外部与计算机进行交互的一种装置,用于把原始数据和处理这些数的程序输入到计算机中。计算机能够接收各种各样的数据,既可以是数值型的数据,也可以是各种非数值型的数据,如图形、图像、声音等都可以通过不同类型的输入设备输入到计算机中,进行存储、处理和输出。
  2. 输出设备: 是计算机硬件系统的终端设备,用于接收计算机数据的输出显示、打印、声音、控制外围设备操作等。也是把各种计算结果数据或信息以数字、字符、图像、声音等形式表现出来。常见的输出设备有显示器、打印机、绘图仪、影像输出系统、语音输出系统、磁记录设备等。
  • 从数据输入输出的角度看,磁盘机(硬盘)和磁带机也可以看作输入/输出设备。当从磁盘或磁带读取文件时,它们是输入设备,当向磁盘或磁带保存文件时,它们是输出设备。

总线

  • 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束,按照计算机所传输的信息种类,计算机的总线可以划分为数据总线、地址总线和控制总线,分别用来传输数据、数据地址和控制信号。
  • 总线是一种内部结构,它是CPU、内存、输入、输出设备传递信息的公用通道,主机的各个部件通过总线相连接,外部设备通过相应的接口电路再与总线相连接,从而形成了计算机硬件系统。在计算机系统中,各个部件之间传送信息的公共通路叫总线,微型计算机是以总线结构来连接各个功能部件的。
  1. 地址总线: CPU是通过地址总线来指定存储单元的,因此总线地址上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址,一个CPU有N根地址线,那么可以说这个CPU的地址总线的宽度为N,这样的CPU最多可以寻找2的N次方个内存单元;
  2. 数据总线: CPU与内存或者其他器件之间的数据传输是通过数据总线来进行的。数据总线的宽度决定了CPU和外界的数据传输速度;
  3. 控制总线: CPU对外部器件的控制是通过控制总线进行的。这里控制总线是一个统称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制;

程序设计语言

  • 计算机的程序设计语言分为机器语言汇编语言高级语言三种。

机器语言

  • 机器语言是用二进制代码表示的、计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。不同种类的计算机其机器语言是不兼容的,按某种计算机的机器指令编制的程序不能在另一种计算机上执行。
  • 要用机器语言编写程序,编程人员需首先熟记所用计算机的全部指令代码和代码的涵义。程序员必须自己处理每条指令和每一数据的存储分配和输入输出,还需记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,这样编写出的程序完全是0与1的指令代码,可读性差且容易出错。
  • 以下是一些示例:
  1. 指令部分的示例:

    1. 0000 代表 加载(LOAD);
    2. 0001 代表 存储(STORE);
  2. 寄存器部分的示例

    1. 0000 代表寄存器 A
    2. 0001 代表寄存器 B

汇编语言

  • 汇编语言是任何一种用于电子计算机、微处理器、微控制器,或其他可编程器件的低级语言。在不同的设备中,汇编语言对应着不同的机器语言指令集。一种汇编语言专用于某种计算机系统结构,而不像许多高级语言,可以在不同系统平台之间移植。
  • 用汇编语言编写的程序质量高,执行速度快,占用主存空间少,因此常用于编写系统软件、实时控制程序、经常使用的标准子程序和用于直接控制计算机的外围设备或端口数据输入输出程序等。
  • 使用汇编语言编写的源代码,然后通过相应的汇编程序将它们转换成可执行的机器代码。这一过程被称为汇编过程

高级语言

  • 高级语言(如 C语言、C艹、PHP语言等)是为了使程序语言能更贴近人类的自然语言,同时又不依赖于计算机硬件而产生的。
  • 用高级语言编写的程序是由一系列的语句或函数组成的,每一句语句常常可以对应几条、十几条、甚至几十条、上百条机器指令,因此用高级语言编写计算机程序大大提高了编程效率。

高级语言程序需要经过编译或解释才能在硬件上执行,例如我们编写的JavaScript代码经过 V8 引擎编译一样,最终生成机器码或者字节码。

  • 我们用 C语言 的例子来举例一下,高级语言是怎么被运行起来的:
  1. 编写我们充满 BUG 的 C语言代码;
  2. 预处理: 用于将所有的 #include 头文件以及宏定义替换成其真正的内容
  3. 编译: 对代码进行语法分析和词法分析,将经过处理的代码转变成汇编代码;
  4. 汇编: 将上一步的汇编代码转换成机器码,产生的文件被叫做目标文件(.o 文件);
  5. 链接: 链接过程将多个目标文件以及所需的库文件(.so等)链接成最终的可执行文件(.exe或者.out);

计算机系统的层次结构

  • 计算机不能简单地认为是一种电子设备,而是一个十分复杂的软、硬件结合而成的整体。
  • 将计算机系统分为多级层次结构,其目的是分清各级层次结构彼此之间的界面,明确各自的功能,以便构成合理、高效的计算机系统,如下图: image.png
  1. 第0级是硬件操作时序,实际的硬件层,是硬件组成的试题;
  2. 第1级是为程序机器层,实际的硬件层,该级的编程工具是微指令集,程序员用微指令编写的微程序,由硬件直接执行。
  3. 第2级是传统机器语言层,实际的硬件层,该级的编程工具是计算机的机器语言指令集,程序员用机器指令编写的程序由微程序进行解释执行;
  4. 第3级是操作系统层,由操作系统程序实现。操作系统程序是由机器指令和广义指令组成的,从操作系统的基本功能来看,一方面它直接管理传统机器中的软硬件资源,另一方面它又是传统机器的延伸;
  5. 第4级是汇编语言层,汇编语言是一种符号形式语言,用户可通过它编写汇编语言源程序。与第二层所采用的机器语言编程工具相比,采用汇编语言编写程序便于理解与记忆;
  6. 第5级是高级语言层,该集的编程工具是各种高级语言如C语言等,高级语言源程序通常用编译程序来完成高级语言翻译后才能被底层的硬件执行;
  7. 第6级是应用语言层,应用语言层是直接面向某个应用领域,为方便用户编写该应用领域的应用程序而设置的,由相应的应用软件包支持和执行;
  • 利用多级层次结构观点,可以在设计计算机系统时,明确哪些功能由硬件完成,哪些功能是由软件完成。
  • 同样还可以明确在虚拟机中各层次应完成的功能,上级应得到下级的哪些支持等。

什么是数据

  • 数据是各种各样的信息,如文字、文本、计算机程序、音乐、图像、符号、运动图像、DNA密码,等等。
  • 实际上,信息可以是能够被计算机存储和处理的任何事情。

常用的进位计数制

  • 进位计数制是用一组固定的符号和统一的规则来表示数倍的方法。
  • 按照进位计数制的方法表示数,不同的数制均涉及两个基本概念:基数和权。
  1. 基数: 纪委计数制中所具有的数字符号的个数;
  2. 权: 每位数字的值等于数字乘以所在位数的相关常数,这个常数就是权;

十进制

  • 十进制是根据 逢十进一 的法则进行计数时,每十个相同的单位组成一个和它相邻的较高的单位,这种计数法叫做十进制计数法,简称十进制。
  • 十进制有10个不同的数字符号,分别是0、1、2、3、4、5、6、7、8、9,地位向高位进位的规律是 逢十进一

二进制

  • 二进制(binary)在数学和数字电路中指以2为底数的记数系统,以2为基数代表系统是二进位制的,其进位规律是 逢二进一。这一系统中,通常用两个不同的数字0和1来表示。数字电子电路中,逻辑门直接采用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(二进制位)或比特(Bit,Binary digit 的缩写)。

八进制

  • 八进制是以8为底的进位制,使用数字0、1、2、3、4、5、6、7。
  • 其进位规律是 逢八进一,其中8称为进制的基数。

十六进制

  • 十六进制在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或af)表示,其中:AF表示10~15,这些称作十六进制数字。
  • 其仅为规律是 逢十六进一,其中16为进制的基数。

进制之间的转换

  • 进制转换,可以把一种进制下的数字转化为另一种进制下的数字。比方说十进制数35,转换为16进制数,就是23,换为二进制数,就是100011

二进制转十进制

  • 将二进制数 10110.101 转换成十进制数,按权展开:

image.png

  • 八进制转十进制和十六进制转十进制都和上面的方法相同。

十进制转二进制

  • 将十进制数 43.625 转换成二进制数:

image.png

二进制转八进制

  • 二进制与八进制的相互转换,以小数点为中心,整数部分自右向左,每三位为一组,最后一组不满三位时高位补0。
  • 小数点部分自左向右,每三位为一组,最后一组不满三位时低位补0,将每组二进制数转换为八进制数即可。
  • 将二进制数 10101011.110101 转换成八进制数:
010  101  011 . 110  101

 2    5    3  .  6    5
  • 所以,10101011.110101 转换成八进制数为 253.65
  • 将八进制数转换成二进制数按照该方法逆推即可。

二进制转十六进制

  • 二进制与十六进制的相互转换,以小数点为中心,整数部分自右向左,每四位为一组,最后一组不满四位时高位补0。

  • 小数点部分自左向右,每四位为一组,最后一组不满四位时低位补0,将每组二进制数转换为十六进制数即可。

  • 各种进制数码对照表如下图:

image.png

为什么计算机内部选择二进制数表示

  • 首先计算机内部是由集成电路这种电子部件构成的,集成电路有几种不同的形状,有的像一条黑色蜈蚣,在其两侧有数个乃至数百个引脚;有的则像插花用的针盘,引脚在集成电路内部并排排列着。
  • 集成电路的所有引脚,只有直流电压 0V5V 两个状态。也就是说,集成电路的一个引脚,只能表示两个状态。
  • 正是因为集成电路的这个特性,决定了计算机的信息数据只能用二进制来处理,由于一个引脚只能表示两个状态,所以二进制的计数方式就变成了0、1、10、11、100...这种形式。
  • 计算机处理信息的最小单位———— 位,就相当于二进制中的一位。位的英文 bit 是二进制数位 binary digit 的缩写。
  • 二进制数的位数一般是8位、16位、32位...也就是八的倍数,其中八位二进数被称为一个字节。位是最小单位,字节是基本单位。内存和磁盘都使用字节单位来存储和读写数据,使用位单位则无法读写数据,因此字节是信息的基本单位。
  • 计算机内部选择二进制数表示总结起来有以下几点原因:
  1. 技术实现简单,计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用 “1”“0” 表示;
  2. 简化运算规则,两个二进制数和、积运算组合各有三种,运算规则简单,有利于简化计算机内部结构,提高运算速度;
  3. 适合逻辑运算,逻辑代数是逻辑运算的理论依据,二进制只有两个数码,正好与逻辑代数中的“真”和“假”相吻合;
  4. 易于进行转换,二进制与十进制数易于互相转换;
  5. 用二进制表示数据具有抗干扰能力强,可靠性高等优点。因为每位数据只有高低两个状态,当受到一定程度的干扰时,仍能可靠地分辨出它是高还是低;

文章推荐