01-计算机基础扫盲
01-计算机基础扫盲
第一阶段为计算机扫盲阶段内容如下。
计算机简介
首先什么是计算机?
计算机其实就是一种能够执行复杂计算和任务的电子设备,通过编写好的程序来处理信息。
计算机的基本结构如下:
中央处理器(CPU):这是计算机的大脑,负责执行指令和运算
如图:
内存(RAM):用于临时存储正在运行或即将运行的数据和程序,如常见的内存条,金手指
如图:
存储磁盘(Disk):长期存放数据的设备,如固态硬盘、机械硬盘、TF存储卡
如图:
输入设备(Input):键盘鼠标等,用于向计算机输入指令和数据
如图:
输出设备(Output):如显示器、打印机,通过某种形式来显示计算机处理的结果
如图:
上面是古老的结构,也就是冯诺依曼体系。而现在中央处理器有了新的称呼:“SOC”和“芯片”,这两种都是属于中央处理器的范畴,SOC更先进。
芯片(Chip)一般分为两种,分别是集成电路芯片和半导体芯片。
集成电路,简称IC,是电子组件的基本单元,它是由微小的半导体元件集成在导电的硅片上组成的。
半导体芯片,目前市场上大多数芯片都是采用半导体材料制作的,尤其是在处理器领域。例如,AMD Ryzen 5700X 3D处理器就属于超威半导体公司生产的芯片。这种芯片通常由单一的半导体元件,如晶体管,集合而成。
SOC(系统级芯片)。
系统级芯片(SoC)的特点在于其高度集成性,它将多个芯片的功能集成于单一芯片之中。例如,当我们剖解一个SoC芯片时,会发现芯片内部有不同的功能区域,每个区域对应不同的芯片组。这些包括中央处理单元(CPU)、图形处理单元(GPU)、神经网络处理单元(NPU)、内存控制单元、存储控制单元以及各种接口等。此外,一些移动端的SoC还集成了WiFi、蓝牙、5G基带等通信模块。
常见的SOC有:手机的骁龙SOC、天玑SOC、电脑的AMD8700G、8900G等。
计算机是怎么工作的?
- 我们通过键盘、鼠标、摄像头、麦克风等外设接收输入的数据信息。
- 硬件输入的信息通过接口传递到计算机的内部,然后由软件进行处理。
- 软件是由一系列指令和数据组成的程序,它们指导硬件执行特定的任务。
- 数据通过数字信号的形式传递到中央处理器(CPU)。
- CPU从内存中取出一条条指令,这些指令按照程序预设的顺序进行。
- 指令在CPU内部被解码,这个过程依赖于CPU的指令集。
- 解码后的指令在算术逻辑单元(ALU)中进行逻辑或算术运算。
- 运算结果可能会暂时存储在CPU的寄存器中,或者写回到内存中。
- 运算后的数据存储在内存(RAM)中,内存是临时存储空间,用于快速读写,但断电后数据会丢失。对于长期保存的数据和程序,它们会被存储在硬盘(HDD或SSD)等非易失性存储设备中。
- 处理后的数据通过输出设备呈现给用户,例如显示器、打印机等。显示器将数字信号转换为图像,从而让用户可以看到处理结果。
注意:操作系统则是为了提供与用户的交互而诞生的技术。
常见的计算机有那些?
个人计算机、服务器、超级计算机、嵌入式计算机、单片机、手机、平板。手机和平板也属于计算机的范畴,简称移动便携式计算机。
操作系统简介
什么是操作系统?
操作系统(Operating System,简称OS)是一组管理计算机硬件与软件资源的系统软件,它是计算机系统的核心组成部分,为用户和其他软件提供了与计算机硬件交互的界面。
我们常见的操作系统有:
- Windows:这是有Microsoft(微软)公司开发
- 如图:
- 如图:
- MACOS:这是有苹果公司开发的系统,用于苹果电脑
- Linux:基于unix的开源操作系统,广泛运用在服务器、嵌入式和超级计算机中,常见的有Ubuntu、Arch等
- 如图:
- 如图:
- Android:基于Linux内核打造的开源系统,耳熟能详的国产手机系统都是基于AOSP原生开发的,例如MIUI、HyperOS等
- iOS:苹果公司研发,用于移动设备
- RTOS:实时操作系统,是一种专门设计用于满足实时计算需求的操作系统,知名的分支有FreeRTOS、RTLinux
软件与固件
什么是软件?
软件就是计算机中用于执行某种操作、指令、数据运算的程序。软件分为系统软件、应用软件、编程软件三类。
- 系统软件:系统软件主要是用于管理计算机硬件换个软件资源,为用户提供交互的平台,也就是操作系统,但是操作系统并不完全等于系统软件,系统软件是集成在系统中的一些必要功能,操作系统中会夹杂应用软件。
- 应用软件:应用软件是为了满足客户需求和任务要求而诞生的软件,例如:浏览器、哔哩哔哩、QQ等
- 如图:
- 如图:
- 编程软件:编程软件是给特定用户(程序员)而使用的开发工具,主要用于编写程序、开发软件和固件。如:IDE(集成开发环境)
- 如图:
- 如图:
什么是固件?
固件(Firmware)是一种特定的软件类型,一般会被潜入到硬件设备中,通常是为了控制设备进行特定的操作,固件一般位于硬件设备中的只读存储器(ROM)和闪存(Flash)中,不能像普通软件那样容易被更新。
固件升级一般是OTA升级、或者是串型接口、USB连接、有线网络等方式进行升级。
常见的固件有:
- BIOS/UEFI:计算机主板上特有的功能,用于初始化硬件并且启动操作系统
- 路由器固件:用于管理网络连接、数据包转发、安全设置等功能
- 手机基带:负责处理移动网络通信
既然说到了OTA升级,那么再来介绍下什么是OTA?
OTA其实是一种无线升级方式,可以通过无线网络,比如WiFi、蜂窝网络(也就是移动基站使用的网络)来进行安装固件更新,这种方式是非常常见的,比如手机平板、只能家居,通过连接无线网络使用OTA的方式进行升级。
驱动简介
什么是驱动?
驱动(Driver)它其实也是一种计算机软件,负责连接操作系统与硬件设备之间的通信。简单来说,驱动就是一个翻译器,它将操作系统的通用指令转换成硬件设备能够理解的特定命令,同时也将硬件设备的特殊数据格式转换成操作系统可以处理的信息。
我们每一个设备都有驱动,例如我们的电脑需要安装NVIDIA显卡驱动或者AMD、Inter显卡驱动,如果你的CPU没有集成显卡,并且系统中没有万能驱动,那么你电脑开机后,显示器是没有视频输出的,及时你通过HDMI和DP进行视频数据的传输,也会出现没有视频内容输出的问题,这个时候就需要安装显卡驱动,才能解决这个问题。
驱动是硬件和软件之间沟通的桥梁,没有驱动程序,硬件设备就无法正常工作。
程序简介
什么是程序?程序是由什么组成的?
指示计算机每一步动作的一组指令这就是程序。程序是由指令和数据组成的,光有指令没有数据那么就不能叫做程序,必须有数据的复杂运算,才能叫程序。
什么是机器语言?
机器语言就是CPU和直接解释和执行的语言,最简单的机器语言就是01,计算机诞生支出是没有英文和中文等各种人类语言的,计算机只能读懂0和1。
运行中的程序存放在什么地方?
程序和数据在运行中是存放在内存当中的,容易丢失。每一个数据都有一个地址,我们叫他内存地址,内存地址是用来表示指令和数据在内存中存放位置的数值。
程序是如何跑起来的?
程序要跑起来首先要有可执行的指令,这类指令包含01这种机械语言、比01更高以及别的指令集语言,也叫做汇编语言,再往上就是C语言、比C语言还要高级的就是高级语言,例如Python、Java、C++等。
我们通过编写指令,让指令去处理一些数据,这个过程中是这样的:
- 高级的指令和语言会通过CPU中的编译器转换成机器语言,这样机器可以直接读懂去进行一些操作;针对解释性的语言,比如Python和JavaScript这类语言,程序代码并不是预先编译成机器语言,而是通过解释器在运行的时候逐行逐块的转换和执行。
- **地址映射:**指令在执行的过程中被加载到内存,这个过程由操作系统来负责,随后操作系统通过使用虚拟内存技术为每一个进程提供一个虚拟地址,然后如果内存管理单元(MMU)将其转换成物理地址,当CPU访问一个虚拟地址时,MMU会查找页表(由操作系统管理)来确定对应的物理内存地址。
- **数据读取:**CPU有多级缓存位于CPU和内存之间,比如L1、L2、L3缓存,当CPU需要读取数据时,它会首先检查缓存中是否有该数据。CPU可以直接从缓存读取数据,速度很快,如果不在缓存中,就需要去内存中读取,速度就比较慢,比如缓存满了,速度就变慢了,所以CPU的缓存越大,这个处理的延迟就越低。
- **数据传输:**之后数据会通过系统总线(数据总线、内存总线)从内存传输到CPU,这个数据传输是有内存控制器来进行控制的,CPU通过地址总线发送物理地址,通过数据总线接收或发送数据。
- **CPU处理:**数据最后会被加载到CPU的寄存器当中,寄存器是CPU内部非常快速的小容量存储。CPU的算术逻辑单元(ALU)会对寄存器中的数据进行计算,这个计算过程,CPU会根据指令集架构(ISA)来执行机器指令,比如ARM的Soc使用ARM指令集进行处理,X86_X64的SOC使用X86来进行处理。
- 数据回写:计算后的结果要回写到内存中,先写入CPU缓存,然后根据缓存的一致性协议,最终写回到主内存。
程序大致就是这样跑起来的。更详细的内容短时间是说不完的。这里只做扫盲,并不做深入讲解。
计算机网络简介
什么是计算机网络?
我们以蜘蛛网为例,加入每个蛛网的节点是一台计算机或者通信设备,那么节点与节点之间的蛛丝就是网络。而我们的数据就在这个蛛丝上面进行传输。
互联网就是我们上网使用的网络。而中国的网络是被长城隔离的,我们无法访问到国际网络,我们如果要访问到其他国家的网络设备,就需要通过专线来进行连接,也就是搭个梯子出去,常见的技术就是虚拟专用网络VPN。
网络是怎样连接的?
常见的网络介质主要是有线网络和无线网络。有线网络就是通过网线、光纤等设备进行传输的网络,而无线网络就是人眼看不见的传输介质传播的网络。例如:WiFi、蜂窝网络、无线电、蓝牙、星闪等。
光有有承载的介质,如果你的设备没有网络通信的接口也是没有办法上网的,我们计算机通常会有一个网络接口,接口连接的是网络模块(芯片组),手机也会有相应的网络模块,例如5G模块、无线模块(一般包含WiFi和蓝牙)。
我们有承载网络的介质,也有接收的接口,那么谁来发送呢?网络这么大不会有消耗吗?
所以就有了集线器、交换机和路由器。
- 集线器(Hub):将多个设备连接在一起,但它简单地将信号广播到所有端口。
- 交换机(Switch):比集线器更智能,能够根据MAC地址将数据包直接发送到目标设备。
- 路由器(Router):连接不同网络,并根据IP地址在网络之间转发数据包。
上面讲的是物理连接,我们平常都是软件上网,那么软件上又是如何连接的?软件有如何识别物理设备呢?
于是有了IP地址、子网掩码、MAC地址和网关这种技术。我们每一个网络都有对应的IP地址,方便在网络中标识自己的身份。而子网掩码就是定义IP地址处于那个部分的工具,比如那一部分是主机地址,那一部分是网络地址。
默认网关是指路由器的IP地址,我们是通过路由器和交换机进行网络收发和中转的,它是设备发送到其他网络的数据包的目的地。
MAC地址也叫做物理地址,每一个通信设备的硬件都有相对应的编号,这个编号是入网编号,是固定的,路由器通过这个编号就可以识别对应的设备。
网络连接的过程如下:
- 设备安装好了网卡、传输介质、并且连接到了交换机或者路由器、无线网络等,配置好网络之后就可以实现上网。
- 当一台设备想要与另一台设备通信时,它会将数据封装成数据包。
- 数据包通过网络传输介质到达交换机或路由器。
- 交换机检查数据包的MAC地址,并将数据包转发到正确的端口。
- 如果数据包需要发送到另一个网络,路由器会根据IP地址将数据包转发到目标网络。
注意:数据传输的过程遵循一套网络协议来进行传输。
例如:
- 传输控制协议/互联网协议 (TCP/IP)
- 用户数据报协议 (UDP)
- 网络协议 (IP)
- 动态主机配置协议 (DHCP)
- 域名系统 (DNS)
- 简单邮件传输协议 (SMTP)
- 等…
关于进制
什么是进制?
我们学过最简单的算数,比如我们数字从0-9,满10就进1,变成了10,这就是我们生活在最常用的十进制。
除了十进制还有二进制,八进制,十六进制,其中二进制和十六进制广泛运用与计算机学科。
二进制只有两个数字,分别是:0,1。
八进制主要为:0,1,2,3,4,5,6,7。
十六进制为:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。
可以看见我们进制是从0开始计算的,0是第一位,而十六进制的两位数使用的是英文字母来替代。
计算机的运算符
算数运算符
符号 | 含义 |
---|---|
* | 乘法运算 |
/ | 除法运算 |
^ | 幂运算 |
+ | 加法运算 |
- | 减法运算 |
% | 取余数 |
计算机除了算数运算,还能做数学逻辑运算。如:
符号 | 含义 |
---|---|
| | 按位进行或运算 |
|| | 逻辑或运算 |
& | 按位进行与运算 |
&& | 逻辑与运算 |
! | 非运算 |
进制转换
十进制到二进制
- 将十进制数除以2,记录余数。
- 将商继续除以2,再次记录余数。
- 重复步骤2,直到商为0。
- 将记录的余数倒序排列,得到的就是二进制数。
例如,将十进制的13转换为二进制:
13 / 2 = 6 ... 余数 1
6 / 2 = 3 ... 余数 0
3 / 2 = 1 ... 余数 1
1 / 2 = 0 ... 余数 1
倒序排列余数得到:1101
十进制到八进制
方法与十进制到二进制类似,只是除数变为8。
例如,将十进制的79转换为八进制:
79 / 8 = 9 ... 余数 7
9 / 8 = 1 ... 余数 1
1 / 8 = 0 ... 余数 1
倒序排列余数得到:117
十进制到十六进制
方法与十进制到二进制类似,只是除数变为16。需要注意的是,当余数大于9时,需要用字母A到F来表示10到15。
例如,将十进制的243转换为十六进制:
243 / 16 = 15 ... 余数 3 (15用F表示)
15 / 16 = 0 ... 余数 15 (F)
倒序排列余数得到:F3
二进制到十进制
将二进制数的每一位乘以2的幂次(从右到左,从0开始),然后将结果相加。
例如,将二进制的1101转换为十进制:
1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 8 + 4 + 0 + 1 = 13
八进制到十进制
将八进制数的每一位乘以8的幂次(从右到左,从0开始),然后将结果相加。
例如,将八进制的117转换为十进制:
1 * 8^2 + 1 * 8^1 + 7 * 8^0 = 64 + 8 + 7 = 79
十六进制到十进制
将十六进制数的每一位乘以16的幂次(从右到左,从0开始),然后将结果相加。十六进制中的字母需要转换为对应的十进制数值。
例如,将十六进制的F3转换为十进制:
F * 16^1 + 3 * 16^0 = 15 * 16 + 3 * 1 = 240 + 3 = 243
二进制到八进制
将二进制数从右到左每三位分为一组,然后将每组转换为对应的八进制数。
例如,将二进制的110101100转换为八进制:
110 101 100
6 5 4
得到八进制数:654
八进制到二进制
将八进制数的每一位转换为对应的三位二进制数。
例如,将八进制的654转换为二进制:
6 -> 110
5 -> 101
4 -> 100
得到二进制数:110101100
二进制到十六进制
将二进制数从右到左每四位分为一组,然后将每组转换为对应的十六进制数。
例如,将二进制的110111101转换为十六进制:
1101 1110 1
D E 1
得到十六进制数:DE1
十六进制到二进制
将十六进制数的每一位转换为对应的四位二进制数。
例如,将十六进制的DE1转换为二进制:
D -> 1101
E -> 1110
1 -> 0001
得到二进制数:1101111010001
计算机通用运算
讲了进制和运算符,那么贯穿计算机的运算就容易理解了,计算机的某些运算和数字电路中的运算相似,所以可以贯通使用。
数字电路就是一种电子电路,用于处理数字信号,也就是离散的电压或者电流信号,高电平为1,低电平为0。数字电路与二进制息息相关,最常见的应用就是数字电路逻辑门。
算数运算最为简单,如下:
1 + 1 = 2;
1 - 1 = 0;
9 / 3 = 3;
3 ^ 3 = 27;
10 % 3 = 1;
最主要的就是逻辑运算,贯穿计算机底层计算模式和数字电路计算模式。
当然,下面我将通过一些具体的例子来解释上述数学逻辑和位运算运算:
按位或运算(|)
按位或运算符对两个操作数的每一位进行或运算。如果两个操作数对应的位至少有一个是1,那么结果的对应位就是1;否则,结果是0。
0101 (二进制表示的5)
| 0011 (二进制表示的3)
------
0111 (二进制表示的7)
在这个例子中,5和3的按位或运算结果是7。
按位与运算(&)
按位与运算符对两个操作数的每一位进行与运算。如果两个操作数对应的位都是1,那么结果的对应位就是1;否则,结果是0。
例子:
0101 (二进制表示的5)
& 0011 (二进制表示的3)
------
0001 (二进制表示的1)
在这个例子中,5和3的按位与运算结果是1。
注意:逻辑云算就是进行布尔值运算,其实就是数学里面的真假运算。
逻辑或运算(||)
逻辑或运算符对两个布尔值进行运算。如果两个操作数中至少有一个是true(非零),那么结果是true;如果两个操作数都是false(零),那么结果是false。
假设有两个条件:
- 条件A:今天下雨(假设为真)
- 条件B:今天刮风(假设为假)
逻辑或运算的结果是:
今天下雨 || 今天刮风 = 真 || 假 = 真
因为至少有一个条件是真的,所以整个表达式的结果是真。
逻辑与运算(&&)
逻辑与运算符对两个布尔值进行运算。如果两个操作数都是true,那么结果是true;如果其中至少有一个是false,那么结果是false。布尔值运算其实就是数学里面的真假运算。
假设有两个条件:
- 条件A:今天下雨(假设为真)
- 条件B:今天刮风(假设为假)
逻辑或运算的结果是:
今天下雨 && 今天刮风 = 真 && 假 = 假
因为不是所有条件都是真的,所以整个表达式的结果是假。
非运算(!)
非运算符是一个一元运算符,它对单个布尔值进行取反运算。如果操作数是true,那么结果是false;如果操作数是false,那么结果是true。布尔值运算其实就是数学里面的真假运算。
假设有一个条件:
- 条件C:今天不下雨(假设为假)
非运算的结果是:
!今天不下雨 = !假 = 真
所以,条件“今天不下雨”是假的,但经过非运算后,结果变为真。