教你设计一个简单的系统 自己写操作系统难吗


先来介绍一下我自己 。我是Intel 傲腾项目开发者之一 , 也是《深度探索嵌入式操作系统》这本书的作者 。
我曾经为Intel做过内核层面的开发工作 , 也对Linux、BSD、SunOS等开源操作系统 , 还有Windows的NT内核很熟悉 。这十几年来 , 我一直专注于操作系统内核研发 。
LMOS(基于x86平台支持多进程、多CPU、虚拟化等技术的全64位操作系统内核)跟LMOSEM(基于ARM处理器平台的嵌入式操作系统内核)是我独立开发的两套全新的操作系统内核 , 它们的代码规模都达到了数十万行 , 并且现在仍在更新 。
当时是基于兴趣和学习的目的开始了这两套操作系统 , 在这个过程中 , 我遇到了各种各样的技术问题 , 解决了诸多疑难杂症 , 总结了大量的开发操作系统的方法和经验 。非常希望能在这个专栏与你一起交流 。
每个工程师都有必要学好操作系统吗?
经常会有同学问我这样一些问题:我是一个做应用层开发的工程师 , 有必要学习操作系统吗?我的日常工作中 , 好像用不到什么深奥的操作系统内核知识 , 而且大学时已经学过了操作系统课程 , 还有必要再学吗?
对于这些问题 , 我的答案当然是“有必要” 。至于理由么 , 请听我慢慢为你道来 。
你是否也跟我一样 , 曾经在一个数千万行代码的大项目中茫然失措?一次次徘徊在内存为什么会泄漏、服务进程为什么会dang掉、文件为什么打不开等一系列“基础”问题的漩涡中?
你是否惊叹于Nginx的高并发性?是不是感觉Golang的垃圾回收器真的很垃圾?除了这样的感叹 , 你也许还好奇过这样一些问题:MySQL的I/O性能还能不能再提升?网络服务为什么会掉线?Redis中经典的Reactor设计模式靠什么技术支撑?Node.js 的 I/O 模型长什么模样……
如果你也追问过上面的这些问题 , 那这会儿我也差不多可以给充满求知欲的你指一条“明路”了 。这些都将在后面的学习中 , 找到答案 。
为什么说操作系统很重要?
首先我们都知道 , 操作系统是所有软件的基础 , 所有上层软件都要依赖于操作系统提供的各种机制 , 才能运行 。
而我在工作中也认识了很多技术大牛 , 根据我的观察 , 他们的基本功往往十分扎实 , 这对他们的架构视野、技术成长都十分有帮助 。
如果你是后端工程师 , 在做高性能服务端编程的时候 , 内存、进程、线程、I/O相关的知识就会经常用到 。还有 , 在做一些前端层面的性能调优时 , 操作系统相关的一些知识更是必不可少 。
除了Web开发 , 做高性能计算超级计算机的时候 , 操作系统内核相关的开发能力也至关重要 。其实 , 即使单纯的操作系统内核相关的开发能力 , 对于工程师来说也是绕不过的基本功 。

推荐阅读