关于操作系统:从零开始写-OS-内核-序篇

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

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

我的项目预期

网上也有很多相似的很好的系列教程,我也心愿我的这个系列可能略微带来些不一样的中央,你能够大略地有个心理预期:

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

常识筹备

为了读懂这个系列,你须要有足够的专业知识筹备,总的来说就是大学操作系统专业课的所有理论知识,不要求精通,但最起码能理解,须要用到的时候晓得怎么去查。这里举荐《深刻了解计算机系统》这本书,如果你的程度曾经笼罩了这本书,那么能够持续了。

再具体一些,心愿你的实践和实际能力能够笼罩以下这些:

  • 扎实的 C 语言能力;
  • 还够用的 x86 汇编能力(能够在我的项目中进步);
  • 纯熟应用 Linux 零碎,以及 Linux 下的零碎编程教训;
  • gcc,Makefile 等工具的应用;
  • 对编译,链接,执行代码的原理有足够的意识;
  • 硬件以及 OS 对内存的治理原理,尤其是虚拟内存;
  • 程序在操作系统中的加载,执行过程,内存的应用和散布;
  • 中断的概念和解决;
  • 过程,线程的概念原理;
  • 多线程编程,同步与锁的概念;

是不是看上去有点多……这确实是对你的根本要求,但还是那句话,不要求纯熟精通,只须要能”理解“,你能够只有一个含糊的实践概念,单薄的实际根底,能够在我的项目中进步这些能力,这其实也是这个我的项目的终极目标所在。

举荐书目和教程

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

JamesM’s kernel development tutorials

这个系列是十分举荐的,作者的重点把握明确,组织构造和代码十分清晰。但这个系列我的项目规模偏小,没有 boot loader 和内核成形后的线程,过程以及零碎调用方面的内容,整体比拟偏 Demo 和教学性质,很适宜初学。

操作系统假相还原

这也是很举荐的一本书,与下面的系列相同,这本书从头到尾残缺地实现了一个性能比较完善的内核,规模比拟大,而且作者的解说很粗疏,不厌其烦,甚至我都感觉有些啰嗦,比拟适宜在理论我的项目开发中作为参考和实践手册查问,而不适宜从头到尾通读。

我的这个系列我的项目其实参考并综合了以上两者,取了折中,把规模和难度管制在了我认为比拟正当的水平。

我的项目目录

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

  • 从 BIOS 开始启动到实模式
  • 进入保护模式
  • 加载并进入内核
  • 显示打印
  • GDT 和 IDT,中断解决
  • 关上虚拟内存
  • 实现堆和 malloc
  • 创立第一个内核线程
  • 多线程运行与切换
  • 进入用户态
  • 过程的实现,加载可执行程序
  • 零碎调用的实现

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据