整理 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

前几天,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

然后就可以加载 Winix 了:

编译和调试

  • 如何编译

编译之前,首先要在 Linux / WSL 中通过 sudo apt-get install xutils-dev gcc 命令行进行安装。

克隆和编译:

git clone https://github.com/halfer53/winix.git
cd winix
export PATH=`pwd`/tools/bin:$PATH
make
  • 调试技巧

调试 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:哈哈,我喜欢你对这个项目的描述,听起来比我的更有希望。

参考链接:

  • https://github.com/halfer53/winix

  • https://news.ycombinator.com/item?id=27647079

开发者必备的知识图谱来啦!60+专家,13个技术领域,CSDN 《IT 人才成长路线图》重磅来袭!直接扫码或微信搜索「CSDN」公众号,后台回复关键词「路线图」,即可获取完整路线图!

“我花了 5 年时间编写自己的操作系统!”相关推荐

  1. 我花了一年时间来学机器学习

    我花了一年时间来学机器学习 为了把大家从越来越多的技术水文中拯救出来,"大公司技术博客"将良心推送国内外大公司的优质干货文,如Facebook, Google, Medium, G ...

  2. 花了几天时间,总结了一份Python工程师的职业成长路径图

    近几年,Python 的受欢迎程度可谓是扶摇直上,加入 Python 学习大营的人越来越多.不过,随之而来的是,竞争越来越激烈.迷茫的声音也越来越多,我经常看到粉丝在后台留言: Python程序员都有 ...

  3. ci/cd自动化测试_自动化CI / CD并花费更多时间编写代码

    ci/cd自动化测试 This article was sponsored by Microsoft Visual Studio App Center. Thank you for supportin ...

  4. 花了一年时间完成的 在线G代码编辑,加工系统 G-Code Editor V1.0

    G代码是数控程序中的加工指令.一般都称为G指令.可以直接用来驱动机床,各种控制系统.是一种数控行业标准.传统的G代码编写以及编辑无法在线编辑,也不能实时看到g代码编辑的最后加工路径已经不能直接对编辑的 ...

  5. 曾经花上数十小时编写过的QQ农场辅助精灵

    QQ农场辅助精灵DotNet(c#)版是2009年8月份自已编写的,开发工具是vs2005,语言c#,花了数十小时编写与调试,也算是检验编写辅助外挂类程序的能力. 编写基于http协议的辅助外挂类程序 ...

  6. 其实跑步花不了多少时间

    其实走路也花不了多少时间 其实喝水也花不了多少时间 但是 这个东西对于你的健康的意义 十分的重要 要增强时间管理的意识和能力

  7. 最感叹的莫过于一见如故,最悲伤的莫过于再见陌路。最深的孤独,是你明知道自己的渴望,却得对它装聋作哑。最美的你不是生如夏花,而是在时间的长河里,波澜不惊。...

    最感叹的莫过于一见如故,最悲伤的莫过于再见陌路.最深的孤独,是你明知道自己的渴望,却得对它装聋作哑.最美的你不是生如夏花,而是在时间的长河里,波澜不惊. 转载于:https://www.cnblogs ...

  8. 那些没有兴趣花必要的C++时间

    那些没有兴趣花必要的C++时间去掌握所有按键和摇杆的玩家跟那些愿意去做的并不一样.我们分别称这两种人为玩家和休闲类玩家.第一次体验sony ps move控制器之后,我就尝试将它和kinect对比,并 ...

  9. 模板能够让我们花更少的时间,得到更多的东西

    牛顿说过,如果我比别人看得更远,那是因为我站在巨人的肩上. 这句话套用在xmind上,其中的巨人,就是各类xmind模板. 很容易理解,如果你要准备今年的军训工作,你一般会把去年的方案找出来参考,去年 ...

最新文章

  1. 利用Traefik+Docker构建可弹性扩展的微服务或服务集群
  2. java写soap客户端_Java:简单的SOAP客户端
  3. JAVA取钱多线程实验_JAVA多线程----用--取钱问题2
  4. 赠书 | 什么是 Knative?
  5. 【SpringMVC学习07】SpringMVC中的统一异常处理
  6. 无法访问机械硬盘提示执行页内操作时的错误的文件恢复办法
  7. 跑步与读书都废掉了...工作目前也在换新的.
  8. 【排序算法】希尔排序-常规排序
  9. 随笔小杂记(一)——更改整个文件夹内的命名
  10. UU加速器——学术资源加速
  11. vue 调用虚拟键盘
  12. python for循环写法_python中多重循环的写法
  13. 海底捞:服务喧宾夺主,盈利不见起色
  14. 失落世界服务器国庆宝箱位置,烟雨江湖国庆宝箱在哪里 烟雨江湖中秋宝箱位置坐标大全...
  15. 【数据分析】——分析方法
  16. 【ADRC】扩张状态观测器(ESO)
  17. 夕阳红旅游团需求规格说明书
  18. 一本通 1283:登山
  19. access h3c交换机光口_H3C交换机常用配置命令转载
  20. 【开关电源1】反激开关电源问题描述和解决方法

热门文章

  1. ViewPager——PagerTitleStrip和PagerTabStrip
  2. 生活大爆炸之何为光速
  3. JadClipse反编译工具在Eclipse中的安装
  4. 我的WCF4 Rest Service及Entity Framework with POCO之旅(三)——用Entity Framework和POCO Template实现数据模型及存储...
  5. Druid的Segment Balance及其代价计算函数分析
  6. img标签的before,after伪类
  7. html实现返回上一页的几种方法(javaScript:history.go(-1);)
  8. mysql完全卸载大全
  9. open vswitch常用操作
  10. 怎么查电脑系统版本_重装系统PE内找不到硬盘怎么办?只需要这些设置即可…...