趣谈Linux操作系统 / 像故事一样的操作系统入门课
刘超
网易杭州研究院云计算技术部首席架构师
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 为什么要学习Linux操作系统?

    从今天开始,在接下来的四个月时间里,我会带你一步一步进入Linux操作系统的大门,让基础变成你技术生涯的左膀右臂。

  • 01 | 入学测验:你究竟对Linux操作系统了解多少?

    今天是入学第一课,我为你准备了12道小题,邀请你先来做个小测验。

  • 02 | 学习路径:爬过这六个陡坡,你就能对Linux了如指掌

    操作系统的学习过程就像爬坡,今天我就给你分享我的私家爬坡宝典。

  • 03 | 你可以把Linux内核当成一家软件外包公司的老板

    操作系统其实就像一个软件外包公司,其内核就相当于这家外包公司的老板。

  • 04 | 快速上手几个Linux命令:每家公司都有自己的黑话

    这一节,咱们介绍几个上手Linux的命令,先把Linux用起来。

  • 05 | 学会几个系统调用:咱们公司能接哪些类型的项目?

    系统调用决定了这个操作系统好用不好用、功能全不全。

  • 06 | x86架构:有了开放的架构,才能打造开放的营商环境

    在以后的讲解中,我们主要基于x86架构进行讲解,只有了解了底层硬件的基本工作原理,将来才能理解操作系统的工作模式。

  • 07 | 从BIOS到bootloader:创业伊始,有活儿老板自己上

    几乎所有成功的公司,都是从个体户模式发展壮大的,因此这一节咱们就从系统刚刚启动的个体户模式开始说起。

  • 08 | 内核初始化:生意做大了就得成立公司

    内核的初始化过程,主要做三件事情:各个职能部门的创建、用户态祖先进程的创建、内核态祖先进程的创建。

  • 09 | 系统调用:公司成立好了就要开始接项目

    站在系统调用的角度,层层深入下去,就能从某个系统调用的场景出发,了解内核中各个模块的实现机制。

  • 10 | 进程:公司接这么多项目,如何管?

    这一节我们讲,一个进程从代码到二进制,再到运行这么一个过程中发生的事儿。

  • 11 | 线程:如何让复杂的项目并行执行?

    写多线程的程序是有套路的。这节我讲创建线程的套路、mutex的使用的套路、条件变量使用的套路。

  • 12 | 进程数据结构(上):项目多了就需要项目管理系统

    无论是进程还是线程,到了内核里,都由一个统一的结构task_struct进行管理。

  • 13 | 进程数据结构(中):项目多了就需要项目管理系统

    task_struct这个结构非常长,上一节我们只是讲了一部分,今天我们解析剩下的部分。

  • 学习攻略(一):学好操作系统,需要掌握哪些前置知识?

    随着涉及的技术越来越深,很多同学觉得学习难度越来越大了,今天我讲讲我学习很难的知识的方法。

  • 14 | 进程数据结构(下):项目多了就需要项目管理系统

    如果说task_struct的其他成员变量都是和进程管理有关的,内核栈是和进程运行有关的。

  • 15 | 调度(上):如何制定项目管理流程?

    这一节我们讲调度相关的数据结构。

  • 16 | 调度(中):主动调度是如何发生的?

    一个运行中的进程会主动调用__schedule,让出CPU。

  • 17 | 调度(下):抢占式调度是如何发生的?

    上一节我们讲的主动调度是第一种方式,第二种方式是抢占式调度。什么情况下会发生抢占呢?

  • 18 | 进程的创建:如何发起一个新项目?

    fork系统调用的过程包含两个重要事件,将task_struct结构复制一份并且初始化、试图唤醒新创建的子进程。

  • 19 | 线程的创建:如何执行一个新子项目?

    创建进程和创建线程,在用户态和内核态有哪些不同?

  • 20 | 内存管理(上):为客户保密,规划进程内存空间布局

    这一节我们讲一个内存管理系统应该做的三件事情。

  • 21 | 内存管理(下):为客户保密,项目组独享会议室封闭开发

    这一节我们讲分段机制、分页机制以及从虚拟地址到物理地址的映射方式。

  • 22 | 进程空间管理:项目组还可以自行布置会议室

    一个进程要运行起来需要什么样的内存结构?

  • 23 | 物理内存管理(上):会议室管理员如何分配会议室?

    这一节我们主要讲物理内存的组织形式。

  • 24 | 物理内存管理(下):会议室管理员如何分配会议室?

    对于物理内存来讲,从下层到上层的关系及分配模式是必须要掌握的。

  • 25 | 用户态内存映射:如何找到正确的会议室?

    今天我们来分析用户态内存映射机制的几个部分。

  • 26 | 内核态内存映射:如何找到正确的会议室?

    讲完这节内核态的内存映射,我们可以将整个内存管理的体系串起来了。

  • 27 | 文件系统:项目成果要归档,我们就需要档案库

    学完这一节,你应该对文件系统的主要功能有一个总体印象。

  • 28 | 硬盘文件系统:如何最合理地组织档案库的文档?

    硬盘上的文件系统非常复杂。对于咱们平时的应用来讲,用的最多的是两个概念,inode和数据块。

  • 29 | 虚拟文件系统:文件多了就需要档案管理系统

    文件的数据结构层次多,而且很复杂,但是它非常重要,一定要掌握。

  • 30 | 文件缓存:常用文档应该放在触手可得的地方

    这一节我们主要分析文件的读取和写入。

  • 31 | 输入与输出:如何建立售前售后生态体系?

    输入输出设备就像管理代理商一样复杂多变。

  • 32 | 字符设备(上):如何建立直销模式?

    这一节我们讲字符设备的打开、写入和ioctl等最常见的操作。

  • 33 | 字符设备(下):如何建立直销模式?

    从外部设备发起的中断,会形成外部中断。外部中断会到达中断控制器,中断控制器会发送中断向量给CPU。

  • 34 | 块设备(上):如何建立代理商销售模式?

    块设备比字符设备复杂多了,涉及三个文件系统。

  • 35 | 块设备(下):如何建立代理商销售模式?

    块设备的I/O操作分为直接I/O和缓存I/O。无论哪种I/O,最终都会调用submit_bio提交块设备I/O请求。

  • 36 | 进程间通信:遇到大项目需要项目组之间的合作才行

    这一节我们讲进程间通信的各种模式。当你自己使用的时候,可以根据不同的通信需要,选择不同的模式。

  • 37 | 信号(上):项目组A完成了,如何及时通知项目组B?

    这一节我们讲如何通过API注册一个信号处理函数。

  • 38 | 信号(下):项目组A完成了,如何及时通知项目组B?

    今天我们来解析信号的发送与处理过程。这个过程还是挺复杂的。

  • 39 | 管道:项目组A完成了,如何交接给项目组B?

    无论是匿名管道,还是命名管道,在内核都是一个文件。只要是文件就要有一个inode。

  • 40 | IPC(上):不同项目组之间抢资源,如何协调?

    这一节我们讲共享内存和信号量的配合机制。

  • 41 | IPC(中):不同项目组之间抢资源,如何协调?

    了解了如何使用共享内存和信号量集合,今天我们来解析一下,内核里面都做了什么。

  • 42 | IPC(下):不同项目组之间抢资源,如何协调?

    前面我们解析完了共享内存的内核机制后,今天我们来看最后一部分,信号量的内核机制。

  • 43 预习 | Socket通信之网络协议基本原理

    Socket通信相关的系统调用、内核机制,都基于网络协议。所以今天我们发布两篇文章,这是第一篇预习,解析相关的网络协议。

  • 43 | Socket通信:遇上特大项目,要学会和其他公司合作

    有了预习篇的铺垫,再来学习Socket系统调用就容易多了。这里请你重点关注TCP协议的系统调用。

  • 44 | Socket内核数据结构:如何成立特大项目合作部?

    我们沿着Socket在TCP和UDP场景下的调用流程,看看它在内核里面,创建了哪些数据结构,做了哪些事情。

  • 45 | 发送网络包(上):如何表达我们想让合作伙伴做什么?

    这一节我们解析了发送网络包的一部分过程,包括VFS层、Socket层、Sock层、TCP层和IP层。

  • 46 | 发送网络包(下):如何表达我们想让合作伙伴做什么?

    今天我们把发送网络包的整个过程串联一下。

  • 47 | 接收网络包(上):如何搞明白合作伙伴让我们做什么?

    如果说网络包的发送是从应用层开始,层层调用,一直到网卡驱动程序的话,网络包的结束过程,就是一个反过来的过程。

  • 48 | 接收网络包(下):如何搞明白合作伙伴让我们做什么?

    接收网络包的过程比较难理解,我带你从头串一下整个过程。

  • 49 | 虚拟机:如何成立子公司,让公司变集团?

    今天我们讲虚拟化的基本原理,并且带你手动创建一个可以上网的虚拟机。

  • 50 | 计算虚拟化之CPU(上):如何复用集团的人力资源?

    虚拟机需要用参数模拟各种设备。为了适配这些设备,qemu定义了自己的模块管理机制。

  • 51 | 计算虚拟化之CPU(下):如何复用集团的人力资源?

    上一节我们得到了表示体系结构的MachineClass和MachineState。这一节我们继续后面的部分。

  • 52 | 计算虚拟化之内存:如何建立独立的办公室?

    虚拟机的内存管理需要用户态的qemu和内核态的KVM共同完成。为了加速内存映射,需要借助硬件的EPT技术。

  • 53 | 存储虚拟化(上):如何建立自己保管的单独档案库?

    存储虚拟化的过程分为前端、后端和中间的队列。

  • 54 | 存储虚拟化(下):如何建立自己保管的单独档案库?

    这节我们来分析,存储虚拟化场景下,整个写入的过程。

  • 55 | 网络虚拟化:如何成立独立的合作部?

    这一节我们讲,网络虚拟化场景下,网络包的发送过程。

  • 56 | 容器:大公司为保持创新,鼓励内部创业

    无论是容器,还是虚拟机,都依赖于内核中的技术。虚拟机依赖KVM,容器依赖namespace和cgroup。

  • 57 | Namespace技术:内部创业公司应该独立运营

    今天我们来看,“看起来隔离的”技术Namespace,在内核里面是如何工作的。

  • 58 | CGroup技术:内部创业公司应该独立核算成本

    这一节我们解析内核中CGroup的工作机制。

  • 59 | 数据中心操作系统:上市敲钟

    有了Kubernetes,我们就能像管理一台Linux服务器那样,去管理数据中心。

  • 60 | 搭建操作系统实验环境(上):授人以鱼不如授人以渔

    操作系统的理论部分我们就讲完了,为了更加深入地了解操作系统的本质,我们必须做一些上手实验。

  • 61 | 搭建操作系统实验环境(下):授人以鱼不如授人以渔

    这一节,我们来尝试调试内核。这样,我们就可以一步一步来看,内核的代码逻辑执行到哪一步了,对应的变量值是什么。

  • 62 | 知识串讲:用一个创业故事串起操作系统原理(一)

    操作系统是一门很复杂的课程,这一节开始,我们用五节的时间,通过一个创业故事,串起操作系统的整个知识体系。

  • 63 | 知识串讲:用一个创业故事串起操作系统原理(二)

    上一节说到小马同学的公司已经创立了,还请来了帮手。可是,现在这家公司,还得从接第一个外部项目开始。

  • 64 | 知识串讲:用一个创业故事串起操作系统原理(三)

    上一节我们说到,尽管项目越来越多,但是因为原则定出来了,所以一切都在井井有条进行中。这时,项目保密问题出现了。

  • 65 | 知识串讲:用一个创业故事串起操作系统原理(四)

    公司发展需积累,马哥建立知识库。有了积累建生态,成立渠道管理部。千万项目难度大,集体合作可断金。

  • 66 | 知识串讲:用一个创业故事串起操作系统原理(五)

    亿级项目创品牌,战略合作遵协议。公司大了不灵活,鼓励创新有妙招。独占鳌头定格局,上市敲钟责任重。

  • 67 | 期末测试:这些操作系统问题,你真的掌握了吗?

    当你看到这篇文章的时候,完成了整个课程的学习,你是否已经悟到操作系统的“真谛”了呢?我们今天来测试一下。

  • 结束语 | 永远别轻视任何技术,也永远别轻视自己

    时隔5个多月,“趣谈Linux操作系统”专栏终于结束了。我“逼”着自己写完了这个巨硬核的专栏,你要不要也逼自己一把呢?

  • “趣谈Linux操作系统”食用指南

    “趣谈Linux操作系统”专栏现在已经全部更新完毕。这里有一份“食用指南”,希望帮你找到学习本专栏的最佳姿势。

特别放送

11大模块, 掌握Linux核心技能

操作系统在计算机中承担着“大管家”的角色。它合理分配计算机硬件和软件资源,并处理多种基本事务,比如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等,还提供一个让用户与系统交互的操作界面。在刘超看来,Linux操作系统这个“大管家”的角色,就好比一家公司的老板

假设我们现在的目标是把这家公司做上市,怎么做呢?至少要经历以下四个发展阶段:

这样一来,你是不是就能设身处地理解到,操作系统就是协调各种资源,帮助我们成事的。你就不再局限于原有的“外部思维”,而是进入Linux内部,全方位理解计算机的工作原理,掌握程序的运行机制。如此,你的并发编程、程序设计和性能分析能力都会上升一个层次,开发效率会得到质的提升。在遇到实际问题时,你也能从系统层面出发,去编写代码和解决问题。

刘超,网易杭州研究院云计算技术部首席架构师。曾在EMC从事分布式存储系统开发,在惠普从事OpenStack的开发和架构设计,目前在网易从事容器、Kubernetes和微服务的架构工作,出版有《Lucene应用开发解密》。

2018年5月,他在极客时间开设的“趣谈网络协议”专栏,已有超过30000人订阅。这次,他将延续“趣谈”的风格,为你奉上一堂精彩的Linux操作系统基础课。

他将以Linux 4.x的内核源代码为基础,用一个完整的创业故事,配合生动详实的图片,深入剖析Linux操作系统的方方面面。他会教你快速上手Linux命令,掌握学习Linux的方法和路径,带你详细推演Linux内核的工作原理,让你对Linux操作系统的细节和全貌都有个完整的认识,并能站在一定高度去理解和优化当下的工作。

专栏分为三大模块,共52讲。

入门准备篇

这一模块首先为你精心准备了一套入门测试题,你可以检验一下自己的水平,然后根据测试结果,明确学习目标,之后再结合Linux操作系统的学习路径,设定自己的爬坡计划,为进入正式学习做好准备。

核心原理篇

将带你快速上手几个Linux命令,学会系统调用;进而讲到进程管理、内存管理、文件系统、输入输出系统;最后讲到进程间的通信、网络系统和虚拟化、容器化。带你搞清Linux操作系统的内核原理和工作机制,学习背后的程序设计和实现原理,学会从系统层面编写代码和解决问题。

实战串讲篇

将带你搭建一个操作系统实验环境,并用创业故事串起整个操作系统的知识点,帮助你复习、巩固每一模块细碎的知识点,并把它们有机地连接起来。另外,这一模块同样为你准备了一套期末测试题,帮你检验学习效果,查漏补缺,形成闭环。

限时福利

你觉得怎么样?期待您评价: