趣谈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 | 发送网络包(下):如何表达我们想让合作伙伴做什么?

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

限时拼团中,点「拼团按钮」,立即加入。

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

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

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

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

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

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

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

入门准备篇

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

核心原理篇

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

实战串讲篇

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

限时福利

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