c 您所在的位置:网站首页 内核开发教程 c

c

2023-05-06 00:06| 来源: 网络整理| 查看: 265

这是一个很早就想要做的系列,从零开始写一个小的操作系统,算是致敬以前学校里做的 OS 项目,也是希望能帮助到对这一块感兴趣的同学。

操作系统是计算机专业的核心学科,但我想即使是很多大学的 CS 本科操作系统专业课,也未必会设置这样规模和难度的项目。我是在 CMU 读研时修了它们的本科 OS 课程 15-410,这是课程的最大一个项目作业。对于很多计算机专业的同学,以及非科班转计算机的同学,尝试去做,哪怕是读懂这样一个项目,我想都是大有益处的。

项目预期

网上也有很多类似的很好的系列教程,我也希望我的这个系列能够稍微带来些不一样的地方,你可以大概地有个心理预期:

这是一个偏实践+原理阐释的系列文章,我会尽可能多地用图片,而不是文字;这不是一个手把手教学的系列,有些动手的地方需要你自己实践解决,当然我会给出我的 Git 项目地址供你参考;我不会过多地贴代码逐行解释,也不会过多地解释一些课本或者手册上的专业知识(我认为你应该知道,或者有能力自学/查);知识准备

为了读懂这个系列,你需要有足够的专业知识准备,总的来说就是大学操作系统专业课的所有理论知识,不要求精通,但最起码能了解,需要用到的时候知道怎么去查。这里推荐《深入理解计算机系统》这本书,如果你的水平已经覆盖了这本书,那么可以继续了。

再具体一些,希望你的理论和实践能力可以覆盖以下这些:

扎实的 C 语言能力;还够用的 x86 汇编能力(可以在项目中提高);熟练使用 Linux 系统,以及 Linux 下的系统编程经验;gcc,Makefile 等工具的使用;对编译,链接,执行代码的原理有足够的认识;硬件以及 OS 对内存的管理原理,尤其是虚拟内存;程序在操作系统中的加载,执行过程,内存的使用和分布;中断的概念和处理;进程,线程的概念原理;多线程编程,同步与锁的概念;

是不是看上去有点多......这的确是对你的基本要求,但还是那句话,不要求熟练精通,只需要能”了解“,你可以只有一个模糊的理论概念,薄弱的实践基础,可以在项目中提高这些能力,这其实也是这个项目的终极目的所在。

推荐书目和教程

仅仅看我这个系列可能未必足够,也不一定对每个人适合,所以我推荐一些我看过的书和教程:

JamesM's kernel development tutorials

这个系列是非常推荐的,作者的重点把握明确,组织结构和代码非常清晰。但这个系列项目规模偏小,没有 boot loader 和内核成形后的线程,进程以及系统调用方面的内容,整体比较偏 Demo 和教学性质,很适合初学。

操作系统真相还原

这也是比较推荐的一本书,与上面的系列相反,这本书从头到尾完整地实现了一个功能比较完善的内核,规模比较大,而且作者的讲解很细致,不厌其烦,甚至我都觉得有些啰嗦,比较适合在实际项目开发中作为参考和理论手册查询,而不适合从头到尾通读。

我的这个系列项目其实参考并综合了以上两者,取了折中,把规模和难度控制在了我认为比较合理的程度。

项目目录

在开始系列之前,我们首先列一下项目的目录清单,后面把这些坑一个个填上。

序篇准备工作BIOS 启动到实模式GDT 与保护模式虚拟内存初探加载并进入 kernel显示与打印全局描述符表 GDT中断处理虚拟内存完善实现堆和 malloc第一个 kernel 线程多线程切换锁与多线程同步进入用户态进程的实现系统调用简单的文件系统加载可执行程序键盘驱动运行 shell

内容还是比较多的,我们一步一步来,准备出发吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有