日英文

It's true that we don't know what we've got until we lose it, but it's also true that we don't know what we've been missing until it arrives. 

的确只有当我们失去时,才知道曾经拥有的是什么。同样的,只有当我们拥有了才知道从前失去了什么。

 

     

   正文   

前几天,Hacker News 上有一则帖子登上了 TOP 榜,引起了不少人的关注:我花了 5 年时间编写自己的操作系统。

“5年”、“自己的操作系统”,这两点显然是吸引人们点击查看的主要原因:帖主凭一己之力,用 5 年时间写出来的操作系统会是怎样的?

好奇心被勾起,于是便打开了这位帖主提供的 GitHub 地址(https://github.com/halfer53/winix)。刚看到这个操作系统的简述,许多人就感到意外了:帖主开发的 Winix 系统主要是受到了他在大学时所学习的 Minix1 操作系统的启发——起初 Linus Torvalds 也是在 Minix 操作平台上建立的 Linux。
据了解,这位帖主 @halfer53 是一位来自新西兰的开发者,而他在业余时间开发的 Winix 是用于 Waikato RISC 架构微处理器(WRAMP)的 UNIX 风格操作系统,也是一个兼顾可用性和性能的混合内核。

功能及演示
Winix 虽然仅由 @halfer53 一人开发,但系统功能意外地还挺齐全:

内核内存管理:虚拟内存、页面映射
进程管理:内核线程、进程创建
异常控制和中断处理程序
支持大部分 POSIX api 的内存文件系统
支持多个管道和重定向的 Bourne shell
用户内存管理:malloc() free()
ucontext.h 支持的用户协程
Stacktrace (堆栈跟踪)转储,段错误分析
Winix 还支持许多命令(均已提供源码):


@halfer53 演示了前两个命令的运行结果:

(玩贪吃蛇)
(在 bash 中使用管道)
如何运行
关于该系统要如何运行,@halfer53 也给出了具体步骤:

1、下载最新的 Rexsimulator:https://github.com/halfer53/rexsimulator/releases(注意:mono 需要在 Linux 环境下运行)

2、下载最新的 WINIX 二进制文件 winix.srec:https://github.com/halfer53/winix/releases
3、运行 Rexsimulator.exe

4、点击 Quick Load,选择 winix.srec

搜索公众号Linux中文社区后台回复“命令行”,获取一份惊喜礼包。
然后就可以加载 Winix 了:
编译和调试
如何编译
编译之前,首先要在 Linux / WSL 中通过 sudo apt-get install xutils-dev gcc 命令行进行安装。克隆和编译:git clone https://github.com/halfer53/winix.gitcd winixexport PATH=`pwd`/tools/bin:$PATHmake调试技巧
调试 Makefile:与 linux kbuild 相似,Winix 支持 verbose 选项,你可以通过将 verbose 设置为 1 来调试 Makefile。
make V=1调试内核:kprintf() 将是你的朋友;在 bash 中输入 trace 以查找串口 2 中的所有系统调用。以下是 Winix 支持的系统调用:


网友:前途可期
@halfer53 开发的 Winix 也引起了众多网友的热议:

评论 1:Winix 以 RISC 架构为目标,那么随着 RISC-V 的飞速发展,偏向 RISC 的操作系统肯定会为平台提供优势和优势,就像 Linux 在 x86-32 和 x86-64 开始发展时所具备的优势一样。

评论 2:我在 90 年代初做了同样的事情,而我认为这是我迄今为止从中学到最多的项目。虽然我从未发布过它,因为我认为它的时代已经过去了,但它的确是一个有趣的练习。调试此类开发的早期阶段非常困难,尤其是当你在裸机上而不是在 VM 上进行调试时。

评论 3:哈哈,我喜欢你对这个项目的描述,听起来比我的更有希望。