1. 从手机和电脑开始
要是20年前,大家对于计算机还很陌生,但是现在手机和电脑已经非常普及了,即使对于偏远地区可能有人没有接触过电脑,但是手机肯定都用过。其实手机和电脑都是计算机!
1.1 手机的8G+256G是什么意思?
我们口头上说的8G和256G都是内存,但其实两者有本质的区别。
8GB表示的是手机的运行内存,256G表示的是手机的存储空间(在电脑上叫做硬盘或磁盘)。
这里G的单位是Byte(字节)。
我们这里统一将8G叫做内存,256G叫做硬盘。
1.2 硬盘是干啥用的?
我们从应用市场下载的应用程序比如微信、QQ、王者荣耀这些,都是安装在硬盘中的,包括手机上的照片、文件、电影都是存放在硬盘中。
硬盘就是存放数据的,而且是永久存放的。
1.3 内存是干啥用的?
当我们点击手机桌面上的王者荣耀图标启动应用时,内存就派上用场了!启动应用时会将存储在硬盘的程序复制(加载)到内存中,程序只有在内存中才能被运行。
程序只有被加载到内存中才能被运行,当程序退出后会释放它在内存中空间。所以当同时打开多个应用,内存可能就不够用,应用就会卡顿。
1.4 8G+256G和12G+512G区别在哪?
-
存储容量:前者的存储容量是256GB,而后者则是512GB。因此,后者的存储空间更大,可以存储更多的个人文件、照片、视频等文件。
-
运行内存:12GB的内存比8GB的内存更大,可以同时打开更多的软件,更快地切换应用程序,以及更流畅的使用软件。
所以为了可以同时运行更多程序要购买更大内存的手机。 为了存更多数据、安装更多应用要购买更大存储(硬盘)的手机。
1.5 为什么要快的CPU?
处理器(CPU,中央处理器).
上面我们说程序是从硬盘加载到内存中才能运行,那么程序是怎么运行的?
程序在内存中是通过CPU来运行的,程序在内存中是一条一条的指令,CPU通过解释执行内存中的一条条指令来运行程序。
CPU越好执行指令的速度越快。
手机处理器有华为麒麟处理器、苹果A系列处理器、高通骁龙、联发科天玑等。
电脑处理器有Intel类i3\i5\i7\i9,AMD类的R3\R5\R7\R9等。
1.6 你的手机为什么会卡?
- 内存不够:所以当玩王者荣耀的时候要把其它应用都关了,可以获得更好的游戏体验!
- CPU运算速度慢,一些应用比如游戏需要的计算量很大,就需要运行速度快的CPU。
2. 计算机的组成
-
处理器(CPU):处理器(CPU)是计算机的大脑,负责执行和运算计算机程序的指令。它可以像大脑一样思考、处理信息。比如,当你在电脑上打开一个游戏,CPU就会负责计算出游戏中的动作和图像。
-
内存:内存是计算机的临时存储器,可以存储你正在使用的文件和程序。就像人的记忆,当你在学习数学时,脑子会临时存储数学公式和计算结果,帮助你更好地解题。
-
输入设备:输入设备是把信息输入到计算机中的工具,比如键盘、鼠标和触摸屏。比如,当你在键盘上敲字时,输入设备会把你的字母和数字输入到电脑中。
-
输出设备:输出设备是把计算机处理后的信息展示给我们的工具,比如显示屏、耳机和打印机。比如,当你玩游戏时,输出设备会把游戏的图像和声音展示给你。
-
存储设备:存储设备是用来永久保存文件和数据的地方,比如硬盘、U盘和光盘。就像小朋友的玩具箱一样,你可以把你最喜欢的玩具放在里面,保存在存储设备中,下次想玩时还能找到它们。
3. 处理器(CPU)
3.1 寄存器
寄存器用于临时存储指令和数据。它们是CPU运行时最快的存储器,因此通常用于存储需要频繁访问的数据(它比内存要快的多)
CPU中有多个寄存器(几十个到上百个左右),其中有两个最重要的寄存器,即累加器(Accumulator)和程序计数器(Program Counter)。
累加器是CPU内部最重要的寄存器之一,通常用于存储算术运算结果。比如,如果我们要计算1 + 2,CPU通过将1存储到累加器中,然后将2添加到累加器中来计算结果。
程序计数器是另一个重要的寄存器,用于存储当前执行指令的位置。当CPU执行完一条指令时,程序计数器会自动加上指令的长度,指向下一条指令的位置。这样,CPU就可以依次执行多条指令。
3.2 控制器
控制器负责控制计算机的运行。它可以解析指令,对CPU中的其他部分发出命令,从而执行程序中的指令。
控制器的工作原理类似于指挥家。它发送指令集,并监视计算机的状态和进程。例如,如果控制器要求从内存中读取数据,它会向内存控制器发送指令,并控制数据的流动。
另一个控制器的主要任务是控制数据的流动。比如,控制器可以决定哪些数据要从内存中读取到寄存器中、哪些数据要从寄存器中传输到计算器中执行运算等。
3.3 运算器
运算器负责进行数值运算。CPU通过运算器计算各种算法和逻辑运算,从而实现计算机的数据处理功能。
运算器通常由算术逻辑单元(ALU)、加法器和乘法器组成。其中,算术逻辑单元执行算术运算和逻辑操作;加法器用于加法运算;乘法器用于乘法运算等。
例如,如果我们要计算1 + 2的值,计算机首先将1和2从内存中加载到寄存器中,然后将它们传递到运算器中。运算器通过加法器将这两个值相加,最后将结果存储回寄存器中。
3.4 时钟
时钟是CPU内部的主要时序源。它提供一个基准信号,告诉CPU什么时候执行下一条指令。在每个时钟周期中,CPU执行一个指令,并更新运行状态。
时钟按照固定的速率运行,比如,一个2GHz时钟可以在每秒钟运行2亿次。通过时钟,CPU可以保证每个时钟周期是相同长度的,并确保数据在正确的时间内被处理。
因此,对于CPU来说,时钟速率是一个非常重要的参数。时钟速率越高,CPU每秒钟可以执行的指令就越多,计算机的运行速度也就越快。
寄存器、控制器、运算器和时钟是CPU内部的四个基本部分。它们密切合作,实现了计算机的指令执行和数据处理。比如,寄存器可以暂时存储数据;控制器可以控制进程的流动;运算器可以计算各种算法和逻辑运算;时钟可以提供一个基准信号,保证CPU正确执行指令。
4. 内存
程序员编程就是与内存打交道!
4.1 什么是程序?
了解内存之前先说明什么是程序?程序是由指令和数据组成的!
程序运行时,会将硬盘里面的程序复制到内存中。
4.2 内存的结构
1)内存的物理结构
内存的实际样子
内存的示例图
内存中有很多引脚,将VCC和GND连接到电源后,就可以通过电流给其它引脚传递0和1信号。+5V直流电压表示1,0V表示0。
上述内存中的引脚包括
- VCC和GND:给芯片供电的
- 地址信号引脚10个 A0~A9
- 数据信号8个 D0~D7
- 控制信号 RD读,WR写
A是单词Address的首字母,D是单词Data的首字母,WR是单词Write的缩写,RD是单词Read的缩写。
那么这个内存能存储多少数据呢?
数据信号引脚有D0~D7共八个,表示一次可以输入输出8位(= 1字节)的数据。
地址信号引脚有A0~A9共十个,表示可以指定0000000000~1111111111共1024个地址。而地址用来表示数据的存储场所,因此我们可以得出这个内存IC中可以存储1024个1字节的数据。因为1024 = 1K,所以该内存IC的容量就是1KB。
2)用楼房来理解内存的内部结构
从程序员的角度来看,可以把内存假想成每层都存储着数据的楼房。
内存为1KB时,如下图所示的有1024层的楼房(这里地址的值是从上往下逐渐变大)。每一层存放一个字节,也就是8个二进制位。
3)4GB的内存需要多少位地址引脚?
4GB = 22 * 210 * 210 * 210B = 232B
4GB = 4,294,967,296 B(4GB的楼有四十多亿层)
所以,4GB的内存需要至少32位地址引脚来进行寻址。
4)往内存写入数据
往10000000001地址 写入 01100001数据
- 给VCC接入+5V,给GND接入0V,也就是给内存通电
- 地址引脚A0~A9 输入信号10000000001
- 数据引脚D0~D7 输入信号01100001
- WR引脚输入信号1,RD引脚输入信号0
5)读取内存中的数据
读取10000000001地址的数据
- 给VCC接入+5V,给GND接入0V,也就是给内存通电
- 地址引脚A0~A9 输入信号10000000001
- WR引脚输入信号0,RD引脚输入信号1
- D0~D7引脚输出信号01100001,也就是D1、D2、D7有+5V电流流出。
6)C语言的变量
// 定义变量
char a; // 1个字节
short b; // 2个字节
int c; // 4个字节
// 给变量赋值
a = 'a';
b = 100;
c = 200;
定义变量的时候会在内存中分配内存空间,如char分配一个字节的空间,short分配连续两个字节的空间,int分配连续四个字节的空间。如下:
7) C语言的指针
刚刚入门编程学习C语言的时候,很多学生无法理解C语言的指针。
通过上述内容你是不是觉得指针很简单。
char *d;
short *e;
int *f;
d = &a; // 将变量a的地址赋给指针变量d
e = &b; // 将变量b的地址赋给指针变量e
f = &c; // 将变量c的地址赋给指针变量f
现在计算机上使用的程序通常都是64位。这种情况下,指针变量的长度也是64位。
定义指针时,我们通常会在变量名前加一个星号(*)。我们知道,d、e、f 都是用来存储64位(8字节)的地址的变量。然而,为什么这里又用来指定char(1字节)、short(2字节)、int(4字节)这些数据类型呢?大家是不是也感到很奇怪?实际上,这些数据类型表示的是从指针存储的地址中一次能够读写的数据字节数。
- 指针d保存的值就是地址 x+1
- 指针e保存的值就是地址 x+2
- 指针f保存的值就是地址 x+4
可以看出指针保存的是数据的首地址,指针类型决定指针一次读写的字节长度。如int *f,指针f一次性读写4个字节。
5. 硬盘
5.1 为什么硬盘叫磁盘
硬盘也叫磁盘,它内部是排列整齐的一个个小磁体。
磁盘上面有“电刷”,磁盘可以转动,“电刷”也可以上下移动,过程中“电刷”会刷过每个小磁体,可以知道磁体是否有磁性,并且电刷会放电来控制小磁体是否有磁性。
“电刷”刷过磁盘中一小段,得到上面排列整齐的小磁体的磁性顺序组合,我们假设有磁性用1表示,无磁性用0表示,假如得到 01100001
(8个小磁体),就得到一个字节的数据。
5.2 硬盘的结构
磁盘的物理结构可以分为四个层次:盘片、磁道、扇区、块(或称为“分区”)。
1)盘片
磁盘通常有一个以上的盘片,每个盘片都是一个金属或玻璃制成的圆形碟片,用于存储数据。通常一个盘片有两个磁面,即内圈和外圈。每个磁面上都刻有一些类似于唱片槽的磁道。
2)磁道
磁道是盘片上的一个环形区域,用于存储数据。一个磁盘通常会有几千个磁道,每个磁道都有一个磁道编号,用于唯一标识该磁道。
3)扇区
扇区是磁道上的一个小区域,是磁盘的最小读写单位。一个扇区通常包含512个字节的数据,还包含一些元数据,如校验和、扇区编号等信息。扇区的数量和大小通常是标准化的,例如现在的硬盘通常采用4096字节的扇区大小。
4)块(分区)
块是文件系统使用的一种逻辑单位,也称为分区。它是由连续的扇区组成的,用于存储文件和目录等数据。块的大小根据文件系统不同而不同,常见的有1KB、2KB、4KB等。在磁盘上,每个块都有一个标识符,称为块号。
总体来说,磁盘的结构就是由多个盘片、每个盘片上的多个磁道、每个磁道上的多个扇区、以及一个个由连续扇区组成的块组成的。
6. 最后
本章对计算机的组成进行了深入的分析,涵盖了主要的硬件组成,包括中央处理器、内存、输入输出设备、硬盘以及其他外部设备。虽然以上硬件组成同等重要,但由于程序员平时编程所需直接操作的、最多打交道的却是计算机的内存,因此在讲解这些硬件组成时,对内存进行了最为详细、深入的剖析。
关注微信公众号:“小虎哥的技术博客”,让我们一起成为更优秀的程序员❤️!
文章和代码仓库:
gitee(推荐):https://gitee.com/cunzaizhe/xiaohuge-blog
github:https://github.com/tigerleeli/xiaohuge-blog