计算机基础记录¶
0 Summary¶
"虽然计算机领域新技术在不断涌现,但是计算机所做的事情,始终都是对输入的数据进行运算,将结果输出,这一点是永远不会变化的。"
1 一个内存IC的容量¶
内存IC引脚的示意图¶
计算这个IC能存多少数据¶
首先需要明确知道:一个地址可以存放一个8位的数据(8bit=1byte)
地址端共有10个引脚A0-A9
00000 00000 - 11111 11111 = 2的10次方=1024个地址
每个地址存放1byte数据,则总共容量为1024byte=1KB
总结和扩展¶
通常情况下一个内存IC引脚越多,能存放的数据也越多。
上面看到的就是地址总线10位的CPU。
这里引入内存中的 数据总线的宽度 和 地址总线位宽 的概念。
一个数据总线宽度为64位的内存模块,它的地址总线的位宽通常为64位。
64位地址总线:能够寻址的内存地址数量最多为2^64个;64位数据总线:一次可以传输的数据位数为64位=8个字节。
上面都在说的是内存,那我们说的操作系统32位、64位那又是什么呢?
32位和64位是指计算机操作系统和CPU的架构类型。其中,32位和64位指的是CPU的寻址能力,即CPU能够寻址的最大内存数量。
32位的寻址能力是仅限于32位的地址;64位的寻址能力是64位,可以兼容32位。
在实际应用中,64位操作系统和CPU相比32位操作系统和CPU具有更好的性能和更高的处理速度。这是因为64位CPU可以同时处理更多的数据,同时支持更多的内存,从而提高计算机的整体性能。
32位系统的最大寻址空间是2的32次方=4294967296(bit)= 4(GB)左右;64位系统的最大寻址空间为2的64次方=4294967296(bit)的32次方,数值大于1亿GB;
也就是说32位系统的处理器最大只支持到4G内存,而64位系统最大支持的内存高达亿位数,实际运用过程中大多数的电脑32位系统最多识别3.5GB内存,64位系统最多识别128GB内存。
为什么1字节=8位?因为8位可以涵盖所有字符编码
【补充】数据类型在内存中¶
我们都知道: * char占一个字节 * short占两个字节 * long占四个字节
如果把它们放在内存中,可以看到char占1个地址,short占2个地址,long占4个地址
这里的数据123
没有超过每个类型的最大长度,所以short、long占用的其他内存空间的数值为0.
2 硬盘和内存¶
程序不读入内存就无法运行
程序必须从硬盘读入到内存,才可以运行。
因为负责解析和运行的CPU需要PC来指定内存地址从而读出程序指令,而内存具有比硬盘更快的访问速度,能够更快地提供程序所需的指令和数据,从而加速程序的执行。
3 计算机主板¶
计算机主板是计算机系统的核心部件之一,也被称为主机板、母板、系统板、底板等,它主要有以下几个作用:
-
连接各种计算机组件:主板上有各种插槽和接口,可以连接处理器、内存、扩展卡、硬盘、光驱等各种计算机组件,形成一个完整的计算机系统。
-
控制和协调各个组件的工作:主板上的芯片组负责控制和协调各个组件的工作,使它们能够有序地运作。例如,芯片组可以管理内存的读写、处理器的运行、硬盘的读写等等。
-
提供扩展性:主板上有各种扩展插槽,可以插入不同类型的扩展卡,例如显卡、声卡、网卡等,使计算机系统具有更多的功能和性能。
-
提供电源管理:主板上有电源连接口和电源管理芯片,可以控制整个计算机系统的电源开关、电源供应和电源管理等。
总之,计算机主板是整个计算机系统的核心部件,它负责连接、控制、协调和扩展各种计算机组件,是计算机系统正常工作的关键之一。
主板里面了ROM,ROM里面有BIOS。
4 认识一下虚拟机¶
虚拟机软件
: 在同一个操作系统上可以运行其他操作系统虚拟机(Virtual Machine)
: 它模拟了一个完整的计算机系统,包括硬件和操作系统。
以Java虚拟机为例¶
JAVA有两层意思,一个作为编程语言的Java,一个是作为运行环境的Java
先看一个普通的C源代码的运行流程
再来看看Java虚拟机下的
Java虚拟机在Windows上是专门的Windows虚拟机,Macintosh上是Macintosh虚拟机,Linux上是专门的Linux虚拟机
可以看到两张图对比,少了本地代码、CPU运行的过程??
不妨可以再来看看虚拟机的概念,它模拟了一个完整的计算机系统,包括硬件和操作系统。
我们就可以知道原来这些过程放在了虚拟机里面啊
所以我们通过编译得到的Java字节码文件,可以不受操作系统影响
从操作系统角度看,Java虚拟机就是一个应用,从运行环境来看,Java虚拟机就是运行环境。
5 认识一下BIOS¶
BIOS是什么¶
BIOS(Basic Input/Output System) 存储在ROM上,是预先内置在计算机主机内部的程序。
BIOS可以实现对硬件的基本控制
(键盘、磁盘、显卡等)还有引导程序
的功能
引导程序
:把OS从磁盘加载到内存中运行
BIOS的基本流程¶
电脑开机后,BIOS会确定硬件是否正常运行,没有异常,就会启动引导程序,把OS从磁盘加载到内存中运行。
虽然启动程序是OS的任务,但是OS不能启动自己,需要BIOS的引导程序来启动。
BIOS的更新¶
BIOS是存储在ROM的,不能直接修改,那现在的电脑提到的BIOS更新程序是什么鬼?
问了ChatGPT,得到了解释。
固件更新工具并不是直接修改BIOS存储在ROM中的内容。相反,它使用一个特殊的机制将更新的固件映射到计算机的内存中,并使用该固件来启动系统。这种机制称为"固件更新机制"或"BIOS更新机制",它允许在运行系统时将新的BIOS固件加载到内存中,而不是直接修改ROM中的数据。
当您运行固件更新程序时,该程序会将新的BIOS固件文件复制到特定的存储位置,通常是在硬盘驱动器上的一个特定目录中。然后,固件更新程序会将计算机的BIOS设置为在启动时从该位置加载固件文件。当计算机重新启动时,它会从该位置加载新的BIOS固件,并用它来启动系统。
总之,固件更新工具并没有直接修改ROM的内容,而是使用BIOS更新机制将新的固件文件映射到内存中,并用它来启动系统。这个机制使得BIOS更新更加方便和安全,同时也更容易回滚到旧的BIOS固件版本,以避免可能的问题。
我的理解:
这个会占用一些磁盘资源。
更新BIOS之后。开机启动,不再运行原来存在ROM上的BIOS,而是运行硬盘驱动器上的一个特定目录中的BIOS,从这个位置加载新的BIOS固件,并用它来启动系统。
6 操作系统的API差异¶
键盘输入、鼠标输入、显示器输出、文件输入输出都是API提供的功能。
不同的操作系统提供的API都是不同的
这样Windows应用程序不能直接移植到Linux上来
不同CPU类型的差异¶
CPU类型不同,对应的机器的语言也不同
所以相同的操作系统,API几乎相同,但是由于CPU类型不同,本地代码也不相同。
7 二进制求负数¶
我们把二进制的最高位当作是符号位
概述:求二进制负数,先求它的补数,然后再+1
求1的负数
1= 0000 0001
求其补数= 1111 1110
+1 = 1111 1111
所以-1的二进制为 1111 1111
【拓展】¶
二进制负数不能直接用十进制来表示。也就是说二进制负数直接按权相加,得到的十进制不是负数
怎么办?
将二进制负数 取反后+1 ,再在十进制的结果上加上符号位
比如 1111 1110 -> 0000 0010 -> 2 -> -2
8 函数调用机制的理解¶
前置知识¶
- 程序计数器Program Counter:用来存储下一条指令所在的地址
- 三大条件控制流程
- 顺序:最简单,就是PC++
- 条件、循环:使PC指向任意的地址,这样程序就可以跳转到任意指令了。
函数调用机制¶
执行MyFun函数过程
* 调用函数执行 call指令
把下一个指令的地址 0154 存放在一个叫“栈”的主存中。
* 并把调用函数的地址 0260 设置到PC上
* 完成函数。执行return指令
,函数结束后,会从栈中拿回下一个指令的地址0154,并且把它设置到PC上
【补充】数组的实现¶
基址寄存器+变址寄存器=实现数组
9 初识多线程¶
多线程的核心就是CPU的切换
用C来举个例子¶
汇编代码
10 初识中断¶
中断处理器的示意图¶
中断处理器的功能¶
CPU接收到中断请求->切换到中断处理器
下面是中断处理器的过程 1. 把CPU中所有寄存器中的数据保存到内存的栈中,备份数据 2. 完成对外围设备的控制,还原寄存器中的数据
11 Windows操作系统的特性¶
32位和64位¶
32位操作系统表示处理效率最高的数据大小
比如最高能处理的数据是32位的
64位同理
API函数集来提供系统调用¶
DLL(Dynamic Link Library)文件是Windows操作系统中常见的一种动态链接库文件,它包含了一些可供其他程序调用的函数和数据。DLL文件通常是在运行时动态加载到内存中的,它们允许程序在不复制大量代码的情况下共享代码和数据,从而提高程序的性能和可维护性。
API通过多个DLL文件来提供,每个API的实体都是用C来编写的,所以C语言使用API更加容易。
API是应用程序和OS之间的接口,提供系统调用,也就是间接对硬件操作。
12 DMA¶
DMA(Direct Memory Access)是一种计算机技术,用于提高计算机设备之间数据传输的效率。传统的计算机数据传输方式需要通过CPU来控制,数据从设备传输到CPU,再从CPU传输到目标设备,这种方式效率较低,会占用CPU的大量处理时间。
DMA技术的原理是将数据传输的控制权从CPU转移到DMA控制器,DMA控制器直接从设备读取数据并将其存储到内存中,或者直接从内存中读取数据并将其发送到设备中,而不需要CPU的干预。这样可以极大地提高数据传输的速度和效率,同时也减轻了CPU的负担,提高了整个系统的性能。
DMA技术广泛应用于许多计算机设备之间的数据传输中,例如硬盘、光驱、网卡、声卡等设备与内存之间的数据传输。通过使用DMA技术,这些设备可以在不占用CPU处理时间的情况下,直接进行高速数据传输,提高了系统的整体性能和响应速度。
13 VRAM和GPU¶
VRAM¶
VRAM( Video Random Access Memory ):用于存储图像和视频数据。
通常来说,显存容量越大、带宽越高的显卡,性能越好,能够处理更高质量的图像和视频。
需要注意的是,显存和系统内存是两个不同的概念。系统内存是计算机主板上的内存,用于存储操作系统和应用程序等数据,而显存是显卡上的专用内存,用于存储图像和视频数据。
GPU¶
GPU(Graphics Processing Unit):是计算机中的一种特殊处理器,主要用于图形和图像的计算和处理。
与传统的中央处理器(CPU)相比,GPU通常拥有更多的计算核心和更高的并行处理能力,可以同时处理多个数据和任务,因此在图形和图像处理方面表现更加出色。
需要注意的是,GPU通常需要和显存一起使用,因为显存能够提供快速的图像数据存取和处理,帮助GPU更加高效地进行图形渲染和图像处理。因此,显卡通常包括GPU芯片和显存两部分,一起构成一个完整的图形处理单元。
在MS-DOS时代VRAM是和主存一起的。Windows中将他们分开了,并集成到了显卡中。