前言

在正式开始之前,我想说一些自己想说的废话,请读者朋友们不要介意。我为什么把操作系统的学习放到计算机网络后面呢,其实原因有很多。第一个就是作为一个移动端开发人员,特别是iOS 开发人员,尤其是较多使用 Swift 的 iOS 开发人员,从我跟人的经验出发,操作系统里具体的动作对我来说都是透明的。就操作系统相关的知识而言,我只需要对同步异步操作有个简单的理解和认识,能够在提高效率的同时防止死锁的发生,再注意一下循环引用的问题,就可以很顺利地进行开发。再者说,苹果对其源码的私密性非常重视,这也是他们得以保持安全性的手段之一,所以对于在 iOS 设备中相当于 BIOS 的 iBoot,几乎没有渠道和资源能够进行学习 (除了在 2018 年其源码似乎曾在 GitHub 上流出)。

我本人是一个半路出家跨专业自学的开发者,同时我也是一个完美主义者,所以在我的感觉中,相比于计算机网络,操作系统的学习非常难以下手,这也是我选择后学操作系统的另外一个原因。操作系统的知识体系与计算机网络的区别就在于,计算机网络中最主要的就是因特网,这个网络随着时间的推移现在已经是一个庞然大物了。而作为一个拥有着几十亿用户的网络,想要对其底层架构进行改动是极为困难的。因此在学习计算机网络的时候,首先学习的目标非常明确,就是因特网。而因特网的结构在其问世时就已经形成了,后续的任何改动,不论是新的协议也好,对于新问题的解决方案也好,一般都是通过新增的形式来实现的;就算没有选择新增,通常也会考虑到老用户,就需要新版本能够兼容老版本 (TLS 的版本迭代);而那些从根本进行改动的部分 (比如因为 IP 地址数量的原因必须要使用 IPv6 ),其推广都是非常难的。由于上述原因,我个人感觉计算机网络的个性化程度不高,学习的路径也非常统一,网上随便一找都是非常多大同小异的资料,通过互相之间的查漏补缺很快就能整理出一个相对比较完整的知识网络。而后续有新的内容,或是对原先有的内容进行更新,基本都可以建立在之前知识网络的基础上进行学习。

而操作系统因为是建立在个人主机 (包括手机等设备) 的基础上的,由于平台、厂商或是个人选择的不同,设备所使用的操作系统也是千差万别的,因此就算是同样的功能或动作,其实现方式也有可能会是完全不同的。最简单的例子就是启动计算机,也是在后面讲解完硬件相关的内容后我会第一个去写的部分。目前个人电脑最常见的启动模式有 Legacy BIOS 和 UEFI,像 iOS 设备使用的则是 iBoot,又是另一种启动方式。而这些不同的启动方式都与使用的硬件和最终供用户使用的操作系统紧密结合的,虽然有能够支持多种方式的情况,但通常都是配套出现的,而不是有一个统一的解决方案。比如在 iOS 设备的启动链中,首先会运行 Secure ROM 进行基本的初始化,同时检查并加载 LLB (Low Level Bootloader) 和 iBoot,从而继续进行初始化以及检查下一级文件并加载。这整个过程虽然与其他启动方式的大致思路类似,都是通过先运行一段固化的程序,再进行一层或多层初始化,最后引导至用户使用的操作系统;但是其中很多具体的内容和步骤都是针对特定硬件的,并不适用于其他设备。因此就我个人而言,操作系统的个性化程度非常高,所以搜寻到的信息会非常庞大和杂乱。并且由于升级相对容易,知识非常容易过时,比如 Hackintosh 会因为 Apple 对 macOS 的一次硬件相关的更新导致无法直接升级使用最新版本,我本人也是因为时间成本的原因,最后还是放弃了自己安装和使用 Hackintosh。

但是上述原因并不代表操作系统的知识不重要,正相反,对操作系统的学习可以了解计算机的底层原理,从而对上层运行的程序有一个更深层次的认识。因此这次就算是功利得因为面试需要也好,本身为了弥补自身的短板也好,终于鼓起勇气面对这个庞大的课题,首先我需要搞明白的就是计算机是如何启动的。而又因为虽然会有许多个性化的部分,但是大体的思路还是相似的,所以我还是选择从最基本的 Legacy BIOS 开始学起。但是在学习过程中,我发现单纯从流程和软件方面来进行学习总有一种晦涩难懂的感觉,比如会涉及到很多如启动顺序或是分区这样的实际上是专用于特定硬件结构的内容。因此我觉得在学习操作系统之前,除了 CPU 之外,也必须要对计算机负责储存的硬件系统有一个基本的认知。又因为储存系统是一个很大的概念,就需要从各个部分出现的原因来进行理解,同时我也会以我个人学习和理解的顺序来组织这些文章。本文主要讲解储存系统的基本概念和除去可移动储存设备 (外存) 之外最外围的辅存,也就是磁盘。

储存系统的基本概念

根据与 CPU 的距离由近到远的顺序,储存器的层次分类包括寄存器、缓存 (Cache)、主存、辅存和外存 (图 1)。其中,寄存器适用于存放计算过程中的信息,包括即将进行计算的数据和处理所得的结果,因此可以被看作是直接参与 CPU 计算的一部分;而像磁带和光盘这样的外存,不算在计算机本身的结构中,因此暂时忽略。最后得到的与储存相关的结构由内而外依次为 CPU、缓存、主存和辅存。在这之中,CPU、缓存和主存之间的交互由硬件直接负责,后两者在直接交互的基础上也都可以由 CPU 直接进行读写操作;而与主存和辅存相关的交互就需要操作系统的配合,辅存并不能被 CPU 直接读写,而需要通过主存来进行操作。

图 1. 储存器的层次结构

硬盘

根据介质进行分类,硬盘可分为机械硬盘 (HDD,Hard Disk Drive) 和固态硬盘 (SDD,Solid State Dick),因为通常只是作为储存设备而比较少影响计算机内实际运行时的效率 (一般只有程序启动加载到内存时、大型程序如游戏加载所需资源时或虚拟内存页加载时会有影响),在这里就只对这两种硬盘做一个简单的介绍。

一、机械硬盘

机械硬盘是最常见的一种硬盘,它是使用具有磁性的盘片来储存数据的。图 2 展示的是机械硬盘的内部结构,其中最主要的储存相关的部件是磁头和磁盘盘片。在对数据进行操作时,磁盘盘片会以一个极快的速度进行旋转,而磁头则会停留在指定的位置,等待储存的数据旋转到其下 (或其上,每个盘片由上下双磁头进行读写) 时进行指定的操作。因为硬盘中通常有多个磁盘盘片垂直叠放,而磁头与盘片的距离也非常之近,所以机械硬盘害怕由震动导致的磁头和盘片间的摩擦,同时也害怕出现灰尘导致直接损坏磁头和盘片。

图 2. 机械硬盘的内部结构

磁盘盘片是机械硬盘中用于储存数据的部分,数据在盘片上的逻辑结构主要分为磁道、扇面和柱面。其实这很好理解,首先,我们要知道磁盘上是通过一个个磁化单元来储存数据的,根据其磁化方向不同来表示 0 和 1,每个磁化单元可以储存 1 位数据。在知道这个以后,我们可以从逻辑上将盘片的表面划分成一个个由不相连的磁化单元组成的同心圆,每个同心圆就是所谓的磁道。虽然这些磁道的密度很高,但为了防止磁化单元的磁性相互影响,每个磁道之间仍然是有一定的间距的。通常一个盘片的一面上可以有上千个磁道,其中最外侧的磁道被标记为 0 磁道,其余的磁道则由外向内依次进行编号。然后,我们可以将圆形的盘片划分成一个个扇形,而每个在磁道上被扇区划分出来的区域都是一个扇区,且每个扇区内的磁化单元的数量是相同的。但由于越往里同心圆就越小,每条磁道上磁化单元的数量也就越少,因此为了保证扇区大小相同,不同磁道的扇区数量是由外而内依次减少的。之前提到过盘片是多层叠放的,且每个盘片都会有两面,每个面的磁道分布都是相同的,因此我们可以将编号相同的磁道抽象成一个个圆柱,这些圆柱的侧面就是柱面。

传统硬盘的扇区大小为 512 B,每个扇区之间并不是相连的,而是需要在扇区的头部添加一个用于分割扇区的空隙 (Gap)、一个用于标识扇区起始位置和提供计时对齐的同步位 (Sync) 以及一个用于识别扇区号和扇区位置并能提供扇区状态的地址标志 (Address Mack),同时在扇区的尾部还需要添加一个 ECC 校验空间。为了提高硬盘空间的利用率,后来出现了扇区大小为 4 KB 的硬盘,也就是所谓的 4K 硬盘。虽然 4K 硬盘每个扇区的 ECC 检验空间比传统硬盘要大上不少,但是因为扇区个数的减少,仍然可以节省出不少空间。图 3 中展示了传统硬盘和 4K 硬盘的扇区之间的比较。而考虑到兼容性的问题,有一个过渡性的硬盘制式,被称之为 512e 硬盘。这种硬盘中每个扇区的的物理大小已经升级为 4 KB,但供操作系统识别的逻辑扇区大小仍然是 512 B。

图 3. 512 B扇区与4 KB扇区的对比

二、固态硬盘

固态硬盘用储存芯片代替磁盘盘片来储存数量,其速度通常要比机械硬盘快数倍,目前较为常见的是以闪存作为储存介质的固态硬盘。闪存的储存单元的结构如图 4,当浮置栅极有电荷时,该位的值为 1;当浮置栅极没有电荷时,该位的值为 1。固态硬盘使用的闪存颗粒通常是由大小相同的块 (Block) 所组成,其大小通常在几百 KB 和几 MB 之间;而块又分为大小相同的页 (Page),其大小通常为 4 KB 或 8 KB 。块、页以及每个字节中的 8 个比特 (位) 三个维度构成了一个具有三维结构的颗粒。在向闪存颗粒写入数据时,只能以页为单位进行写入。而当一个页中已经存在数据时,只有将该页清空后才能再次写入。但是由于固态硬盘在进行数据清空时是以块为单位的,因此固态硬盘中通常使用一种被称为垃圾回收的机制来改写数据,即先将新数据和原块中未修改的部分一起写到空白的块上,再把原块清除。而当固态硬盘被塞满时,垃圾回收的机制就无法实现,因此会导致固态硬盘的性能下降。固态硬盘有特定的擦写次数,如果超过该次数,它就无法保证进行有效的读写,并且在长时间不用的情况下可能会出现数据丢失的情况。

图 4. 闪存的储存单元

三、机械硬盘 VS 固态硬盘

固态硬盘相比于机械硬盘,其优势是读写速度快,工作声音和温度都很低,同时也不怕震动的影响,并且体积和重量都比较小。但是受限于成本,虽然闪存的价格已经有所降低,但是固态硬盘的储存成本仍然较机械硬盘高出许多。与此同时,由于固态硬盘的擦写次数限制和数据丢失的风险,它不适合用于储存大量的重要数据。因此一般在日常使用中,通常是将固态硬盘用于安装操作系统和常用软件来加快启动速度,而仍然使用机械硬盘来储存较大和重要的数据。

分区样式

随着磁盘空间越来越大,不论是从管理的角度考虑还是从安全性的角度考虑,分区都是一个利大于弊的事情。而将磁盘进行分区,就需要根据特定的规则去执行,以便操作系统识别。目前常见的两种磁盘分区样式分别是 MBR 分区和 GPT 分区。其中,MBR 分区得名于其结构中的主引导记录 (MBR,Master Boot Record),而根据语境,MBR 可以指代磁盘中的第一个扇区或是仅指代其中储存的引导程序 (Boot Loader);GPT 分区则得名于其中的全局唯一标识分区表 (GPT,GUID Partition Table)。以下是对这两种分区结构的介绍,以及两者之间的对比。

一、MBR分区

在讲解 MBR 分区结构之前,让我们先来简单了解一下 DOS (Disk Operating System)。DOS的中文全称是磁盘操作系统,顾名思义,这是一种可以直接对硬盘内的文件进行操作和管理的操作系统,MS-DOS 是微软提供的一款 DOS,其界面通常为黑底白字,它的前身是在 1980 年由 Tim Paterson 用四个月的时间编写的 86-DOS。在微软于 1995 年推出 Windows 95 并宣布不再单独发布 MS-DOS 的新版本之前,MS-DOS 都占据着操作系统的统治地位。不仅如此,从 Windows 95 开始到 Windows Me 的 Windows 操作系统其实也是以 MS-DOS 为基础的,甚至在这之后其它的 Windows 操作系统都仍然有一个与 MS-DOS 的命令解释器 (COMMAND.COM) 功能相同的命令提示符 (CMD)。然而,MS-DOS 不再发展并不代表 DOS 的发展也停止了,其他 DOS 如 FreeDOS 等仍在发展中。

一个完整的 DOS 通常由五个组成部分,分别是引导程序、基本输入输出管理程序、文件管理和系统功能调用程序、命令处理程序以及各种外部命令。以 MS-DOS 为例,其引导程序储存在启动扇区 (Boot Sector) 中。而随着操作系统的日益复杂,启动扇区中规划的空间已经不足以放下引导操作系统的完整代码。因此引导程序被分为两个阶段,其中位于启动扇区中的第一阶段引导程序被称为主引导程序 (Primary Boot Loader),功能也从原本的直接引导操作系统变为引导第二阶段的引导程序。MS-DOS 中的基本输入输出管理程序是 IO.SYS 模块,该模块也被称为 DOS BIOS,其主要功能是向 MS-DOS 提供与系统 BIOS 之间的接口,并与系统 BIOS 一起组成了CP/M 系统中定义的 BIOS。而 MSDOS.SYS 模块则是 MS-DOS 中的文件管理和系统功能调用程序,是向用户提供的与 MS-DOS 之间的程序级接口。COMMAND.COM 作为 MS-DOS 中的命令处理程序,负责接收并最终执行用户键入的命令,而外部命令则是以文件形式储存的 DOS 应用程序。

优先讲解 DOS 是因为 MBR 分区样式是为了早期的 DOS 设计的,所以有时也被称之为 DOS 分区或是 MS-DOS 分区。因此 MBR 分区中有许多针对 DOS/MS-DOS 的设计,并且从兼容性等方面考虑被继承了下来。从之前的描述中,我们了解了传统机械硬盘中一个扇区的大小为 512 B,MBR 分区结构中,磁盘的第一个扇区被规定为启动扇区,用于储存主引导程序和分区表等信息。启动扇区中最后 2 B 空间用于储存 MBR 分区的标识,即 0x55 和 0xAA;分区表占据该标记之前的 64 B,总共可以储存 4 条分区记录,每条分区记录占 16 B;剩余的 446 B 则用于储存主引导程序。由于分区表中只能储存 4 条记录,因此一个磁盘只能被分为 4 个主分区,但是可以通过将一个主分区标记为扩展分区的方式,将其中的空间继续细分为逻辑分区。理论上来说,逻辑分区可以有很多个,但是受限于盘符个数 (英文字母个数),可以分配盘符的分区 (包括主分区和逻辑分区) 最多只能有 26 个。以上是 MBR 分区的大致结构,图 5 是对这个结构的一个更为直观的展示。

图 5. MBR分区结构

二、GPT分区

如上文所说,MBR 分区是为 DOS 设计的,因此随着操作系统和硬件设备的持续发展,不断有各种问题出现,这种分区样式也就不再适合当今的使用环境,因此就出现了GPT分区样式。鉴于网上的信息比较庞杂,并且不同的文章中常常互有冲突难以整合,因此下文的内容主要参考微软文档中的 Windows and GPT FAQ。在这里只是做一个简单的总结描述,如果对详细细节感兴趣的朋友也可以自行前往阅读。该文也有中文版 (Windows 和 GPT 常见问题解答),但是为了防止出现翻译错误导致理解偏差,还是建议阅读英文版原文。

GPT 本身是作为统一可扩展固件接口 (Unified Extensible Firmware Interface,UEFI) 计划的一部分引入的。与 MBR 相比,GPT 提供了一种更灵活的机制来对磁盘进行分区。在 MBR 中,分区表只能储存 4 条分区记录,当需要更多的分区时,只能将其中一个主分区作为扩展分区之后将其划分为多个逻辑分区。同时,Windows 在使用 MBR 分区样式进行分区时的依据是柱面的边界,而当前的硬件中已经不存在这种物理结构了。另外,MBR 分区的规则本身比较复杂,对一些规则也没有很好地进行指定,比如柱面对齐是否意味着一个分区的长度至少为一个柱面的问题就没有被明确说明。而每个 MBR 分区是由一个 2 B 大小的字段进行标识的,因此需要通过协调来避免冲突。曾经 IBM 有提供协调方案,但是目前并没有一个权威的分区标识符列表能够使用。此外,还有一种使用一些未分区的 (或是被隐藏) 的扇区通过几个不被记录的进程来保存特定信息的做法,但是这种方法会使调试变得非常困难。

其他更为具体的 MBR 分区的劣势和 GPT 分区与之相比的优势会在下一个部分中描述,以下是使用 GPT 分区样式时的磁盘结构 (图 6)。在 GPT 分区样式的磁盘中,或者更严格地说,从出现容量超过 8064 MB 的硬盘开始,就必须由逻辑块寻址模式 (Logical Block Addressing,LBA) 代替 CHS (Cylinder、Heads、Sector) 寻址模式来进行磁盘寻址,每个逻辑块 (Logical Block) 与传统机械硬盘中一个扇区的大小相同,通常为 512 B。如图所示,第一个逻辑块,也就是 LBA 0,其中的内容被称为 Protective MBR。Protective MBR 的结构与 MBR 相同,但其并不是 GPT 的一部分,其存在的目的只是为了防止 GPT 分区样式的磁盘被之前无法识别 GPT 分区样式的磁盘工具操作导致损坏。Protective MBR 的分区表中只有一条记录,这条记录将磁盘的整个空间作为一个分区保留下来。从 LBA 1 开始到 LBA 33 为止的 33 个逻辑块才是真正的 GPT,其中 LBA 1 中的内容被称为 Primary GPT Header,用于保存与 GPT 和其他磁盘分区相关的重要信息,包括用于验证的 CRC32 检验和;在剩下的 32 个逻辑块中,每个逻辑块可以储存 4 条记录,每条记录的大小为 128 B,也就可以储存总共 128 条记录,代表 128 个分区。为了便于损坏后的修复,GPT 分区中还有一个备用的 GPT,其内容与 GPT 相同,只是储存顺序相反,占据了从 LBA -1 到 LBA -33 的 33 个逻辑块。除了以上部分之外,剩下的所有逻辑块都可以被自由分区,并且所有分区都是主分区,而不再使用扩展分区这样的二级结构。

图 6. GPT分区结构

三、MBR分区 VS GPT分区

以下的内容主要是参考微软文档中的 How Basic Disks and Volumes Work,该文档只有英文版,并且从 2009 年末开始已停止更新,但仍具有很高的参考价值。GPT 分区样式相比于 MBR 分区样式,最直观的优势就是 GPT 分区样式的定义更加明确并且可以自我识别,不需要借助其他方式来协调或储存额外信息。另外,虽然图 6 中的结构显示 GPT 的大小为 33 个逻辑块,但是实际上,GPT Header (图 7) 中的首个可用逻辑块地址 (First Usable LBA) 和最后可用逻辑块地址 (Last Usable LBA) 分别记录了第一个和最后一个可被分区使用的逻辑块,所以理论上来说 GPT 的大小是可以扩展的,也就可以容纳更多的分区记录。反观 MBR 分区,首先其分区表结构限制了磁盘只能被分为 4 个主分区,如果需要更多的分区则必须将其中一个分区作为扩展分区;同时,扩展分区中的逻辑分区所使用的 EBR 中的分区表的结构也与 MBR 中的分区表结构相同,其中第一条记录指向当前逻辑分区,第二条记录指向下一个逻辑分区,第三条和第四条记录为空。GPT 分区也有多种机制来保证其分区结构的正确性和完整性:首先,如图 7 所示,GPT Header 中的 CRC32 检验和 (CRC32 Checksum) 和分区记录列表检验和 (Partition Entry Array CRC32) 字段储存了 GPT Header 本身和分区记录列表的 CRC32 检验和,这两个检验和可以用于检验储存的分区结构是否正确;其次,除了 Primary GPT 之外,磁盘末尾的 Backup GPT 可以在 Primary GPT 出错时帮助恢复。GPT 分区样式中的每个分区都有一个唯一的 GUID ,如图 8 所示,储存在唯一分区 GUID (Unique Paritition GUID) 字段中。这个 GUID 直接解决了分区的冲突问题,也就不需要像 MBR 分区样式一样通过协调的方式来解决问题,并且 GPT 中的每个分区记录的分区名 (Partition Name) 字段可以储存长达 36 个 Unicode 字符的名称,也就允许任何软件在不需要额外了解分区的情况下都能展示一个可读的分区名。

图 7. GPT Header 结构

图 8. GPT 分区记录结构

目前网上各种文章中,最常见的一种说法是 MBR 分区支持的最大磁盘大小为 2 TB,也有另一种声音说该上限为 2.2 TB。这些文章中,我没有找到对于第二种说法的解释,希望对此有了解的朋友能够为我解惑。对于第一种说法,普遍的理由是在 MBR 分区的每条分区记录 (如图 9) 中,记录相对扇区数 (Relative Sectors) 和扇区总数 (Total Sectors) 的区域各占 4 B,也就是 32 位,因此能够囊括最多 2^32 个扇区,而每个扇区的大小为 512 B,所以上限就是 2^32 * 512 B = 2 TB。但是我个人觉得这个解释站不住脚,因为按照这种说法,在理想状态下,当最后一个分区的相对扇区数为 2^32,也就是说该分区是从前 2 TB 空间的最后扇区开始的,而他的扇区总数也为 2^32,那最终可以分配的磁盘大小最大约为 4 TB,远远超过 2 TB。因此我个人认为 Tao Lyu 在 Quora 上关于问题 Why is MBR partition system limited to 2TB disks? 的回答更有说服力,其大意是说该限制是由于支持 MBR 分区结构的均为 32 位操作系统,因此访问扇区时的最大值为 2^32,也就是说操作系统限制了磁盘的最大可识别容量为 2 TB。而前一种说法用于解释一个分区的容量上限更为合适, 在 How Basic Disks and Volumes Work 中就是以此做的解释,不过由于信息陈旧,该文章中提供的 GPT 分区样式下每个分区的最大容量也为 2 TB。而在 Windows and GPT FAQ 中有写到,GPT 分区样式支持将磁盘划分为最多 2^64 个逻辑块,即 8 ZB 的空间;但实际上,最大分区和磁盘大小取决于操作系统,目前 Windows 系统支持的最大分区大小为 18 EB,而当每个分区都为 18 EB 时,总共 128 个分区可以支持最大为 2.25 ZB 的磁盘。值得注意的是,目前 Windows 文件系统支持的最大文件上限为 256 TB,已经非常大了,而 2.25 ZB 的空间可以储存接近一千万个大小为 256 TB 的文件。因此就目前的使用环境而言,Windows 操作系统支持的 GPT 分区样式已经完全能够满足各种各样的使用需求。

图7. MBR 分区记录结构

操作系统(一)储存系统——基本概念和硬盘相关推荐

  1. 操作系统学习笔记-01-操作系统的概念(定义),功能和目标

    操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念(定义),功能和目标 文章目录 1-操作系统的概念(定义),功能和目标 1.1常见的操作系统 1.2概念(定义) 1.3-操作系统的 ...

  2. 迁移操作系统:如何把系统迁移到固态硬盘SSD?

    如何把系统迁移到固态硬盘SSD?很多人新买了固态硬盘之后不知道如何操作才能将现有的操作系统的所有数据完完整整迁移到新的固态硬盘上,还有的人甚至不知道还能这样迁移,直接就重装了系统,之后又进行一系列拷贝 ...

  3. 旧电脑 存储服务器 系统,爷爷级PC,用白菜价内存搭建内存硬盘操作系统,老系统飞起来。...

    认识众多玩家高手/拆客/DIY爱好者,查阅更多资源,一起学习技术知识 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 爷爷级PC,用白菜价内存搭建内存硬盘操作系统,老系统飞起来. 系统配置: ...

  4. 如何把固态硬盘系统克隆到固态硬盘,笔记本硬盘复制到另一个硬盘

    当笔记本电脑使用时间久了,用户先后开启多个应用程序后,会出现卡顿.反应慢,甚至是网页崩溃的现象,这可能是系统盘可用空间不足导致的.所以,用户想更替为存储空间更大的硬盘.但是,用户的旧笔记本电脑中有许多 ...

  5. 操作系统笔记——Linux系统实例分析、Windows系统实例分析

    文章目录 传送门 Linux进程管理 Linux进程组成 Linux进程链表 Linux进程控制 用户进程创建与撤销 0,1,2号进程 Linux进程切换 Linux进程调度 内核同步 Linux储存 ...

  6. 操作系统原理,文件系统的概念与实现,概念,需求,文件分类,逻辑结构,数据结构,文件控制块和文件目录,基本文件操作,多级目录,文件物理结构,Unix的文件多级索引结构

    操作系统原理,文件系统的概念与实现,概念,需求,文件分类,逻辑结构,数据结构,文件控制块和文件目录,基本文件操作,多级目录,文件物理结构,Unix的文件多级索引结构 基本概念 一.文件概念: 1.文件 ...

  7. linux随笔1-操作系统基本概念

    linux随笔1-操作系统基本概念 在提linux之前,不得不提一下操作系统这个概念,在如今科技飞速发展的时代中,您应该很难不接触到计算机吧?计算机在开发初期,初衷在于可以帮助人们,进行大量的运算工作 ...

  8. 如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统

    如何使用Openfiler为VMware ESX设置一个免费的iSCSI或NAS储存系统 By admin ⋅ 2008/09/19 ⋅ 3,135 views ⋅ Post a comment 所有 ...

  9. 计算机组成原理:储存系统和结构

    ❤️强烈推荐人工智能学习网站❤️ 储存系统的组成: 1.按作用分类 1>高速缓冲存储器:位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能高速的访问它们.其速度可以和CPU速度相 ...

最新文章

  1. Nature:FB和推特的数据是如何革新社会科学,改变世界的?
  2. 帝国cms文章页调用当前文章URL如何操作?
  3. couchdb java 连接_CouchDB客户端连接的说明---Java版
  4. python编写简单赌博游戏赏析及注意事项
  5. 《高性能MySQL》读书笔记-第6章-性能查询优化
  6. readline库实现命令行自动补全
  7. Wannafly挑战赛26 A B
  8. c++:template使用中的常见报错
  9. MATLAB中的resample函数根本理解,我专栏中有Guitar.MAT资源
  10. APR学习-消息池的设计与使用
  11. php 事件驱动,详述PHP事件驱动问题的理解
  12. 2023年最新批量删除微博_新版微博怎么批量删除自己发的微博?
  13. CentOS安装Eclipse,Eclipse启动时报错
  14. 微信小程序获取个人头像和昵称,和地图选点功能
  15. Spring Boot SSL证书验证的问题
  16. 计算机桌面交互,基于全息现实技术的桌面交互系统与沉浸式CAVE系统的区别
  17. 当年的你是如何走上编程之路的?
  18. 模拟CMOS集成电路设计入门学习(6)
  19. 迁移学习五——GFK
  20. redis最全面试题

热门文章

  1. 亚马逊数据分析选品的几个维度你都知道吗?
  2. 一张涵盖Linux云所有知识点的思维导图(含K8S),你需要吗?
  3. AES加密算法之字节替换操作
  4. 翻译: 使用非线性卡尔曼滤波来估计信号
  5. ASP.NET实现登录验证码
  6. 【脚本项目源码】Python制作多功能音乐播放器,打造专属你的音乐播放器
  7. 武汉市工业互联网发展专项资金申报条件,2022年政策奖励补贴情况
  8. android 验证wifi密码错误,Android – 看看wifi的密码是否正确
  9. PHP sort() 函数等
  10. 使用oracle的操作系统认证(Operating System Authentication)的方法