随笔系列6:计算机基础
Last updated on December 20, 2024 pm
宝藏学习网站:小林coding之图解计算机网络和操作系统
磁盘
分区知识1:簇
在磁盘(如U盘)格式化的时候,有一项是“分配单元大小”,这就是分区中的“簇”。“簇”是分区的最小存储单元。一个数据在存入硬盘前,会事先按照簇的大小将其分成N等份,然后分别存入分区中不同的簇内。例如名叫“毕业论文.pdf”的文件,大小是1600KB,将其存入磁盘时有以下情况:
(1)如果分配单元大小设置为512KB,那么意味着该磁盘的“簇”大小为512KB。在数据存入前,系统会先将其分为512KB、512KB、512KB、64KB四份,然后分别存入硬盘对应的四个簇中,这样一来存在一个问题,最后的64KB不够填满一个512KB的簇,那么剩下的448KB空间也就被浪费了。其实,即使最后一个簇中仅使用了1个字节(Byte),这个簇剩下的全部空间也会被弃之不用。
(2)如果将分配单元大小设置为64KB,那么数据存入前,系统会按64KB将这个数据分为25份,然后存入对应的25个簇中。
将簇设置为512KB时,最后会有一部分空间被浪费,但是它存取数据时只需分成4份就完成了,因此理论上讲效率更高。而将其分成64KB时,虽然对空间的利用率更高、不容易造成浪费,但存取效率也会相对降低。故簇越小,效率越低,但浪费的空间也小;簇越大,效率越高,浪费的空间也多。在格式化时,如果不调整这个参数,系统默认将“分配单元大小”设置为4096字节,即4KB,由于在x86时代,每个内存页的大小被定义为4KB,因此认为将硬盘的块大小也分成4KB可以与内存页吻合而提升硬盘的运行效率。
另外,目前市面上主流的硬盘格式有三种:APFS、NTFS、exFAT,特点如下。
APFS:优点:可靠,安全。对配合苹果电脑使用友好。缺点:不兼容Windows系统。
NTFS:优点:采用日志式,稳定安全,Windows系统使用友好,是主流格式。缺点:Mac只支持读,写入要第三方驱动。
exFAT:优点:对Windows和MAC格式都兼容,对闪存SSD硬盘优化更好。缺点:机械硬盘用这格式数据容易丢。
易混淆知识1:磁盘与硬盘
磁盘是计算机主要的存储介质,可以存储大量的二进制数据。早期的计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的是硬磁盘(Hard disk,即硬盘)。磁盘是一个广泛概念,包括多种存储介质,如磁盘、光盘(用激光打上去的数据)等,其中磁盘以磁性原理存储数据,包括盘片、磁头、盘片主轴、控制电机、磁头控制器、数据转换器等,存储容量由扇区数、磁道数、磁头数决定。
硬盘,即硬盘驱动器,英文名称是Hard Disk Drive,简称是HDD。硬盘可分为固态硬盘(Solid State Drive,SSD)、机械硬盘(Hard Disk Drive,HDD)、混合硬盘(Hybrid Hard Drive,SSHD or HHD),而硬盘就是磁盘的一种。硬盘是一种常见的外部存储设备,它将数据保存在一个磁盘上,使用一个磁头扫描磁盘上的磁道,读取或者写入数据,主要采用磁盘作为存储媒介(机械硬盘)。
易混淆知识2:内存外存与硬盘
存储器分类:存储芯片种类很多,依据不同的特性有多种分类方法。
1.按存取方式分类
(a)随机存取存储器(Random Access Memory, RAM) 这种存储器每个单元读写时间一样,且与各单元所在位置无关。我们平常说的手机内存,8G或者12G的,指的就是这种。 (注:这里的读写时间一样主要强调地址译码时间相同。现在的DRAM芯片采用行缓冲,因而可能因为位置不同而使访问时间有所差别)
(b)顺序存取存储器(Sequential Access Memory, SAM) 数据按顺序从存储载体的始端读出或写入,因而存取时间的长短与信息所在位置有关。例如:磁带。
(c)直接存取存储器(Direct Access Memory, DAM) 直接定位到读写数据块,在读写数据块时按顺序进行。例如:磁盘。
(d)相联存储器(Associate Memory, AM) 按内容检索到存储位置再进行读写。例如:快表,一种高速缓冲存储器(Cache)。
2.按存储介质分类
(a)半导体存储器:双极型、静态SMOS型、动态DMOS型。
(b)磁表面存储器:磁盘(Disk)、磁带(Tape)。
(c)光存储器:CD、CD-ROM、DVD。
3.按信息的可更改性分类
(a)读写存储器(Read/Write Memory):可读可写。
(b)只读存储器(Read Only Memory, ROM):只能读不能写。
4.按断电后信息的可保存性分类
(a)非易失性存储器(Nonvolatile Memory):信息可一直保留,不需电源维持。如:ROM、磁表面存储器、光存储器等。
(b)易失性存储器(Volatile Memory):电源关闭时信息自动丢失,如:RAM、Cache等。
5.按功能/容量/速度/所在位置分类
(a)寄存器(Register) 这种存储器封装在CPU内,用于存放当前正在执行的指令和使用的数据。用触发器实现,速度极快,容量很小(几个字节到几十字节)。
(b)高速缓存(Cache) 位于CPU内部或附近,用来存放当前要执行的局部程序段和数据。用SRAM实现,速度可与CPU匹配,容量小(几十KB到几MB)。
(c)内存储器MM(又称主存储器Main(Primary) Memory) 位于CPU之外,用来存放已被启动的程序及所用的数据。用DRAM实现,速度较快,容量较大(目前来说通常是2GB到16GB)。
(d)外存储器AM(又称辅助存储器Auxiliary/Secondary Storage) 位于主机之外,用来存放暂不运行的程序、数据或存档文件。用磁表面或光存储器实现,容量大而速度慢。
目前我们讨论较多的还是按照第4种分类方式,因为这样分只有2类,描述方便,当然第3种方式也是分为两类,不过目前存储器都支持读写,只读的很少,所以一般说第4类种分法较多。这里再补充个闪存(Flash Memory):内存RAM使用寄生电容充放电来表示0和1,充了电的电容需要不断的被充电维持状态,否则会很快漏电,所以需要持续供电,但是速度块。Flash闪存使用MOS管中间的一个绝缘体包括层来储备电子,充电之后可以长期保存,外部使用sense amp比较放大器来感受每个MOS管内的状态,从而输出0和1状态,断电后数据依然保存,比RAM慢一个数量级,但是比磁盘快多个数量级。闪存相当于一种电子式可擦除程序化只读存储器(EEPROM)的变种,与EEPROM不同的是,EEPROM能在字节水平上进行删除和重写而不是整个芯片擦写,而闪存的大部分芯片需要块擦除。
手机、电脑的文件存储
前面说到,内存是保存进程的相关数据。一旦关机(断电),内存里面的数据就随之清空。对手机来说,像照片、文档什么的,并不是保存在内存中,而是存在闪存里面,也就是手机中的128G、256G等。内存越大,可以同时运行的软件就越多,闪存越大,可以存储的文件就越多。目前的手机闪存大多用的是Nand Flash(eMMC和UFS是两种通信协议/标准),也有少数用Nor Flash的。
对电脑来说,电脑除了内存,也要有存文件的地方,那么是不是和手机一样也是闪存呢?有人马上会说:不是闪存,是固态硬盘或者机械硬盘。这种说法不算错,但不够准确。接下来先从协议和接口开始简述,然后再叙述硬盘的种类。
目前电脑大多使用固态硬盘SSD,SSD数据通信普遍是PCle标准。注意,M.2不是通信协议,也不是数据通道,而是接口标准。举个简单的例子:USB接口,常见的有Type-A和Type-C,拿type-c来说,它可以支持多种通信协议,比如雷达协议、dp协议等。M.2接口类型既可以走PCle通道,也可以走SATA通道,所以有双M.2的说法。值得注意是的是,PCle通道有专门的PCle接口类型。当然,SATA通道也有专门的接口类型:SATA接口。
也就是说,硬盘与主板连接的接口,主要有SATA、PCIe、M.2三种形式,但从主板插槽到主板芯片之间,传输数据的总线(就是上面提到的“数据通道”)有SATA和PCIe两种。基于此,M.2接口有两种规范,一种是socket2,一种是socket3,前者支持SATA3和PCIe x2的总线接口,后者支持PCIe x4的总线接口。
最后还有个NVMe协议。电脑bios里面硬盘的一个设置项,可选择为AHCI或者ATAPI。一块SATA接口的硬盘,可以选择使用AHCI传输协议或者ATAPI传输协议。不过ATAPI是一个并行ATA传输协议,主要用在旧式的IDE接口上,现在大多数情况下已经不再被使用。对M.2接口来说,如果走SATA通道,只能使用AHCI协议,而不能用NVMe协议;如果走PCle通道,既可采用AHCI协议,也可以采用NVMe协议。NVMe是一个专门为固态硬盘设计的协议,它比AHCI更高效,更适合高速的固态硬盘。因此,对于高性能的M.2接口固态硬盘,NVMe协议通常是首选。
总线、协议、接口
总线是一组传输通道,是各种逻辑器件构成的传输数据的通道,一般由数据线、地址线、控制线等组成。接口是一种连接标准,常被称为物理接口。协议就是传输数据的规则。
协议就是总体框架,定义接口设备、器件及信号、总线及通道之间需要满足的关系,即要实现信号的传输,所有这些组成成员必须通力合作,各自满足协议要求的各种必要条件。
总线
一台电脑由多个电子元器件组成,如CPU、内存、硬盘等,各元器件之间往往需要相互传递数据。数据传输的公用通道,就是总线。
通道就好似公路,公路有乡间小道、柏油马路和高速公路之分,总线自然也有其区分标准。
区分总线承载能力的一个概念,叫带宽,也就是单位时间内能够传递的数据量。带宽越大,单位时间内能够传递的数据量越多。
我们常见的总线(通道)有SATA总线和PCI-E总线两种。
SATA总线常见的就是SATA 3.0,理论最高速度只有6Gbps(6G bits per second),磁盘以 1G = 1000M 进行换算,所以 6Gb = 6000/8MB = 750MB,但实际上是除以10的:6Gb = 6000/10MB = 600MB,所以此类接口的固态硬盘理论传输速度为600MB/s,再考虑10%左右的带宽折扣,实际速度约是550MB/s。PCIe总线常见的有PCIe 3.0和PCIe 4.0,通道数量不同,速度也会不同。以PCIe 3.0×4总线为例,它的带宽高达32Gbps,此类接口的固态硬盘实际传输速度可以轻松突破1000MB/s,顶级产品甚至可以到达4000MB/s以上。
若继续用公路来类比,那SATA 3.0是乡间小路的话,PCIe 3.0就是柏油马路了。综上,同为固态硬盘,走的是哪种总线,至关重要。
协议
协议,全称是网络协议,是数据传递双方共同遵循的一种规定、准则。
举个例子,A向B传输视频数据,但是B不接收视频,只接收图片,这就会导致视频数据无法传输。这个时候,只有双方都使用图片格式,才可以正常传输数据,这就是协议。
目前,硬盘常用的协议,主要有AHCI和NVMe两种。NVMe与AHCI都是逻辑设备接口的一种标准,不过NVMe相比AHCI在延时性、功耗、IPOS等一些方面性能要强。不过,并非是说NVMe协议的固态硬盘一定比AHCI协议的速度快,具体的速度还要看走的是哪种总线,以及硬盘本身的性能。
接口
最常见的硬盘接口,主要是SATA接口以及M.2接口。
SATA接口,主流硬盘接口之一,是Serial ATA的缩写,即串行ATA。它使用SATA总线、AHCI协议,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输。
M.2接口,又称为NGFF,是新一代接口标准,拥有比SATA接口更小的尺寸,同时提供更高的传输性能。按金手指的类型,M.2接口又细分为M-Key、B-Key、B&M-Key。
M.2接口支持SATA总线和AHCI协议、PCIe总线和AHCI协议以及PCIe总线和NVMe协议。当使用SATA总线和AHCI协议时,其和普通的SATA硬盘没有什么区别,速率同样会被限制在550MB/s左右。当使用PCIe总线和AHCI协议以及PCIe总线和NVMe协议时,速率上限由PCIe的版本和长度决定。
PCIe既可以作为总线,承担传输通道的存在,也可以直接以接口的形式存在。如果在PCIe接口上安装固态硬盘,使用的就是PCIe总线和NVMe协议。
还有一种接口:SAS,支持SAS总线和SCSI协议、SATA总线和AHCI协议。这种接口(以及SAS总线)常见于服务器中,可以理解为强化版的SATA接口。其在SATA接口的基础上增加了更多的功能,并且支持更高速率的SATA总线。SAS接口可以一分多,以满足服务器柜中多硬盘的要求。
由于SAS接口是在SATA接口上改动而来的,SAS接口可以向下兼容SATA硬盘,使用AHCI协议。但SAS硬盘只能接在支持SAS总线上,使用SCSI协议。
理论上,一款固态硬盘选择M.2接口,走PCIe总线,用NVMe协议,性能发挥是最好的。
Reference
这篇文章总结的不错:固态硬盘的总线、接口、协议之间的关系和区别
这篇文章也可以,包含很多图片:一文看懂主板的协议、总线和接口
SSD和HDD
固态硬盘SSD是用固态电子存储芯片阵列而制成的硬盘,由闪存(FLASH)作为基础存储介质的存储设备。手机上的闪存和电脑的固态,存储介质都是Nand Flash,也就是说它们的存储芯片是一样的,只是控制芯片不同。FLASH的速度比机械硬盘速度快很多,所以被广泛应用到存储设备。不仅是手机的闪存和电脑的固态硬盘,目前的U盘、SD卡等都是FLASH。还有一种SSD存储介质用的是DRAM。
SSD的优缺点:优点:读写速度快,防震抗摔能力强,功耗和噪音低,工作温度范围大。缺点:容量小,寿命短,价格高。

机械硬盘HDD所有盘片装在一个旋转轴上,每张盘片都是平行的,所有磁头连在一个磁头控制器上,由控制器负责各个磁头的运动。
分区知识2:磁盘接口与分区
我们都知道一块磁盘是可以被分成多个分区(partition)的,以Windows系统来看,你会有一块磁盘并且将它分区成了C、D、E盘,这三个盘就是3个分区。
个人计算机常见的磁盘接口有两种,分别是IDE接口和SATA接口,目前主流的已经是SATA接口了。我们称可连接到IDE接口的设备为IDE设备,不管是磁盘还是光盘。
在Linux系统中,以IDE接口来说,主机会提供两个IDE接口,每个接口连接两个设备,所以最多可以连接到4个设备。每个接口的IDE设备又有Master和Slave之分。
再以SATA接口来说,由于SATA/USB/SCSIA等磁盘接口都是使用SCSI模块来驱动的,因此这些接口的磁盘设备文件名都是使用SCSI模块来驱动的,因此这些接口的磁盘设备文件名都是/dev/sd[a-p]的格式。但是与IDE接口不同的是,SATA/USB接口的磁盘设备文件名根本就没有一定的顺序,顺序是由Linux内核检测到磁盘的顺序决定的。
想了解硬盘分区,首先需要清楚硬盘的存储机制。硬盘的两个单位是扇区(Sector)和柱面(Cylinder),其中每个扇区大小为512Bytes。每个扇区的重要程度是不一样的,整块磁盘的第一个扇区特别重要,因为它记录了整块磁盘的重要信息。磁盘的第一个扇区主要记录了两个重要的信息,分别是:主引导分区(Master Boot Record, MBR):可以安装引导加载程序的地方,有446bytes;分区表(Partition Table):记录整块硬盘分区的状态,有64bytes。
硬盘默认的分区表仅能写入四组分区信息,这四组分区信息我们称为主(Primary)分区或扩展(Extended)分区。当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理。虽然分区表只有记录四组数据的空间,但不代表一块硬盘最多只能分出四个分区。扩展分区的目的是使用额外的扇区来记录分区信息,扩展分区本身并不能被拿来格式化。我们可以通过扩展分区所指向的那个区块继续作分区的记录。由扩展分区分配继续切出来的分区,就被称为逻辑分区(Logical partition)。
逻辑分区是在扩展分区上面创建的,相当于一块存储介质,和操作系统还有别的逻辑分区、主分区没有什么关系,是独立的。逻辑分区可以看作是“裸”的分区,也就是一块“裸”的硬盘,没有操作系统在里面。逻辑分区相当于一个独立的个体,有自己的文件系统,有自己的操作系统。扩展分区则不是真正意义上的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在主引导扇区中除了主分区外,仅需要存储一个被称为扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(逻辑磁盘)的起始位置,以此位置类推可以找到所有的分区。无论系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。
综上,主分区与扩展分区最多可以有四个(硬盘的限制),扩展分区最多只能有一个(操作系统的限制)且无法格式化。逻辑分区是由扩展分区继续切割出来的分区,能够被格式化后作为数据存取的分区为主分区与逻辑分区。逻辑分区的数量随着操作系统不同而不同。
存储容量计量单位
bit与Byte
Bit(比特,用 b
表示)是数据的最小单位,表示一个二进制位,只有两个值0和1,它可以用来代表一个晶体管的通断,或者某根导线上电压的有无。
Byte(字节,用 B 表示)是数据的基本单位,一个字节等于8位比特,即:1byte
= 8bit。即1个字节包括了 \(2^8 = 256\)
种组合。
KiB(KB)
KB:全称是:KiloByte,意思是千字节。
它是计算机数据存贮器存储单位字节的倍数形式,通常用于描述磁盘容量、文件大小、内存地址及其大小。
1KB = 1024B。
根据IEC命名标准(国际电工委员会:International Electrotechnical Commission,简称IEC,是世界上最早的非政府性国际电工标准化机构之一,负责制定电气、电子和相关技术领域的国际标准),用于二进制存储单位的标准命名是:KiB。也就是说,像KiB、MiB、GiB这种写法,才是标准的计算机领域的术语,中间的i取自:binary,表示二进制幂的计数,即:
\[2^{10} = 1024 = 1K, ~~~ 1M = 1024K, ~~~ 1G = 1024M\]
这与数学领域或日常生活中的 1K = 1000、1M = 1000K、1G = 1000M 是不同的。但在Windows系统中,KB通常也被视为1024B,以至于到现在大家很容易将KiB和KB混淆。硬盘商家标定的 1GB 比计算机中的 1GB 略小,就是硬盘销售时和计算机读取时用的换算单位不同所导致的。硬盘都是采用1000来进位的,与日常生活相符,因此当硬盘被计算机读取时,就跟计算机中的1024进位“格格不入”,那么我们自然就感觉硬盘空间“缺斤少两”。
换句话说,我们只需要明白,在计算机领域,KB、MB、GB、TB、PB、EB等都是互相以1024为进位的就行了,它跟KiB、MiB意思是一样的。本文也是总结计算机领域相关的知识,因此文中所述的MB、GB等单位其实是MiB、GiB。
MB、GB和TB
MB:全称是:MegaByte,意思是兆字节。
它也是计算机存储容量的单位,通常用于描述数据或程序的存储需求。
1MB等于1024KB,也等于\(1024^2\)字节。
GB:全称是:GigaByte,中文称为吉字节,也被称为千兆字节。
计算机存储容量单位,常简写为G。1GB等于1024MB,也等于\(1024^3\)字节。
TB:全称是:TeraByte,意思是太字节。
计算机存储容量单位,通常用于描述大型存储设备的容量。1TB等于1024GB。
此外,还有:PB(Petabyte)、EB(Exabyte)、ZB(Zettabyte)、YB(Yottabyte)等。1PB等于1024TB,1EB等于1024PB,以此类推。1TB相当于一家大型医院中所有的X光图片的资讯量;5EB相当于至今全世界所有人类讲过的话语;1ZB相当于全世界海滩上沙子数量的总和;1YB的数据量则如同7000位人类体内的微细胞数目的总和。
计算机知识问答
端口号有多少个?
端口号(Port Number)是用于标识网络中通信终端的软件接口的编号。端口号是一个 16 位(2 Bytes)的无符号整数,因此端口号的范围从 0 到 65535,总共 65536 个。
端口用来标识连接端点,并将数据传送到服务。端口分为虚拟和物理两种。USB 端口是我们常见的一种物理端口,当我们提到计算机端口时,脑海中立即就会浮现出此类端口。
虚拟端口非常多,端口号的范围从 0 到 65535。互联网协议 TCP 和 UDP 决定了数据包发送到哪个进程,其依据是服务器-客户端架构。主机(例如服务器)通常运行多个进程(应用程序),比如 Web 和电子邮件。每个主机都维护着一份表格,用来将端口号映射到进程,在有数据包送达主机时,主机会使用该表格来将数据包路由到正确的进程或服务。笔记本电脑等终端设备通常运行多个客户端,如网页浏览器和电子邮件阅读器。在数据包送达目标地址时,TCP 和 UDP 协议决定了要将数据包发到何处。
端口号分为三类: 1. 知名端口(Well-Known Ports): 0-1023 - 这些端口号通常分配给一些常见的服务和协议,如HTTP (80), HTTPS (443), FTP (21), SSH (22) 等。
- 注册端口(Registered Ports): 1024-49151
- 这些端口号可以由用户或应用程序分配,用于特定服务。
- 动态/私有端口(Dynamic/Private Ports): 49152-65535
- 这些端口号通常用于临时或私有的连接,即客户端应用程序在与服务器通信时动态分配的端口。
显卡和GPU有什么关系?
显卡(Graphics Card),又称显示卡或视频卡,是安装在计算机中的硬件组件,是连接显示器和个人电脑主板的重要组件。显卡的主要作用是将CPU提供的指令和数据进行相应的处理变成显示器能够接受的文字或图像后显示出来,以便为用户继续运行或终止程序提供依据。显卡通常由以下主要部分组成:
(1)GPU(Graphics Processing Unit),图形处理单元,是显卡的核心计算组件,是一种专门用于处理图像和视频信息的微处理器,负责执行图形计算/渲染任务。
(2)显存(VRAM,Video Random Access Memory),是图形处理器(GPU)中的专用内存,用于存储图像、纹理、帧缓冲区以及其他与图形处理相关的数据。显存的主要作用是提供一个高速缓存区域,使GPU能够快速访问和处理所需的图形数据,从而提高渲染速度和性能。显存的容量和速度对GPU处理图形任务的效率有重要影响,特别是在高分辨率和复杂场景下。
(3)其他组件:如散热系统、供电模块、输出接口(HDMI、DisplayPort...)等。
GPU是显卡中的处理器,用于执行并行计算任务,尤其擅长处理大量简单/重复的数学运算。GPU最初设计用于图形渲染,但由于其高度并行化的架构,GPU也被广泛用于其他需要大量并行计算的领域,如深度学习、科学计算等。
总的来说,显卡是一个硬件组件,包含了GPU和其他支持性组件,负责处理图形输出并将其显示在屏幕上。而GPU是显卡中负责计算和图形处理的核心部分。因此,显卡和GPU是包含与被包含的关系,显卡是一个完整的硬件设备,而GPU是其中执行计算任务的主要处理器。
显卡和GPU并不是严格的一一对应的关系。它们之间的关系可以分为以下几种情况:
(1)单GPU显卡:一块显卡对应一个GPU,这是最常见的情况。大多数消费级显卡(例如:NVIDIA GeForce、AMD Radeon系列)都是单GPU设计,也就是说,一块显卡上只有一个GPU。这种显卡通常用于游戏、图形设计以及一些计算任务。
(2)多GPU显卡:一块显卡对应多个GPU,在某些高端显卡中,可能会集成多个GPU。这种设计通常用于专业领域,如科学计算、深度学习或高性能计算(HPC)。多GPU显卡通过内部互连方式(如NVLink)将多个GPU连接在一起,以实现更高的并行计算能力。
(3)多显卡系统:多块显卡对应多个GPU,在某些高性能计算环境中,服务器或工作站可能安装了多块显卡,每块显卡上都有一个或多个GPU。这种配置通常用于需要大量并行计算的场景,如大型神经网络训练、科学模拟等。通过SLI(Scalable Link Interface)或CrossFire等技术,可以将多块显卡中的GPU连接起来,协同工作。
PS:在Linux中,通过命令 nvidia-smi
输出的编号和相关信息通常指的是GPU,而不是整个显卡。