/OrzOs-1

Hobby x86 operating system

Primary LanguageC

OrzOs是Wang Hoi业余时间编写的一个64位操作系统。

动机:
    大二迷上了Linux,最初安装各种发行版不亦乐乎。
    后来迷上了KDE,看到KDE的代码感觉编写得太好了于是一发不可收拾,各种折腾,为了弥补Konqueror、KWrite和Amarok的中文乱码问题, 把Firefox浏览器的编码自动识别部分抽取移植到了KDE, 封装成KEncodingProber弄进kdelibs,后来嫌fcitx太丑了又写了个KIMPanel,但是断断续续,我又不想考研,还有可恶的魔兽世界。
    折腾Linux桌面多了,也学习了操作系统课程,对内核也越来越感兴趣,于是尝试着去读Linux代码,发现完全看不懂。后来去学习了Linux 0.11和Minix 2,然后发现了osdev网站这个新大陆,于是就有了这个OrzOs。

发展:
    OrzOs最初是基于JamesM的一套教程,我在大三暑假花了2周多才搞懂敲进来,可以处理键盘中断和显示Hello World。
    之后各种缝缝补补,添加新特性,直到有一天完全变成一团乱麻。。。
    再后来各种迷茫,后来阅读了一些基本的软件工程书籍,发现编写操作系统的最大难点既不在于什么内存管理,进程调度,VFS层等等算法;也不在于8042, pci, ide, vbe等硬件接口与驱动。而在于怎么把这些组合起来。Brooks的观点现在看来真是太犀利了。
    于是决定重写,就是现在的OrzOs。

特点:
    嗯。。虽然很丑陋,既不简洁也不强大。但是速度还能接受,有不少有趣特性,比较酷。
    实现了个TLSF内存分配器,感觉比Buddy+Slab简单多了,性能分配/释放最坏也是O(1)的。
    为了在long mode下改变屏幕分辨率,内核包含了一个x86emu虚拟机,可以直接在64位long mode下虚拟执行显卡ROM里面的实模式代码。
    支持了单线程的异步IO和IPC,用户空间进程也可以单线程同时读键盘,鼠标和处理IPC消息。
    用户空间移植了个c运行库newlib,然后移植了libpng, freetype, cairo。
    用户空间支持了浮点和SSE指令。
    实现了C/S的用户空间GUI框架,创建,拖动窗口神马的。支持显示png图片,最基本的unicode和用truetype字体显示中文。在过程中也学到很多东西,比较满足啦。

目标:
    就是我一个人玩着比较有趣,自己向自己炫耀技术额。平时银子不多但工作轻松,聊以自娱~~

源码:
    https://github.com/wanghoi/orzos

Email:
    wanghoi#at#126.com