1.1. 前言

  1. 文档讲什么?

在当今全球科技格局深刻变革的时代,掌握核心底层基础技术已成为国家战略与产业发展的关键。
LoongArch 作为我国完全自主设计的指令集架构,不仅代表着处理器技术的重要突破,更承载着构建
独立、安全、可控计算生态的历史使命,处在建设我国自主计算体系的关键节点。

一个指令集架构的价值最终体现在其软件生态的繁荣程度上,其中的关键,就在于操作系统。
如果说指令集是软件与硬件之间的核心契约,那么,操作系统则是实现这一契约、管理和抽象硬件资源的
关键基础层,是连接硬件与应用的核心枢纽,其重要性不言而喻。

目前,尽管 LoongArch 架构已逐渐成熟并投入实际应用,但系统性讲解其操作系统开发原理与实践的资料仍十分匮乏。
大多数操作系统教材与教程或聚焦于 x86 与 RISCV 架构,或停留于理论层面,缺乏针对 LoongArch 特性的
深入剖析和动手实践指导。

本文档正是基于此背景而创建,旨在填补这一空白。

文档包含了从硬件交互机制到内存管理策略,从中断处理到进程调度,从操作指南到调试工具,从向量指令到平台虚拟化等
相关理论知识和技术细节——不光解释”如何做”,更注重阐明”为何如此”。文档提供的不仅是一套操作步骤,更是一种
系统思维:如何理解 LoongArch 架构特性、如何构建可靠、高效的操作系统;如何在抽象与具体之间找到平衡点。

希望文档能为系统软件开发者提供丰富的可能性,能够充分发挥 LoongArch 架构的潜力。

  1. 主要是针对的用户

本文档面向计算机专业学生、系统软件开发者、开源贡献者以及所有对底层技术怀有热情的探索者。

无论您是初次接触操作系统开发,还是希望深入了解 LoongArch 架构特性,这里都将为您提供清晰的原理说明和全面的技术指南。

我们相信,通过理论与实践的结合,通过代码与原理的互证,每位读者都能建立起对计算机系统本质的深刻理解,
并为 LoongArch生态的繁荣贡献自己的力量。

  1. 本文的主要内容是什么

该文档的章节包括两大部分。

原理说明部分,包含以下几章:

一、内存管理

现代操作系统的内存管理是其最核心、最复杂的子系统之一,负责协调和控制计算机物理内存与虚拟内存的
分配、使用、回收和保护。本质上,内存管理是操作系统为应用程序提供的一种内存抽象机制,将物理硬件
的复杂性转化为清晰、安全、高效的软件接口,在物理内存资源有限的情况下,更加安全高效地服务于无限
增长的应用需求。文档中对 LoongArch 架构下的虚拟地址管理原理,和 MMU 运行模式,做出了详细说明。

二、特权态指令

特权态指令是操作系统实现硬件控制、管理和安全的基石。这些指令能够直接管理和控制底层硬件资源,并为
用户软件提供安全、可控的调用接口,尽可能兼顾安全、准确与效率。文档中,对 LoongArch 架构下
几组特权态指令,基于模拟器实现源码,给出了详细原理说明。

三、中断与异常系统

现代操作系统的中断与异常系统是硬件与操作系统协同工作的事件响应机制,它允许 CPU 立即暂停当前执行流,
转而处理更高优先级或突发的事件,处理完成后恢复原执行流。这是操作系统实现并发、响应、保护和控制的基础设施。
文档中结合硬件底层实现,详细说明 LoongArch 架构下中断与异常运行流程。

四、工具链

繁荣的计算生态脱离不了强力的开发工具链。一个强大的开发工具链,不仅决定了开发效率、代码质量,
甚至支撑了架构生态的可靠性和复杂性。文档详细说明了 LoongArch 架构下,一些常见的工具链的使用指南与技术细节。

五、SMP 多核系统

现代操作系统与 SMP (对称多处理)多核之间存在着共生共进的紧密关系:SMP多核硬件提供了并行计算的物理基础,
而现代操作系统则通过软件机制将这些物理核心抽象、整合和高效管理,形成统一的逻辑计算资源。
文档中对 LoongArch 架构下的 SMP 多核系统进行了详细描述。

六、程序二进制接口

在现代操作系统架构的底层,程序二进制接口(Application Binary Interface,简称ABI)如同一套精密的契约,
定义了二进制程序与操作系统、库函数及其他二进制模块之间交互的严格规则。不同于源代码级别的 API , ABI 作用于
编译后的二进制层面,是确保软件组件能够无缝协作的关键基础架构。理解 ABI 对于系统开发者、性能工程师和安全研究人员至关重要,
它既是兼容性的保障,也是性能优化的基石,更是系统安全的防线。文档详细描述了 LoongArch 架构下多个版本的 ABI 技术细节与应用注意事项。

七、调试方法与技巧

现代操作系统的调试方法与技巧,是指一系列在复杂并发系统中定位、诊断和修复错误的系统化手段。它不仅仅是“设个断点看看”,
而是一套贯穿操作系统开发、部署与维护全生命周期的、融合了硬件机制、软件工具和工程哲学的实践体系。文档详细说明了 LoongArch
架构下的一些调试方法和特殊技巧,以及给出一些调试平台的使用教程。

八、SIMD与向量指令

SIMD (单指令多数据流)与向量指令,是 CPU 为高效处理数据并行任务而实现的硬件加速设计,
这些技术为操作系统、编译器与应用软件提供了优化空间。 文档解释了 LoongArch 架构下的SIMD
与向量指令,并说明了如何使用该指令,对操作系统和应用软件进行优化。

九、LVZ与虚拟化扩展

虚拟化指令是 CPU 专门为支持虚拟化而设计的一组特权指令。它们为运行在最高特权级的虚拟机监控器提供直接
操控硬件虚拟化功能的接口,是实现高效、安全硬件虚拟化的基石。在 LoongArch 架构中,LVZ (LoongArch Virtualization Extension,龙架构虚拟化扩展)
将虚拟化从复杂且耗时的软件模拟中解放出来,让硬件为高效、安全运行多个虚拟操作系统而提供的专用支持。
文档中详细介绍了 LoongArch 架构中 LVZ 指令,并给出虚拟机调用实现细节。

十、平台介绍 针对不同的硬件平台,操作系统需要针对特定的硬件组件,开发不同的基础软件用于识别、适配和管理,并为上层
应用软件提供统一抽象接口。 LoongArch 架构下,包含有嵌入式芯片 2K0300、2K0500、2K1000LA、2K3000 等系列芯片,
以及桌面芯片 3A5000、3A6000 ,这让操作系统适配和管理,面临比较复杂的考验。
文档中,对多款硬件平台的架构和组件,进行详细的描述和说明,为操作系统适配提供帮助。

1.1.1. 仓库地址

一些常用的仓库地址列出,以及说明:

1、Linux 内核以及发行版仓库地址。

  • linux kernel : Linux 开源操作系统

  • Loongnix : Loongnix操作系统是龙芯开源社区推出的Linux操作系统,
    作为龙芯软件生态建设的成果验证和展示环境,集成了内核、工具链、龙芯浏览器、Java虚拟机、音视频库、图形环境、
    云计算、打印驱动等操作系统基础设施方面的最新研发成果,可直接应用于日常办公、生产、生活等应用环境,同时可供合作厂商、
    科研机构及爱好者在龙芯平台上研发其品牌软件或专用系统.

  • UOS : 统信UOS系统是一款基于Linux内核的国产操作系统,上手难度低,界面美观,操作简单。

  • Deepin : 基于 Linux 的开源国产操作系统。

  • AOSC OS : 安同 OS(英译:AOSC OS)是一款以“简明可靠”为设计及维护目标的 Linux 发行版。

  • Yongbao : “勇豹”(Yongbao)是一个使用交叉编译的方式构建目标指令集架构操作系统发行版的项目。

2、工具链仓库地址。

3、模拟器仓库地址。

  • QEMU:开源多平台虚拟机软件。

  • LA_EMU:LoongArch64模拟器。

4、手册与文档地址。

1.1.2. 维护说明

主要的维护人信息:

李亚伟

liyawei@loongson.cn

王宇吉

wangyuji@loongson.cn

内容报错,与意见反馈,可通过以下方式进行。

  • Github 仓库提 Issue。

  • 邮件反馈。

  • 技术交流群。

1.1.3. 更新说明

按照版本号:主版本号.次版本号.修订版本号,比如 1.1.1020,建议修订版本号以时间为准。

0.1.0423

  • 增加 QEMU 裸机运行用户程序教程

0.1.0324:

  • 增加 GDB 调试命令说明

0.1.0323:

  • 更新了二进制程序接口(ABI)内容

0.1.0310:

  • 更新QEMU启动发行版内容

0.1.0309:

  • 修改了第一章前言部分

  • 增加了SMP章节的内容

  • 增加了LICENSE的说明

  • 重构了二进制接口的部分内容

0.1.0107:

  • 做了初始的文档规划

  • 简单章节安排