一、ucore操作系统介绍
操作系统作为一个基础系统软件,对下控制硬件(cpu、内存、磁盘网卡等外设),屏蔽了底层复杂多样的硬件差异;对上则提供封装良好的应用程序接口,简化应用程序开发者的使用难度。站在应用程序开发人员的角度来看,日常开发中常见的各种关于并发、I/O、程序通信的问题等都和操作系统相关,因此一定程度上了解底层的操作系统工作原理是有必要的。
另一方面,由于操作系统功能的复杂性,总体设计一般具有良好的模块化架构;作为一项基础服务,操作系统对性能和效率要求很高。底层将使用大量关于数据结构和算法的知识。如果我们仔细研究一个操作系统的源代码,我们不仅可以学习到设计复杂软件的架构知识,还可以看到部分理论的数据结构和算法知识是如何应用到实际场景中的。更深入地了解不同数据结构和算法在特定场景下的性能差异。
[En]
On the other hand, due to the complexity of the function of the operating system, the overall design generally has a good modular architecture; as a basic service, the operating system requires high performance and efficiency. The underlying layer will use a lot of knowledge about data structures and algorithms. If we carefully study the source code of an operating system, we can not only learn the architecture knowledge of designing a complex software, but also see how the data structure and algorithm knowledge of partial theory is applied to the actual scene. a deeper understanding of the performance differences of different data structures and algorithms in specific scenarios.
然而对于初学者而言,学习操作系统并不是一件轻松的事情。操作系统理论的学习过于抽象,往往看了就忘。而主流商业操作系统动辄十万、百万级的内核源码也令想要一窥究竟的普通人望而却步。对于一个已经迭代发展相当一段时间的系统,个人认为好的学习方法不是从最新的,相对复杂的版本开始了解,而是从最初始的,较为简单的版本起步,研究其是如何一步步优化、迭代至如今的这个版本。经过无数人迭代、优化的最新版本linux内核固然无比复杂,但90年代早期发布的版本却简单太多,更容易理解和学习,在掌握了相对简单的早期版本后,能降低后续学习更复杂的版本的难度。
对于操作系统的学习而言,有不少大牛都出版了关于如何实现一个简易版操作系统的书籍,例如 《Orange'S:一个操作系统的实现》、 《30天自制操作系统》等等。不少大学也开始对操作系统的课程进行改革,不再是枯燥的灌输理论知识点,而是尝试着让学生亲自动手实现一个demo操作系统,加深对知识内容的理解。其中麻省理工大学的公开课 MIT 6.828是出品较早,久负盛名的。
本系列博客的主角,是由清华大学出品的操作系统网上公开课,其中的实验课程就需要学生通过一个个的迭代实验,逐步实现一个名为 ucore的操作系统。其实验指导书上对ucore os的评价是 "麻雀虽小,五脏俱全",非常适合操作系统初学者进行学习。
ucore项目github仓库链接:https://github.com/chyyuu/os_kernel_lab(master分支)
ucore实验指导书链接:https://chyyuu.gitbooks.io/ucore_os_docs/content/
ucore公开课视频链接(学堂在线):https://www.xuetangx.com/course/THU08091000267