操作系统の磁盘存储器管理全解:让"最慢的家伙"跑得快一点

你有没有想过,为什么你的电脑有时候会"卡"一下?尤其是打开一个大文件或者启动一个大型游戏的时候,明明CPU在GHz级别狂跑,却还是要等上好几秒?答案很简单——CPU在等磁盘。在计算机的所有部件中,磁盘是那个"拖后腿的",速度比内存慢几百万倍。怎么让这个"最慢的家伙"尽量跑得快一点,就是磁盘存储器管理要解决的核心问题。

这篇文章,我们把操作系统中关于磁盘管理的知识从头到尾扒个干净——从磁盘长啥样、读写一次要多久、到怎么调度请求、怎么分配空间、怎么格式化、怎么提速、怎么搞RAID,一个都不落。坐稳了,发车。

本文目录

  1. 磁盘存储器概述:存储界的"阶级划分"

  2. 磁盘的物理结构与访问时间:一次读写到底要多久?

  3. 磁盘调度算法:排队也得讲策略

  4. 外存分配方式:文件在磁盘上怎么摆?

  5. 磁盘空间管理:谁占着地,谁空着?

  6. 磁盘格式化:新硬盘到手,怎么从"白板"变"可用"?

  7. 磁盘高速缓存:用内存帮磁盘"打辅助"

  8. 提高磁盘I/O速度的方法:各种加速骚操作

  9. RAID:多块盘组队,又快又稳


一、磁盘存储器概述:存储界的"阶级划分"

1.1 存储层次

计算机的存储不是扁平的,它是一个清晰的金字塔结构。从上到下依次为:寄存器 → 高速缓存(Cache) → 主存(内存/RAM) → 磁盘(HDD/SSD) → 磁带/光盘

图片

存储层次结构:速度、容量与价格的权衡

越往上,速度越快、容量越小、价格越贵。寄存器在CPU内部,访问速度是皮秒级;Cache也是芯片级的,纳秒级;主存(内存条)也是纳秒级但比Cache慢几倍;磁盘是毫秒级——比内存慢了几百万倍。磁带和光盘更慢,但胜在容量极大、价格极低,主要用来做归档和备份。

磁盘属于辅助存储器(外存)——CPU不能直接访问外存中的数据,必须先把数据读到内存里,CPU才能处理。所以磁盘和内存之间的数据搬运效率,直接决定了整个系统的"体感速度"。

1.2 磁盘的分类

硬盘驱动器(HDD) ——传统的机械硬盘,也叫温切斯特磁盘(Winchester Disk)。内部有盘片在旋转、磁头在寻道,是纯机械结构。优点是容量大、价格低;缺点是速度慢(毫秒级)、怕震动。

固态硬盘(SSD) ——基于闪存(Flash Memory),没有机械部件。随机访问速度远快于HDD(微秒级),抗震性好。缺点是写入有寿命限制(闪存有擦写次数上限,一般几千到几万次),价格较高但在持续下降。

磁带 ——顺序存取设备,不能随机访问。容量极大(单盘可达数十TB),价格极低。主要用于企业级归档和冷数据备份。你不会在日常使用中直接接触磁带,但很多大公司的数据中心里堆满了磁带柜。

光盘 ——包括CD(700MB)、DVD(4.7~17GB)、蓝光(25~100GB)。有只读型(ROM)、一次写入型(R)和可重写型(RW)三种。现在用得越来越少了,但在软件分发和影音领域还有一席之地。

1.3 磁盘设备的特点

磁盘(不管是HDD还是SSD)有几个共同特点:

它是块设备——以块(扇区)为单位进行读写,不是像键盘那样一个字符一个字符地传。

可随机访问——可以直接跳到任意块,不需要从头开始。

它是共享设备——多个进程可以交替使用同一块磁盘。

最关键的是,它速度远慢于主存——毫秒 vs 纳秒,差了六个数量级。


二、磁盘的物理结构与访问时间:一次读写到底要多久?

2.1 磁盘的物理结构

图片

磁盘的物理结构:盘面、磁道、柱面与扇区

传统机械硬盘(HDD)的物理结构可以用几个关键词来概括:

盘面(Platter) ——磁盘由多个盘片叠在一起,每个盘片有上下两个面,每个面都能存数据。每个盘面配有一个磁头(Head),负责读写数据。所有磁头安装在一个共同的臂上,同时移动——也就是说,所有磁头永远在同一个柱面上。

磁道(Track) ——盘面上划了一圈一圈的同心圆,每一圈就是一个磁道。外圈的磁道比内圈长,在现代磁盘中,外圈磁道可能有更多的扇区。

柱面(Cylinder) ——所有盘面上相同位置的磁道组成一个柱面。柱面数 = 每面的磁道数。寻道的时候,磁头一起移动到一个柱面,然后选择对应的磁头来读写。

扇区(Sector) ——每个磁道被分成若干段,每段就是一个扇区。扇区是磁盘最小的读写单位。传统扇区大小是512字节,现代磁盘采用高级格式化(Advanced Format),扇区大小为4KB。

要定位磁盘上的某一块数据,需要三个坐标:柱面号 + 磁头号 + 扇区号,这叫CHS寻址(Cylinder-Head-Sector)。现代磁盘更多使用LBA(逻辑块寻址)——把所有扇区编成连续的线性地址(0, 1, 2, 3...),由磁盘控制器内部负责LBA到CHS的转换。

2.2 磁盘访问时间

图片

磁盘访问时间的三个组成部分

读写一个磁盘块,需要的时间由三部分组成:

寻道时间(Seek Time) ——磁头从当前磁道移动到目标磁道的时间。这是最耗时的部分,因为涉及机械运动(磁头物理移动)。寻道时间 = 启动时间 + 移动时间 + 减速时间。典型硬盘的平均寻道时间在5~10毫秒。

旋转延迟(Rotational Latency) ——磁头到达目标磁道了,但目标扇区可能还没转到磁头下面。需要等盘片转一转。平均旋转延迟 = 1/(2 × 转速)。7200转/分的硬盘,转一圈约8.33毫秒,平均旋转延迟约4.17毫秒。15000转的企业级硬盘,平均旋转延迟约2毫秒。

传输时间(Transfer Time) ——扇区转到磁头下面后,实际读写数据的时间。通常很短,在微秒级别。

总访问时间 T = 寻道时间 + 旋转延迟 + 传输时间。由于寻道时间占比最大,所以磁盘调度算法的核心目标就是减少寻道时间——让磁头尽量少跑、跑短路。

2.3 磁盘的I/O请求

进程发出的磁盘I/O请求通常包含以下信息:进程标识(谁发的)、操作类型(读还是写)、数据在内存中的起始地址(数据搬到内存哪/从内存哪搬来)、数据在磁盘上的起始位置(柱面号、磁头号、扇区号)、传输的数据量(要读写多少个扇区)。

多个I/O请求会排队等待服务,形成一个请求队列。磁盘调度算法就是决定"先服务队列中的哪个请求"的策略。


三、磁盘调度算法:排队也得讲策略

图片

磁盘调度算法对比:不同策略的磁头移动轨迹

假设有多个读写请求在排队,先服务哪个?不同的策略就是不同的调度算法。调度的目标有三个:减少平均寻道时间提高I/O吞吐量保证公平性(避免饥饿)

3.1 FCFS(先来先服务)

最简单的策略:谁先来谁先被服务。优点是完全公平,不会有饥饿问题。缺点是完全不考虑磁头当前位置,磁头可能在磁盘上来回乱跑,寻道距离很长。平均寻道时间是所有算法中最长的。就像餐厅叫号完全按顺序来,不管你坐在哪个位置,服务员得满场跑。

3.2 SSTF(最短寻道时间优先)

每次选离当前磁头位置最近的请求。效率比FCFS高很多——磁头尽量就近服务,减少了大量不必要的移动。

但有一个致命缺陷:可能导致饥饿。远处的请求可能一直等不到,因为总有更近的新请求插队。这就像一个贪心算法——每一步都选当前最优,但不保证全局最优。

3.3 SCAN(扫描算法/电梯算法)

磁头像电梯一样工作:单方向一路扫过去,沿途服务所有请求,扫到磁盘一端后反向继续扫。就像电梯从1楼上到顶楼,再从顶楼下到1楼。

优点:无饥饿——每个请求最多等一个完整的来回(电梯总会扫到你那一层)。缺点是两端服务密度不均匀——靠近端点的请求等待时间更长,因为磁头要到端点才掉头。另外,磁头刚扫过的方向上,新来的请求要等整个回程才能被服务。

3.4 C-SCAN(循环扫描)

磁头只在一个方向上服务请求(比如从左到右),到达一端后直接跳回起点(回程不服务任何请求),然后重新开始。

好处是等待时间更均匀——每个请求最多等一个完整的单向扫描周期。坏处是回跳那一段浪费了时间(空跑)。适合请求分布比较均匀的场景。

3.5 LOOK算法

SCAN的改良版。磁头不需要扫到磁盘最末端——如果在当前方向上已经没有更多请求了,就立即反向。减少了不必要的空跑。就像电梯不会非要到顶楼才掉头,如果最高只到15楼有人按了按钮,到了15楼就掉头往下。

3.6 C-LOOK算法

C-SCAN的LOOK版。单方向扫描,当前方向没有请求了就跳回最远端的请求位置继续。等待时间均匀且减少了空跑。

3.7 N步SCAN

把请求队列按时间分为N段子队列,每个子队列内部用SCAN算法。正在服务的子队列中新加入的请求放到下一个子队列里。这样做的目的是防止磁臂粘着——某个进程不断发请求霸占磁头,导致其他进程饿死。

3.8 FSCAN(两队列扫描)

N步SCAN的简化版(N=全部当前请求)。维护两个队列:当前服务队列和新请求队列。当前队列服务期间,新来的请求都进入新请求队列。当前队列服务完后,两个队列交换。效果与N步SCAN类似。

3.9 算法对比总结

算法

公平性

平均寻道

饥饿

特点

FCFS

最公平

最长

简单但效率最低

SSTF

不公平

较短

可能

贪心策略,可能饥饿

SCAN

较公平

中等

电梯算法,两端不均

C-SCAN

较公平

中等

等待更均匀

LOOK

较公平

较短

SCAN的优化版

C-LOOK

较公平

较短

C-SCAN的优化版

N步SCAN

公平

中等

防磁臂粘着

FSCAN

公平

中等

N步SCAN简化版


四、外存分配方式:文件在磁盘上怎么摆?

图片

外存分配方式对比:连续、链接与索引

文件的各个数据块在磁盘上怎么存放?不同的方式有不同的优缺点。

4.1 连续分配

文件的各个部分占据连续的物理块。目录项中只需要记录起始块号 + 块数,就能定位文件的所有数据。

优点是顺序访问速度极快(磁头不用跑来跑去),也支持直接访问(第N块 = 起始块号 + N,直接算)。缺点是产生外部碎片(删除文件后留下的空隙可能太小,放不下新的大文件),而且文件不易动态增长(后面的位置可能已经被其他文件占了)。需要提前知道文件大小,或者预分配过多空间造成浪费。

4.2 链接分配

文件不需要占据连续的物理块,而是通过指针链接在一起。

隐式链接 ——每个物理块的末尾存一个指向下一个块的指针。目录项只记录起始块号。优点是无外部碎片,文件容易扩展。缺点是只适合顺序访问(想找第100块?得从第1块跟着指针一步步走),而且可靠性差——中间某个块的指针坏了,链子就断了。

显式链接(FAT) ——把链接指针从数据块中抽出来,集中存放在内存里的一张文件分配表(FAT) 中。想找下一个块?查FAT表就行。这样既支持直接访问,又提高了检索速度。缺点是FAT表本身要占内存,磁盘越大表越大。FAT16/FAT32/exFAT都用这种方式。

4.3 索引分配

为每个文件建一张索引表,记录文件各部分对应的物理块号。目录项记录索引表的地址。想找第N块?查索引表直接跳到对应物理块。优点是支持直接访问,无外部碎片。缺点是索引表本身也占空间。

大文件的处理方案:链接索引——多个索引块用指针链接起来。多级索引——一级索引指向数据块,二级索引指向一级索引块,三级索引指向二级索引块。混合索引(Unix inode方式) ——inode中直接存放一部分数据块号(如10个直接地址),然后有一次间接、二次间接、三次间接。小文件走直接地址,大文件走间接地址,灵活高效。

4.4 分配方式对比

分配方式

顺序访问

直接访问

外部碎片

文件扩展

额外开销

连续分配

支持

困难

隐式链接

不支持

容易

指针空间

显式链接(FAT)

支持

容易

FAT表占内存

索引分配

支持

容易

索引表空间


五、磁盘空间管理:谁占着地,谁空着?

图片

磁盘空间管理:四种方法对比

磁盘空间是有限的。文件系统需要知道哪些块是空闲的、哪些已经被占了。有四种经典的管理方法:

5.1 空闲表法

最直观的方式:用一张表记录所有空闲区的起始块号和空闲块数。比如"从第100块开始有5块空闲""从第200块开始有10块空闲"。分配时查表找合适的空闲区,回收时把归还的块登记回表,并合并相邻的空闲区。

优点是简单直观,适合连续分配。缺点是空闲区太多时表会很大——磁盘碎片化严重的话,可能有成千上万个小空闲区。

5.2 空闲链表法

把空闲块用指针链接成链表。有两种变体:空闲块链——每个空闲块单独链接,一个接一个。空闲盘区链——把连续的空闲区作为一个整体来链接(每个结点记录起始块号 + 块数 + 指针),减少链表长度。

优点是分配和回收方便——从链头取块就是分配,把块插回链中就是回收。缺点是链接指针本身也占空间。

5.3 位示图法(Bitmap)

用一个二进制位数组表示每个磁盘块的状态:0=空闲,1=已分配。1000块的磁盘,位示图只需要125字节(1000 ÷ 8)。

优点非常明显:占用空间极小容易找到连续空闲块(找连续的0就行了)、整个位图可以常驻内存。广泛用于各种现代文件系统。

5.4 成组链接法

Unix/Linux的经典方式。核心思想:空闲块分组,每组最多N块(如50块)。每组的第一块存放下一组的块数和块号。超级块保存当前组的空闲块列表。

分配时从当前组取一块。当前组取完了,加载下一组信息到超级块。回收时把块放回当前组。当前组满了,形成新组。当前组空了,加载下一组。大多数操作只需要读写超级块,不需要遍历整个磁盘,所以很快


六、磁盘格式化:新硬盘到手,怎么从"白板"变"可用"?

图片

磁盘格式化:从物理格式化到逻辑格式化的三个步骤

一块全新的硬盘不能直接存文件,需要经历三个步骤才能被操作系统使用:

6.1 低级格式化(物理格式化)

在磁盘上划分磁道和扇区,写入扇区头信息(标识磁道号和扇区号)、数据区和校验码(ECC)。同时标记坏扇区(缺陷列表),让系统知道这些位置不能用。

这一步由硬盘厂商在出厂时完成——你买到的硬盘已经低级格式化好了。用户一般不需要(也不应该)自己做低级格式化。

6.2 分区

把磁盘划分为若干逻辑分区。每个分区可以独立管理,使用不同的文件系统。分区过程中会写入主引导记录(MBR)分区表,告诉系统"这块磁盘有几个区,每个区从哪到哪"。

传统MBR分区方式有局限(最多4个主分区,最大支持2TB磁盘)。现代系统使用GPT(GUID分区表)作为替代方案:支持更大磁盘(>2TB)、更多分区、分区表有备份更可靠。

6.3 高级格式化(逻辑格式化)

在分区上创建文件系统。具体包括:写入引导块(Boot Block,用于系统启动)、写入超级块(Superblock,记录文件系统整体信息)、创建inode表(索引节点表)、创建根目录、初始化空闲空间管理结构(位图或成组链接等)。

这一步完成后,操作系统才能在这个分区上创建和管理文件。你在Windows上右键"格式化"U盘,做的就是这一步。


七、磁盘高速缓存:用内存帮磁盘"打辅助"

7.1 缓存原理

和CPU缓存的思路完全一样:用快速的内存来缓存最近访问过的磁盘数据。因为内存比磁盘快百万倍,如果后续访问的数据在缓存中(命中),就不需要再访问磁盘了。这利用了局部性原理——时间局部性(最近访问的数据很可能再次被访问)和空间局部性(访问了某块数据后,很可能接着访问相邻的块)。

7.2 缓冲区的三种状态

缓存中的缓冲区分为三种:

自由缓冲(Free) ——还没被使用,随时可以被分配。

清洁缓冲(Clean) ——已缓存磁盘数据,且内容和磁盘一致(没被修改过)。

脏缓冲(Dirty) ——内容被修改过,和磁盘不一致,需要找机会写回磁盘。

7.3 置换策略

缓存满了怎么办?需要淘汰一些缓冲区。

常用策略:

LRU(最近最少使用) ——淘汰最久没被访问的。

LFU(最少使用) ——淘汰访问次数最少的。

FIFO(先进先出) ——最早进入缓存的先淘汰。

Clock算法(时钟算法) ——LRU的近似实现,用一个循环链表和引用位来模拟。

7.4 写策略

写操作有三种策略:

写穿(Write-through) ——每次写缓存的同时也写磁盘。数据安全但写性能差(每次写都要等磁盘)。

写回(Write-back) ——只写缓存,标记为脏。缓冲区被置换出时才写回磁盘。性能好,但有断电丢数据的风险。

周期写盘 ——定期(比如每隔几秒)把所有脏缓冲写回磁盘。这是折中方案:兼顾性能和安全性。Linux的 sync 命令和内核的 flush 线程就是干这个的。

7.5 统一缓冲池

现代操作系统将磁盘缓存和文件系统的缓冲区统一管理,形成统一的缓冲池。Linux的 Page Cache 就是这种实现——所有磁盘数据(文件数据、目录数据、inode数据)都通过Page Cache来缓存和管理。


八、提高磁盘I/O速度的方法:各种加速骚操作

磁盘是系统中最慢的部件之一,操作系统绞尽脑汁想出了各种加速手段:

8.1 提前读(Read-ahead)

当系统检测到你在顺序读取一个文件时,它会"猜到"你接下来可能要读后面的数据,于是提前把后续的数据读到缓存中。这样你真正要读的时候,数据已经在缓存里了(命中),不用等磁盘。

提前读对顺序访问效果非常好(看视频、读大文件),但对随机访问基本没用。Linux的预读窗口大小是自适应的——连续命中时窗口越来越大,频繁不命中时窗口缩小。

8.2 延迟写(Delayed Write)

写操作不立即写磁盘,而是先写到缓存中标记为脏,然后在适当的时候统一写回。好处是可以合并多次小写为一次大写——比如你连续修改一个文件10次,如果每次都写磁盘就要写10次;有了延迟写,可能只需要写1次。

Linux中有专门的pdflush/flush线程定期把脏页写回磁盘。但风险是断电可能丢数据——还没写回的脏页会丢失。所以重要的程序会用 fsync() 系统调用强制立即写盘。

8.3 优化文件物理块分布

让同一个文件的各个块尽量在磁盘上连续存放,减少寻道次数。ext4的区段(extent)分配就是这个思路——用"起始块号+连续块数"来表示一段连续的数据块,而不是逐块记录。

预分配——创建文件时预先分配一定的连续空间,避免后续频繁扩展导致文件块分散。

8.4 减少磁头移动

通过合理的磁盘调度算法(SCAN、C-SCAN等),将同一柱面的请求集中处理,减少不必要的寻道。在多磁盘环境下,还可以将I/O负载分散到多块磁盘上。

8.5 NCQ(原生命令队列)

这是SATA硬盘的一个硬件特性。操作系统只管往硬盘发I/O请求,硬盘内部自己会对请求重新排序,优化磁头的移动路径。相当于把调度算法从操作系统层下沉到了硬件层。操作系统只需要发出请求,硬盘自己决定执行顺序。

8.6 Linux的I/O调度器

Linux内核提供了几种I/O调度器:CFQ(完全公平队列) ——为每个进程分配独立的I/O时间片,保证公平。Deadline(截止时间调度) ——为每个请求设定截止时间,防止饥饿。NOOP(无操作/直通) ——不做任何调度,直接按FIFO顺序执行。BFQ(预算公平队列) ——CFQ的改进版,按"预算"分配I/O资源。

SSD通常使用NOOP或Deadline——因为SSD没有机械寻道,不需要像HDD那样优化磁头移动路径,调度器的开销反而可能成为瓶颈。


九、RAID:多块盘组队,又快又稳

图片

RAID级别大比拼:速度、可靠性与成本的权衡

RAID(Redundant Array of Independent Disks,廉价冗余磁盘阵列)用多块磁盘组合成一个逻辑磁盘,目的是提高性能和/或可靠性。两个核心概念:数据条带化(Striping) ——数据分散到多盘,并行读写提速。冗余(Redundancy) ——额外存储校验信息,某块盘坏了数据还在。

9.1 RAID 0(条带化)

数据被切成块,交替分布到多块磁盘上。读写可以并行进行,速度成倍提升。但没有任何冗余——任何一块盘坏了,所有数据全完。就像把一份文件撕成几页分给几个人保管,一个人丢了就全没了。至少需要2块盘。适用场景:追求极致速度,数据丢了也无所谓。

9.2 RAID 1(镜像)

每块盘都有一个完整的镜像盘,数据同时写到两块盘上。可靠性极高(一块盘坏了还有另一块),读性能可以提升(可以从两块盘同时读)。但可用容量只有50%——两块1TB的盘组RAID 1,你只能用到1TB。适用场景:数据安全要求极高。

9.3 RAID 2(位级条带 + 海明码)

数据按分散到多盘,额外用海明码做校验。需要很多盘(数据盘+校验盘),实际中很少使用,了解即可。

9.4 RAID 3(字节级条带 + 专用校验盘)

数据按字节分散到多盘,有一块专门的盘存放奇偶校验信息。每次读写都涉及所有盘,适合大文件顺序读写。但校验盘可能成为瓶颈。

9.5 RAID 4(块级条带 + 专用校验盘)

和RAID 3类似,但以为单位分散。校验盘成为写入瓶颈——每次写操作都要更新校验盘,而校验盘只有一块。

9.6 RAID 5(分布式奇偶校验)

和RAID 4类似,但校验信息分散存储在所有盘上,而不是集中在一块盘上。解决了RAID 4的校验盘瓶颈问题。允许一块盘故障而不丢数据。至少需要3块盘。

RAID 5是最常用的RAID级别,兼顾了性能、可靠性和成本。适合文件服务器、NAS等场景。

9.7 RAID 6(双重奇偶校验)

使用两套校验信息,允许两块盘同时故障。可靠性更高,但写入性能更低(每次写都要计算和更新两套校验)。至少需要4块盘。适合对可靠性要求极高的企业存储。

9.8 RAID 10(1+0)

先做镜像(RAID 1),再做条带化(RAID 0)。高性能 + 高可靠,但成本也最高——至少需要4块盘,可用容量只有50%。适用场景:高性能数据库服务器、核心业务系统。

9.9 RAID 01(0+1)

先做条带化(RAID 0),再做镜像(RAID 1)。看起来和RAID 10差不多,但可靠性不如RAID 10——条带组中任何一块盘坏,整个条带组都不可用,只剩镜像组在撑。

9.10 RAID选择建议

RAID级别

最少盘数

可用容量

容错能力

读性能

写性能

适用场景

RAID 0

2

100%

极高

极高

追求速度,数据不重要

RAID 1

2

50%

1块盘

一般

数据安全要求高

RAID 5

3

(n-1)/n

1块盘

中等

通用存储/NAS

RAID 6

4

(n-2)/n

2块盘

较低

企业存储

RAID 10

4

50%

1块/组

极高

高性能数据库

RAID 01

4

50%

1组

极高

不推荐


总结

磁盘存储器管理的核心矛盾就一句话:CPU太快了,磁盘太慢了。为了解决这个矛盾,操作系统想出了一整套方案:

调度算法让磁头尽量少跑、跑短路——FCFS公平但慢,SSTF快但可能饿死人,SCAN像电梯一样均衡,C-SCAN更均匀,LOOK系列是它们的优化版。

分配方式决定文件在磁盘上怎么摆——连续分配简单快速但有碎片,链接分配无碎片但随机访问差,索引分配综合最优。

空间管理追踪磁盘上的"空地"——空闲表法简单直观,位示图法空间最省,成组链接法效率最高。

格式化让新硬盘从"白板"变"可用"——低级格式化划磁道扇区,分区切蛋糕,高级格式化建文件系统。

缓存用内存帮磁盘"打辅助"——Page Cache让热数据不用每次都读磁盘。

各种加速手段进一步压榨性能——提前读、延迟写、优化块分布、NCQ、I/O调度器……

RAID让多块盘组队——条带化提速,镜像保安全,RAID 5是性价比之王。

一句话总结:磁盘存储器管理的全部目标,就是让"最慢的家伙"尽可能不拖慢整个系统


Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐