操作系统实战45讲

操作系统实战45讲 / 从0到1,实现自己的操作系统

彭东 网名 LMOS,Intel 傲腾项目关键开发者
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词 | 为什么要学写一个操作系统?

    操作系统内核是有核心竞争力的高技术含量软件,这能给你职业生涯的成长带来长远的帮助。

  • 编辑手记 | 升级认知,迭代自己的操作系统

    希望这个专栏成为一座灯塔,为你指路,给你带来新鲜的认知。

  • 01 | 程序的运行过程:从代码到机器运行

    今天,我将带领你从“Hello World”起,扎实基本功,探索程序如何运行。

  • 02 | 几行汇编几行C:实现一个最简单的内核

    今天我们来写一个最小的操作系统——Hello OS,先练练手、热热身,直观感受一下。

  • 03 | 黑盒之中有什么:内核结构与设计

    开发操作系统就像建房子,先要合理设计。这节课会带你了解宏内核、微内核架构,并在此基础上,带你设计出我们自己的内核。

  • 04 | 震撼的Linux全景图:业界成熟的内核架构长什么样?

    这节课我们会解析Linux、Darwin-XNU和Windows的内部组件与结构,并比较它们的架构,为后续学习做好铺垫。

  • 05 | CPU工作模式:执行程序的三种模式

    硬件中最重要的就是CPU,我们这节课就按照CPU功能升级迭代的顺序,一起探讨CPU的几种工作模式和实现方法。

  • 06 | 虚幻与真实:程序中的地址如何转换?

    这节课我会让你理解为何要引入虚拟地址,然后为你讲解虚拟地址和物理地址的关系和转换机制。

  • 07 | Cache与内存:程序放在哪儿?

    今天我们主要讲四部分内容,局部性原理、内存结构特性、Cache工作原理和x86上的应用。

  • 08 | 锁:并发操作中,解决数据同步的四种方法

    不解决数据同步,后面机器跑起来会有很多问题。所以这节课我们要学习四个重要知识点:原子变量,关中断,信号量,自旋锁。

  • 09 | 瞧一瞧Linux:Linux的自旋锁和信号量如何实现?

    今天我们一起学习Linux上实现数据同步的五大利器,包括Linux原子变量、中断控制、自旋锁、信号量以及读写锁。

  • 10 | 设置工作模式与环境(上):建立计算机

    经过前面那么多课程的准备,现在距离把我们自己操作系统跑起来是一步之遥。这节课,我们先来搭好操作系统的测试环境。

  • 11 | 设置工作模式与环境(中):建造二级引导器

    这节课,我会带你一起实现二级引导器这个关键组件。

  • 12 | 设置工作模式与环境(下):探查和收集信息

    这是设置工作模式与环境的最后一课,我们的二级引导器已经建立好了,成功从 GRUB手中接过了权柄。

  • 13 | 第一个C函数:如何实现板级初始化?

    这节课我们要让操作系统Cosmos里的第一个C函数真正跑起来,相信你可以取得这个阶段性胜利。

  • 14 | Linux初始化(上):GRUB与vmlinuz的结构

    虽然我们自己具体实现过了初始化,不过我们也不妨看看Linux的初始化流程,借鉴一下Linux开发者的玩法。

  • 15 | Linux初始化(下):从_start到第一个进程

    今天我们继续来研究Linux的初始化流程,为你讲解如何解压内核,然后讲解Linux内核第一个C函数。

  • 16 | 划分土地(上):如何划分与组织内存?

    作为计算机的实际掌权者,操作系统必须科学合理地管理好内存,应用程序才能高效稳定地运行。

  • 17 | 划分土地(中):如何实现内存页面初始化?

    这节课的重点工作是初始化内存管理数据结构,并在内存中建立它们的实例变量。

  • 18 | 划分土地(下):如何实现内存页的分配与释放?

    这节课我会带你实现分配和释放内存页面,达到内存管理的目的。

  • 19 | 土地不能浪费:如何管理内存对象?

    今天我们从malloc函数入手,思考内核怎样分配大量小块内存。

  • 20 | 土地需求扩大与保障:如何表示虚拟内存?

    操作系统要怎样实现虚拟内存呢?我们将通过两节课学习。这节课我们先进行虚拟地址空间的划分,搞定虚拟内存数据结构的设计。

  • 21 | 土地需求扩大与保障:如何分配和释放虚拟内存?

    这节课我们来实现虚拟内存的核心功能:写出分配、释放虚拟地址空间的代码,最后实现虚拟地址空间到物理地址空间的映射。

  • 22 | 瞧一瞧Linux:伙伴系统如何分配内存?

    像Linux这样的成熟操作系统,又是怎样实现内存管理的呢?今天这节课,我先带你了解伙伴系统这种内存管理技术。

  • 23 | 瞧一瞧Linux:SLAB如何分配内存?

    Linux系统中,比页更小的内存对象要怎样分配呢?这节课我们就来研究这个问题。

  • 24 | 活动的描述:到底什么是进程?

    这节课会带你用最简洁的方式了解了进程,以及学会如何建立一个进程。

  • 25 | 多个活动要安排(上):多进程如何调度?

    今天我们会在单进程的基础上扩展多进程,并在进程与进程之间进行调度。

  • 26 | 多个活动要安排(下):如何实现进程的等待与唤醒机制?

    上节课,我带你一起设计了我们Cosmos的进程调度器,今天我们一起实现进程的等待与唤醒机制。

  • 27 | 瞧一瞧Linux:Linux如何实现进程与进程调度?

    今天我们一起探索Linux如何表示进程以及如何进行多进程调度。

  • 28 | 部门分类:如何表示设备类型与设备驱动?

    操作系统通过加载驱动程序来管理和使用设备,并为此提供了一系列的机制,今天我们重点学习如何表示设备类型与驱动。

  • 29 | 部门建立:如何在内核中注册设备?

    今天我们来继续探索部门的建立,也就是设备在内核中是如何注册的。

  • 30 | 部门响应:设备如何处理内核I/O包?

    今天我将带你了解实现一个驱动程序的完整过程。

  • 31 | 瞧一瞧Linux:如何获取所有设备信息?

    这节课我们通过动手写个驱动程序体会Linux驱动相关的内容。

  • 32 | 仓库结构:如何组织文件?

    想要实现一个文件系统,先要解决三个重要问题。

  • 33 | 仓库划分:文件系统的格式化操作

    今天我们继续探索文件系统,一起实现文件系统的格式化操作。

  • 34 | 仓库管理:如何实现文件的六大基本操作?

    今天我们要给仓库增加一些操作,这些操作是文件系统的标准功能。

  • 35 | 瞧一瞧Linux:虚拟文件系统如何管理文件?

    这节课会帮你搞清楚什么是VFS,并带你动手写个迷你文件系统。

  • 36 | 从URL到网卡:如何全局观察网络数据流动?

    从输入URL到网卡的网络数据流动过程中都发生了什么事呢?

  • 37 | 从内核到应用:网络数据在内核中如何流转

    这节课,让我们来仔细研究一下网络数据是如何在内核中流转的。

  • 38 | 从单排到团战:详解操作系统的宏观网络架构

    现实世界中网络请求怎样穿过重重网络设备,实现大规模组网?

  • 39 | 瞧一瞧Linux:详解socket实现与网络编程接口

    这节课我会带你了解套接字的作用、工作原理和关键数据结构。

  • 40 | 瞧一瞧Linux:详解socket的接口实现

    这节课我们继续研究套接字在Linux内核中的实现。

  • 41 | 服务接口:如何搭建沟通桥梁?

    我们以获取时间的系统服务为例,学习如何建立一个系统服务接口。

  • 42 | 瞧一瞧Linux:如何实现系统API?

    今天我们将了解Linux系统的API架构,并实现一个自己的系统调用。

  • 43 | 虚拟机内核:KVM是什么?

    云计算、大数据等前沿技术的发展,都离不开虚拟机这项核心技术。

  • 44 | 容器:如何理解容器的实现机制?

    以Docker为蓝本分析了容器的基础功能架构,带你了解什么是容器。

  • 45 | ARM新宠:苹果的M1芯片因何而快?

    CPU工作原理和设计是怎样的,基于ARM指令集的M1芯片有什么特点?

  • 46 | AArch64体系:ARM最新编程架构模型剖析

    今天我会给你讲讲ARM的AArch64体系结构,带你扩展一下视野。

  • 大咖助场|以无法为有法,以无限为有限

    我给你说说Cosmos项目的来龙去脉,再结合我对老彭和其他很多优秀工程师的思考,跟你分享这样几个话题:个人技术成长历程上的一些学习技巧,以及怎样在复杂多变的当下基于知识迁移能力高效地解决问题。

  • 用户故事 | 成为面向“知识库”的工程师

    我自己的学习思路是,二八定律:80%的功利主义和20%的情怀主义。

  • 用户故事 | 操作系统发烧友:看不懂?因为你没动手

    作为一名操作系统“发烧友”,我是怎样跟操作系统结缘的呢?

  • 用户故事 | 技术人如何做选择,路才越走越宽?

    内卷不可怕,可怕的是不断重复自己。

  • 用户故事 | 用好动态调试,助力课程学习

    动态调试也好,汇编代码也罢,其实都是为我们分析问题和解决问题服务的。

  • 用户故事 | yiyang:我的上机实验“爬坑指南”

    完成比完美更重要,而且,如果没有完成,那完美更不可能出现!

  • 用户故事|艾同学:路虽远,行则将至

    世上没有白走的路,有的话,也许多走几遍就能发现“隐藏宝藏”。

  • 结束语 | 生活可以一地鸡毛,但操作系统却是心中的光

    我开发Cosmos是基于兴趣,是对技术的探索和追求……

  • 结课测试 |这些操作系统的问题,你都掌握了么?

    课程已经完结,我特别给你准备了一套结课测试题,帮你检验学习成果。

  • 参考答案 | 对答案,是再次学习的一个机会

    今天这期加餐,我们整理了课程里的思考题答案,一次性发布出来。供你对照参考,查漏补缺。

58讲

618 狂欢 | 课程专属口令


你将获得

  • 洞悉 OS 运行机制与架构实现
  • 强化理解 Linux 核心技术
  • 系统级别的编程技巧
  • “保姆级”代码注释及详解图

讲师介绍

彭东,网名 LMOS,Intel 傲腾项目关键开发者,《深度探索嵌入式操作系统:从零开始设计、架构和开发》作者。研究操作系统数十年,精通 Linux、BSD、SunOS 等开源操作系统内核,对 Windows 的 NT 内核也有一定研究。

曾独立开发过两套全新的操作系统内核:LMOS 和 LMOSEM。其中 LMOS 先后发布了 8 个测试版本,至今已是一个多进程、多 CPU、支持虚拟内存的全 64 位操作系统内核(x86_64 体系下),代码量达 10 万余行。LMOSEM(基于 ARM 体系)则是嵌入式操作系统的新尝试,实验了不同于 LMOS 的新架构、新代码。


课程介绍

作为计算机王国中的实际“掌舵人”,操作系统是一切法则的制定者。它掌管着硬件软件等一切资源,并负责处理多种基本事务(内存管理、资源配置、I/O 设备、网络通信等),既能维护公平正义又能杀伐决断,而我们的课程就是讲解如何实现它。


课程设计

课程中,彭东老师将多年的操作系统开发经验倾囊相授,并带你从系统级的高度分析和解决相关问题,理论结合实践,带你从无到有实现一个自己的操作系统。

实现路径

  • 从最小内核 Hello OS 练手,初步了解操作系统如何运行;
  • 对比经典操作系统,推陈出新,设计自己的操作系统——Cosmos 内核结构;
  • 解决操作系统的硬件、同步以及初始化问题,建立 Cosmos 操作系统的测试环境以及虚拟硬件;
  • 利用操作系统实现对计算机的管控,把 Cosmos 操作系统做大做强;
  • 拓展视野,储备知识,分享技术前沿内容。

知识体系

下图是彭东老师绘制的简版操作系统知识体系图,上面涉及的所有知识点,都会在后续的课程讲到。尽管看上去只是些简短的词汇,但随着课程的展开,你会发现每一小块,都犹如一片汪洋。

终极目标

  • 搞懂操作系统长什么样,如何运作,深入理解和掌握相关知识(理论);
  • 实现一个自己的,基于 x86 平台的支持多进程的操作系统内核(实操)。


课程目录


特别放送

免费领取福利



限时活动推荐


订阅须知

随机推荐

魔幻厨房烘焙模具性价比高吗?详细评测报告分享?

小东北星厨水饺-馄饨使用怎么样?深度爆料评测?

云蕾一次性用品好不好?良心点测!

法丽兹饼干-膨化好用吗?达人专业评测分享?

康夫F9性价比如何?使用感受大揭秘!

松下ES-ERT3是否值得入手?测评结果报告!