从头开始开发多线程内核!

Developing a Multithreaded Kernel From Scratch!

使用交互式 shell 构建多任务操作系统和内核!

你将学到什么

  • 如何从头开始创建内核
  • 如何创建多任务内核
  • 如何处理操作系统中的恶意或有问题的程序。如果他们行为不端,就终止他们。
  • 内存在计算机中的工作原理
  • 构成现代计算的内核态、用户态和保护环之间的区别
  • Linux 内核本身使用的内核设计模式
  • 您将了解有关虚拟内存以及如何将虚拟地址映射到物理地址的所有信息
  • 您将学习如何让内核理解进程和任务
  • 您将学习如何加载 ELF 文件
  • 您将学习如何调试反汇编的机器代码
  • 您将学习如何使用 GDB 在模拟器中调试内核。

要求

  • 你必须了解 C 编程语言
  • 掌握一些汇编语言的基本知识是明智的
  • 您应该有一个 Linux 操作系统,可以从互联网上免费安装(我们在本课程中使用 Ubuntu)

描述

本课程旨在教您如何从头开始创建自己的多任务操作系统和内核。假设您没有内核编程经验,并且您是从头开始学习的。

实模式开发

实模式是所有 Intel 处理器中的传统模式,它会导致处理器以传统状态启动,其性能就像旧的 8086 Intel 处理器一样。

在课程的“实模式开发”部分,我们首先了解启动过程和内存的工作原理,然后继续创建我们自己的启动加载程序,并在真机上进行测试!该引导加载程序将输出一个简单的“Hello World!” 消息到屏幕上,我们用纯汇编语言编写这个引导加载程序。

在本节中,我们还从硬盘读取一个扇区(512 字节),并了解有关实模式中断以及如何创建中断的所有信息。

本节让您对内核开发有一个很好的体验,但不会给您带来过多的信息。您将学到有关传统处理器的基础知识和足够的知识,以便能够在本课程中进一步进行更现代的内核开发。

保护模式开发

在本节中,我们创建一个具有 FAT16 文件系统的 32 位多任务内核。我们的内核将使用英特尔内置的内存保护和安全机制,使我们能够指示处理器保护我们的内核并防止用户程序损坏它。

本节非常深入,向您介绍了有关分页和虚拟内存的所有内容。我们利用Intel处理器中巧妙的指令来允许所有进程共享相同的内存地址,这就是所谓的内存虚拟化。我们将内存地址映射到不同的物理内存地址,以造成每个正在运行的进程都加载在同一地址的错觉。这是内核开发中非常常见的技术,也是交换文件的工作方式(这些文件用于在可用 RAM 耗尽时进行补偿)。

我们创建了自己的虚拟文件系统层,该层使用类似于 Linux 内核的设计。将教给您的这个巧妙的抽象概念受到了讲师过去编写 Linux 内核驱动程序的知识的启发。

您将了解 FAT16 文件系统的设计以及 FAT16 文件系统如何分解为簇以及它们如何链接在一起。然后我们实现我们自己的 FAT16 文件系统驱动程序,让文件诞生!

我们实现任务和进程的功能并编写我们自己的键盘驱动程序。

在本课程中,您还将了解内存管理的工作原理,我们实现“malloc”和“free”函数,创建我们自己的堆,旨在跟踪正在使用的内存。内存管理在任何操作系统和内核中都是必不可少的。

我们不要忘记,我们甚至创建了一个ELF文件加载器,我们将把所有操作系统程序编译成ELF文件,并允许加载二进制程序或ELF程序。ELF 文件包含大量描述我们的程序的信息,例如我们的程序应加载到内存中的位置以及程序的不同部分。

在本课程结束时,您将拥有一个功能齐全的 32 位多任务内核,它可以同时运行许多进程和任务。您将拥有一个我们也可以使用的工作 shell。

汇编语言奖金

这是一个额外的部分,旨在让您在本课程中对汇编语言有点困难时提高您的汇编技能。但是,建议您具有汇编语言经验来学习本课程,我们确实使用它并且它很重要。尽管如此,如果您想在没有汇编经验的情况下尝试学习本课程,那么本节将帮助您指明正确的方向,以便您能够将所学到的知识应用到内核中。

由在工作场所专业创建 Linux 内核模块的专家授课。15 年软件工程师经验

本课程适合谁:

  • 想要学习如何创建内核的初级内核开发人员
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。