豫言双架构裸机之始
今之全系(先阅此)
豫言操作系统今为可启、可交互、有持久文件系统之单核系统,ARM64 与 AMD64 皆于 QEMU 通过自动验收:
| 层 | 所载 | 文 |
|---|---|---|
| 内核 | 手编机器码(豫言源所生):页权限之隔离、定时之抢占、二任务槽之创建、等待、终止、回收、复制,单条整数消息之邮箱与阻塞接收,动态内存块(线性内存可增),设备窗口与 IOMMU 之隔离,Virtio 设备之用户态访问,控台之入环与 Ctrl-C 之标,实时钟(墙钟之务:ARM64 读 PL031、AMD64 读 CMOS) | 本目录诸专题 |
| 用户态执行器 | 客体二号:以底层模式之常豫言所书 WasmGC 解释器(栈机、保守标记清扫、异常、尾调用、软浮点),于用户态行普通豫言程序 | 客体二号 |
| 文件系统 | 用户态 Virtio 块驱动加双区追加日志之持久文件系统(多层目录、崩溃安全之提交扇区、紧缩),离线造盘之器 yy造盘 | 客体二号、文件系统提交日志 |
| 壳 | 普通豫言所书之默认命令壳(壳/壳。豫):目录、切换、列、读、写、追加、复制、移动、建、删、运行、脚本、加、回显、设、取消、环境;命令之出可以 >、>> 导入文件,运行 可以 < 文件 改其标准输入、甲 \| 乙 \| 丙 连为顺序之管;子进程中亦可读写文件(由壳代办);Ctrl-C 可打断所行之程序(退出码一百三十)、弃所敲之一行(控台之入)| 客体二号 验收一节 |
| 进程 | 同步子进程:复制任务,子任务以盘上之程序易己,父任务候其退出码;标准输入之改向、环境之变量随复制授于子任务 | 同上“子进程”“标准输入重定向、环境变量与顺序管道”二节 |
| 动态装载 | 多实例:运行中自盘装载 Wasm 模块,跨模块导入导出与双向回调(含延迟之链) | 同上“多实例”一节 |
| 数值 | 小数运算走 IEEE 754 软浮点(加减乘除、诸转、定点六位转文、%.17g 之精确表示、文转小数);Wasm 之 f32、f64 诸指令(较、算、取整、开方、转、饱和截断)亦以软浮点行之,逐位与 V8 相校 | 同上“软浮点”“Wasm 浮点指令”二节 |
构与行(于仓库根目录、已装 QEMU):
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 豫言操作系统/裸机/豫言系统。豫 --编译器 ./yy4_bs.wasm --输出 yy豫言系统.wasm
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node 豫言操作系统/宿主/节点/宿主.cjs yy豫言系统.wasm 运行 --架构 兼容六十四 # 交互;缺省带示例程序;壳中书“退出”以终,Ctrl-C 断所行之程序,卡死则按 Ctrl-A 继按 X 强止
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node 豫言操作系统/宿主/节点/宿主.cjs yy豫言系统.wasm 构建 --预置 某目录树 # 唯造镜像与盘,并印 QEMU 之令
--预置 缺省即 豫言操作系统/裸机/示例(书 --预置 无 则为空盘),其所指之目录树全入于盘(盘缺省六万五千五百三十六扇区即三十二兆字节,--盘容量 可改);树中以 。豫 终者先编为程序(/程序/你好。豫 成 /程序/你好.wasm),以 .底层库 终之标记文件构同名之底层包(/库/库甲.底层库 成 /库/库甲.wasm),壳中以 运行 /程序/你好.wasm 参… 启之,普通豫言程序可用 豫言_加载模块、豫言_调用导出 装载而调库。用法见 豫言操作系统/裸机/豫言系统。豫;可行之示例程序(你好、回声、质数、斐波那契、统计、复制文件、行数、环境变量)见 示例。
验:
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 豫言操作系统/裸机/普通豫言验证。豫 --编译器 ./yy4_bs.wasm --输出 yy普通豫言验证.wasm
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node 豫言操作系统/宿主/节点/宿主.cjs yy普通豫言验证.wasm # 四十二项乘双架构,约十二分;--只验 普通-壳- 可只行一类
涵:普通豫言程序(打印、列表、闭包、异常、回收之压、小数、浮点指令、表指令)、壳(基本、文件命令、运行子进程、子进程之文件、输出重定向、脚本、示例程序、环境变量与管、子程序崩溃之隔、盘上之大程序)、语言测试集 应用/豫言编译器/测试/网页汇编 之十二例、磁盘(跨重启读写、离线造盘)、动态装载(含回收之压)、内核服务之探针。内核本身别有 yy裸机验证(下文,三百余项)。
普通豫言壳于拆词前去行模所入之末换行,令参数与 退出 复得正解。交互就绪与模拟器毕事之旧候限,各增百倍,以察较久之壳验;--只验 壳-基本、--只验 壳-运行、--只验 壳-子进程文件 于 QEMU 二架构皆过。验证器仍以输出与所期逐字校之。
于仓根备 QEMU,验裸机:
node 豫言操作系统/宿主/节点/宿主.cjs yy豫构.wasm 文件 豫言操作系统/裸机/验证。豫 --编译器 ./yy4_bs.wasm --输出 yy裸机验证.wasm -j 24
YY_GC_INITIAL_HEAP_SIZE_MB=1024 node --no-liftoff 豫言操作系统/宿主/节点/宿主.cjs yy裸机验证.wasm
二〇二六年九月二十八日,Node 26.3.0 上,--no-liftoff 令「客体整数执行」之大函数径经优化编译,避 Liftoff 单函代码区之限;上令双架构三百八十验皆过,运行约八十秒。
WASI:WASI preview1 之兼容层,今由 客体二号/WASI名称。豫 与 WASI分派。豫 部分接入;旧实现存于 WASI库 以备参。二十二样各至少于一原生目标行过;裸机子任务之随机熵源与底层文件代办犹待为。
今之界:内核唯二任务槽,故一时唯一子进程、子进程不得再起子进程,管亦唯顺序(诸段相继而行,前段必自终);子进程之文件事由初始任务经邮箱代办(每信三字节,量大甚缓);实时钟唯秒之精与 UTC;跨实例唯传数值;无 SIMD。
标准网页汇编整数模块经豫言提前编译,成两机启动镜像。机器字节、标号、重定位、首部与页表皆以豫言作之,无英文汇编源,不借外汇编及链接之器。
臂机于一级异常层立页与向量,返零级以行客;兼容机自保护模式入长模式,立页、描述符、任务状态及中断门,转第三环以行客。核心验硬件所存用户态,授串口、核验、用户态、时钟与任务查询诸服务。旧验收须四次核验;常规程序可径退,不受此测试约束。
初版两机各六试:正常、隔离、错果、释页权、操作数栈溢、调用栈溢。前二须成,后四须拒;退码与串口文字并验,不以印字独为证。验证器亦豫言所作,限时候之,超时终本轮所生进程,产物及日志藏新建临时目录。命令详汉语稿。
用户两栈分区而有界,函数诸参及局部合计至多一百二十八,代码至多一兆字节。今单核、静态大页,两客分域轮行之实现详双任务调度,实测另载。今二槽可动态生灭、等待、终止、回收与传消息;用户命令壳初具,未授输入模块者默认载之。通用多任务、文件、持久化、完整命令壳、客中动态加载及完整垃圾回收犹未备。用户代码与栈未细分写行之权,不以此冒生产沙箱。旧普通豫言仍循原 WasmGC 后端。
串口由客体访设备,模拟退出惟为止试。生成器不先算客体之果;其自身尚由旧编译器构建,以 Wasm 行之亦借既有宿主。客体无旧库依赖,非整个自举工具链已独立。此为微内核引导原型,非完备操作系统。
用户态结构控制已通,两架构二十试皆过,详结构控制。后续时钟与轮行之进展,见双任务调度。
增非阻塞读字节,双架构二十四试皆过,详控制台输入。
今增客故障独退与退出码之问,两机一三八试俱成,详故障隔离,并载避旧编译缓存误验之法。
今增阻塞待客与退出唤醒,两架构一四八试俱成,详阻塞等待。
今增有权止客之术,两架构一五四试俱成,详主动终止,动态创建及回收未毕。
今增行中复制任务,两机一六〇试俱成,详运行时创建。今单槽静态池,动态加载及资源复用未成。
今固定池之生、待、止、收与再用皆通,两机一七二试成,详任务回收。通用多客分配、通信、动态加载、命令壳及持久文件犹待。
今增受所属与世次句柄约束之双向信函,两机一八〇试成,详任务通信。接收暂不阻塞,客态服务所需犹续进。
今待信、唤醒与彼止之处置皆通,两机一九二试成,详阻塞通信。通用调度、长字节与客态服务犹续进。
今造镜像默认常规运行,省方式或言“运行”皆可;旧正常、隔离仍守验收之义。详常规运行,两机二一〇试成。非谓完整高级豫言及 WasmGC 已能行。 今设备地址隔离已及用户线性区,首末、上界、只读与用户可见性皆验,两机共二六二试成。详用户设备内存。默认用户命令壳可交互治任务;虚拟磁盘驱动、文件持久化、动态执行器与 WasmGC 尚未成。 今接用户设备寄存器与“设备驱动”造镜方式,两机二六八试成,详用户设备寄存器。核主初置与授页,用户可协商特性、定队列;磁盘传输、退出清理及文件持久化尚待续作。 今用户态虚拟磁盘可读写、刷新,另启模拟器而数据仍在;两机二八〇试成,详用户磁盘读写。文件目录、命令壳文件术及设备服务分进程,犹待续作。 用户文件系统提交日志已验复启、缺尾、坏记与满盘,两机二九四试成,详文件系统提交日志。目录、文件名、删除、空间回收与命令壳文件术犹未成。 今用户文件目录可建、寻、枚举、替换、分段读与删,复启仍守柄之世次,两机三〇八试成。详用户文件目录。命令壳文件术、独立文件服务与日志盘占回收犹待作。 默认用户壳今兼文件、目录、路径及显式格式化,旧任务与输入术皆存,两机三一四试成。详命令壳文件操作。日志盘占回收、独立文件服务、动态加载与 WasmGC 犹待完成。 设备主自然毕、显式退出、陷阱及硬件缺页,今皆由核夺权、复位而清设备映射;子毕不夺父权。两机三二六试成,详设备退出清理。随机在途压力、通用资源池、盘占回收、动态加载与 WasmGC 犹待完成。
客体取字及三十二位变长数之读,已验两架构,诸试共三百二十八项皆成;复以独立网页汇编执行器验其模块并行其试。详客体取字。此仅载入之基,未入默认命令壳;模块全验、动态执行与垃圾收集尚待续成。
客体模块之头、段序、段界、名字与选段之限,皆验于两架构,诸试共三百三十项而成。详客体模块分段。录目仅知段址;段内全验、指令与实例化待续,未可载行外来程序。
客体整数函数之目,今验类型、导入、定义、局部、导出与启动签名,诸试共三百三十二项而成。详客体函数之目。代码全验与其余资源之读待续,录目成不授执行。
客体内存、全局、数据段之读与独立工作区初置,皆验两架构,诸试共三百三十四项而成。详客体资源初置。先遍验主动段,乃复制其字;尚不行函数,全验、实例化与动态执行待续。
客体整数函数体今可解而录指令,验形与立即数,回填条件出口,诸试共三百三十六项而成。详客体解指令。操作数栈之验与执行待续,解成不授行。
客体整数函数之操作数与控制栈皆验两架构,诸试共三百三十八项而成。详客体栈之验。四十四例与标准验证同;执行、运行陷阱、模块全验与动态运行待续。
用户态整数解释器今实行标准模块之控制、算术与调用,求和、阶乘皆客体自算,诸试共三百四十项而成。详客体整数之行。内存令、导入、命令壳载行、跨模块互调与垃圾收集待续。
用户态解释器今可行内存读写、增长、复制、填充、段初置与弃,诸试共三百四十二项而成。详客体内存令。回绕、空界与失败不半写皆验;导入、命令壳载行、链接与垃圾收集待续。
客体解释器今连定平台之术,按名寻导出,启动一度,并受默认空表;独立 C 模块之原字实跑,四次回调皆成,诸试共三百四十八项。详客体导入与启动。命令壳载行、通用互连、WASI、间接调用与垃圾收集待续。
默认用户态壳今可自盘载行模块为子,候其归、终其行、示其码;复启仍可载,独立 C 模块亦成。子行时父仍可读写。诸试三百五十二项,四默认镜像已新,详命令壳载行。通用任务内存池、互连、WASI、间接调用、磁盘空间回收与垃圾收集待续。
二〇二六年九月二十五日:独立宽除之函使臂之命令壳码逾一兆之限,凡以文件命令壳为基之试皆将败。臂之常量装今唯高十六位非零方发 MOVK,文件命令壳减约七万字节,余地复正;新设代码量诊断。豫可随时核两架构之余。两架构无外部模块共三百六十项皆成;带外部模块之三百六十八项,行时见父子二任务同写串口而字节交错之间歇败,详臂常量装载。
控制台之出,今由内核以行蓄之:每任务于内核私页蓄一行,遇换行、缓满、读入、任务退出或被终止,乃一并书于串口,一行不复为他任务之字所断。二任务各书三千行之 控制台行原子 景及 --只验 名 之选皆已入验证器,两架构共三百六十二试皆成,带外部模块之三百七十试连成,详控制台以行为单。
二〇二六年九月二十五日:降之后端改以寄存器为栈:虚拟栈项居于寄存器,常量与比较并于后令,入函一并核调用栈。ARM64 命令壳自九百七十八千字节减至十六万二千九百字节,AMD64 自七十九万八千八百七十三减至十八万四千,预算得宽,可续增执行器之能;两机共三百六十二项(并外部模块三百七十项)QEMU 之验悉过。详寄存器降级。
二〇二六年九月二十五日:内核增内存块之管:ARM64、AMD64 各有三十二块、每块二兆字节之物理池,服务二二 内存块(n) 为任务按需增块,服务二三返块数;memory.grow 逾八页,则迁线性内存于动态块而续增,任务毕、败、被终止皆归还,复制任务尽复其块,池尽则干净而败。增四景,两机共三百七十八项(并外部模块)QEMU 之验悉过。详内存块管理。
二〇二六年九月二十八日:寄存器之降析出目标之述(库/裸机后端/降级目标。豫:操作系统 × 指令之集)。入口、导入之桩、内存增长之助与代码之始址随目标而变,函数之降唯依指令之集;裸机目标所生之镜像与改前逐字节同。新增 Linux 目标(路二):与裸机同一定址之布,入口移栈于用户域之顶、须则 mmap 动态之区、终以 exit_group;导入之模块名 Linux,依入口之表(read、write、exit_group)生系统调用之桩,址类之参加线性内存之基。命令之器 yy原生生成 臂六十四|兼容六十四 输入.wasm 输出(此包 原生生成 之入口)径书静态 ELF64;样例原生你好于 Linux 之 arm64 与 x86-64 书“你好”、回显标准入而以退出码七终。
二〇二六年九月二十八日:新增 macOS 目标(路二)。arm64 之 macOS 唯行位置无关之程序,故降级增“址式”:裸机与 Linux 用绝对之址;macOS 以名义之址皆书为“全局基址寄存器 x25 加偏移”,入口以 adr 取代码之始,加定之锚距而得 x25(数据段恒居映像之始后六十四兆字节,代码之长不改其距)。苹果与视窗之 ARM64 皆保留 x18,故 ARM64 线性内存字节数之寄存器统改为 x15(ARM64 裸机之镜像因之而变;AMD64 之镜像逐字节不变;普通豫言验证之打印、底层搬运、回收压力三项,二构于 QEMU 皆通)。macOS 之导入经 dyld 所绑之槽呼 libSystem,导入之桩存 x15 与 x30,返负一则经 ___error 化为负 errno。yy原生生成 苹果 臂六十四 输入.wasm 输出 书带特设签名之 Mach-O;样例 原生你好 之 苹果入口 于本机书“你好”、回显标准入而以退出码七终。
二〇二六年九月二十八日:执行器 客体二号 原生行于 Linux(路二,解释而行)。降级增目标之内建导入 导入:目标:平台号(绑为常量:裸机一、Linux 二、macOS 三),他目标之导入降为陷阱之桩(Linux 用 brk #0、ud2);Linux 入口之表增至四十系统调用(文件、时钟、随机、管道、套接字、进程等),x86-64 系统调用之桩受第五、六参(自传参暂存取入 r8、r9,先存 r9),参之类增“有符号整数”(如 lseek 之偏移)。执行器依平台号择其实:林启动 自 /proc/self 书程序名、参数与环境,林底层 乃底层接口四十五函数之 Linux 后端,林文件原语 使 GC 程序之文件原语经底层接口访宿主之文件系统。yy原生生成 Linux 架构 执行器.wasm 输出 客体.wasm 嵌客体于执行器成独立之可执行文件;yy原生一致性 [--经 docker](此包 原生一致性 之入口)于二架构之 Linux 行七普通探针与二文件探针,与裸机之验所用参照之出逐字相校:十八项皆一致。详见客体二号。
二〇二六年九月二十八日:同一执行器亦原生行于 macOS arm64:macOS 入口之表扩为 libSystem 函数三十,导入之桩受有符号之参与可变之参(依 Apple ARM64 之约置于栈,如 openat 之权限、fcntl 之第三参、ioctl 之址),导入之槽唯为“苹果”模块之导入绑符号;执行器新增 苹系统、苹启动(以 sysctl 取参数与环境)、苹底层(四十五函数之 macOS 后端)与 原生系统、原生底层 二分派之模块。yy原生一致性 --系统 苹果 于本机行九探针,皆与裸机参照之出逐字一致。
二〇二六年九月二十九日:yy原生一致性 支持 --只验 名,造程序前唯择名含所授文之探针;无合者报错而止。文件二赖文件一所书之卷,可用 --只验 盘-文件 并择二项;macOS ARM64 上二项皆过。