趣谈Linux操作系统
刘超
网易杭州研究院云计算技术部首席架构师
立即订阅
19385 人已学习
课程目录
已完结 72 讲
0/4登录后,你可以任选4讲全文学习。
入门准备篇 (3讲)
开篇词 | 为什么要学习Linux操作系统?
免费
01 | 入学测验:你究竟对Linux操作系统了解多少?
02 | 学习路径:爬过这六个陡坡,你就能对Linux了如指掌
核心原理篇:第一部分 Linux操作系统综述 (3讲)
03 | 你可以把Linux内核当成一家软件外包公司的老板
04 | 快速上手几个Linux命令:每家公司都有自己的黑话
05 | 学会几个系统调用:咱们公司能接哪些类型的项目?
核心原理篇:第二部分 系统初始化 (4讲)
06 | x86架构:有了开放的架构,才能打造开放的营商环境
07 | 从BIOS到bootloader:创业伊始,有活儿老板自己上
08 | 内核初始化:生意做大了就得成立公司
09 | 系统调用:公司成立好了就要开始接项目
核心原理篇:第三部分 进程管理 (10讲)
10 | 进程:公司接这么多项目,如何管?
11 | 线程:如何让复杂的项目并行执行?
12 | 进程数据结构(上):项目多了就需要项目管理系统
13 | 进程数据结构(中):项目多了就需要项目管理系统
14 | 进程数据结构(下):项目多了就需要项目管理系统
15 | 调度(上):如何制定项目管理流程?
16 | 调度(中):主动调度是如何发生的?
17 | 调度(下):抢占式调度是如何发生的?
18 | 进程的创建:如何发起一个新项目?
19 | 线程的创建:如何执行一个新子项目?
核心原理篇:第四部分 内存管理 (7讲)
20 | 内存管理(上):为客户保密,规划进程内存空间布局
21 | 内存管理(下):为客户保密,项目组独享会议室封闭开发
22 | 进程空间管理:项目组还可以自行布置会议室
23 | 物理内存管理(上):会议室管理员如何分配会议室?
24 | 物理内存管理(下):会议室管理员如何分配会议室?
25 | 用户态内存映射:如何找到正确的会议室?
26 | 内核态内存映射:如何找到正确的会议室?
核心原理篇:第五部分 文件系统 (4讲)
27 | 文件系统:项目成果要归档,我们就需要档案库
28 | 硬盘文件系统:如何最合理地组织档案库的文档?
29 | 虚拟文件系统:文件多了就需要档案管理系统
30 | 文件缓存:常用文档应该放在触手可得的地方
核心原理篇:第六部分 输入输出系统 (5讲)
31 | 输入与输出:如何建立售前售后生态体系?
32 | 字符设备(上):如何建立直销模式?
33 | 字符设备(下):如何建立直销模式?
34 | 块设备(上):如何建立代理商销售模式?
35 | 块设备(下):如何建立代理商销售模式?
核心原理篇:第七部分 进程间通信 (7讲)
36 | 进程间通信:遇到大项目需要项目组之间的合作才行
37 | 信号(上):项目组A完成了,如何及时通知项目组B?
38 | 信号(下):项目组A完成了,如何及时通知项目组B?
39 | 管道:项目组A完成了,如何交接给项目组B?
40 | IPC(上):不同项目组之间抢资源,如何协调?
41 | IPC(中):不同项目组之间抢资源,如何协调?
42 | IPC(下):不同项目组之间抢资源,如何协调?
核心原理篇:第八部分 网络系统 (7讲)
43 预习 | Socket通信之网络协议基本原理
43 | Socket通信:遇上特大项目,要学会和其他公司合作
44 | Socket内核数据结构:如何成立特大项目合作部?
45 | 发送网络包(上):如何表达我们想让合作伙伴做什么?
46 | 发送网络包(下):如何表达我们想让合作伙伴做什么?
47 | 接收网络包(上):如何搞明白合作伙伴让我们做什么?
48 | 接收网络包(下):如何搞明白合作伙伴让我们做什么?
核心原理篇:第九部分 虚拟化 (7讲)
49 | 虚拟机:如何成立子公司,让公司变集团?
50 | 计算虚拟化之CPU(上):如何复用集团的人力资源?
51 | 计算虚拟化之CPU(下):如何复用集团的人力资源?
52 | 计算虚拟化之内存:如何建立独立的办公室?
53 | 存储虚拟化(上):如何建立自己保管的单独档案库?
54 | 存储虚拟化(下):如何建立自己保管的单独档案库?
55 | 网络虚拟化:如何成立独立的合作部?
核心原理篇:第十部分 容器化 (4讲)
56 | 容器:大公司为保持创新,鼓励内部创业
57 | Namespace技术:内部创业公司应该独立运营
58 | CGroup技术:内部创业公司应该独立核算成本
59 | 数据中心操作系统:上市敲钟
实战串讲篇 (9讲)
60 | 搭建操作系统实验环境(上):授人以鱼不如授人以渔
61 | 搭建操作系统实验环境(下):授人以鱼不如授人以渔
62 | 知识串讲:用一个创业故事串起操作系统原理(一)
63 | 知识串讲:用一个创业故事串起操作系统原理(二)
64 | 知识串讲:用一个创业故事串起操作系统原理(三)
65 | 知识串讲:用一个创业故事串起操作系统原理(四)
66 | 知识串讲:用一个创业故事串起操作系统原理(五)
67 | 期末测试:这些操作系统问题,你真的掌握了吗?
结束语 | 永远别轻视任何技术,也永远别轻视自己
免费
专栏加餐 (2讲)
学习攻略(一):学好操作系统,需要掌握哪些前置知识?
“趣谈Linux操作系统”食用指南
免费
趣谈Linux操作系统
登录|注册

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

刘超 2019-04-10
有了开放的营商环境,咱们外包公司的创业之旅就要开始了。
上一节我们说,x86 作为一个开放的营商环境,有两种模式,一种模式是实模式,只能寻址 1M,每个段最多 64K。这个太小了,相当于咱们创业的个体户模式。有了项目只能老板自己上,本小利微,万事开头难。另一种是保护模式,对于 32 位系统,能够寻址 4G。这就是大买卖了,老板要雇佣很多人接项目。
几乎所有成功的公司,都是从个体户模式发展壮大的,因此,这一节咱们就从系统刚刚启动的个体户模式开始说起。

BIOS 时期

当你轻轻按下计算机的启动按钮时,你的主板就加上电了。
按照我们之前说的,这时候你的 CPU 应该开始执行指令了。你作为老板,同时也作为员工,要开始干活了。可是你发现,这个时候还没有项目执行计划书,所以你没啥可干的。
也就是说,这个时候没有操作系统,内存也是空的,一穷二白。CPU 该怎么办呢?
你作为这个创业公司的老板,由于原来没开过公司,对于公司的运营当然是一脸懵的。但是我们有一个良好的营商环境,其中的创业指导中心早就考虑到这种情况了。于是,创业指导中心就给了你一套创业公司启动指导手册。你只要按着指导手册来干就行了。
计算机系统也早有计划。在主板上,有一个东西叫 ROM(Read Only Memory,只读存储器)。这和咱们平常说的内存 RAM(Random Access Memory,随机存取存储器)不同。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈Linux操作系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(84)

  • why
    - 实模式只有 1MB 内存寻址空间(X86)
    - 加电, 重置 CS 为 0xFFFF , IP 为 0x0000, 对应 BIOS 程序
    - 0xF0000-0xFFFFF 映射到 BIOS 程序(存储在ROM中), BIOS 做以下三件事:
        - 检查硬件
        - 提供基本输入(中断)输出(显存映射)服务
        - 加载 MBR 到内存(0x7c00)
    - MRB: 启动盘第一个扇区(512B, 由 Grub2 写入 boot.img 镜像)
    - boot.img 加载 Grub2 的 core.img 镜像
    - core.img 包括 diskroot.img, lzma_decompress.img, kernel.img 以及其他模块
    - boot.img 先加载运行 diskroot.img, 再由 diskroot.img 加载 core.img 的其他内容
    - diskroot.img 解压运行 lzma_compress.img, 由lzma_compress.img 切换到保护模式

    -----------

    - 切换到保护模式需要做以下三件事:
        - 启用分段, 辅助进程管理
        - 启动分页, 辅助内存管理
        - 打开其他地址线
    - lzma_compress.img 解压运行 grub 内核 kernel.img, kernel.img 做以下四件事:
        - 解析 grub.conf 文件
        - 选择操作系统
        - 例如选择 linux16, 会先读取内核头部数据进行检查, 检查通过后加载完整系统内核
        - 启动系统内核
    2019-04-10
    1
    123
  • 我爱北京天安门
    看来从这篇开始我要看三遍四遍五遍的节奏了

    作者回复: 三遍就够,加油

    2019-04-10
    1
    37
  • Luke
    这部分的实验,大家可以去github看我的工程哈,icecoobe/oslab,已经进入保护模式了,还有很远的路,一起加油!

    作者回复: 牛

    2019-04-11
    35
  • Li Shunduo
    老板选择了《狼性文化》😂😂
    2019-04-10
    24
  • Luke
    看到很多人留言需要资料,我来推荐一本新书《一个64位操作系统的设计与实现》,如果你有汇编基础,很感兴趣底层的细节,可以看李忠的那本《从实模式到保护模式》

    作者回复: 赞,看来我得收集一下书名,统一推荐给大家

    2019-04-11
    18
  • Socrakit
    查了一些资料,关于 Gate A20 我的理解是:

    - 8086 地址线20根 -> 可用内存 0 ~ FFFFF
      寄存器却是16位,寻址模式为 segment(16位):offset(16位), 最大范围变成 0FFFF0(左移了4位) + 0FFFF = 10FFEF
      后果是多出来了 100000 ~ 10FFEF (访问这些地址时会回绕到 0 ~ FFEF)

    - 80286 开始地址线变多,寻址范围大大增大,但是又必须兼容旧程序,8086在访问 100000 ~ 10FFEF时会回绕,但是 80286 不会 ,因为有第21根线的存在,会访问到实际的 100000 ~ 10FFEF 地址的内存。
    于是 Gate A20 开关就诞生了,它的作用是:

    - 实模式下 (存在的唯一理由是为了兼容8086):
      - 打开 -> 寻址100000 ~ 10FFEF会真正访问
      - 关闭-> 回绕到 0 ~ FFEF

    - 保护模式下:
      - 打开 -> 可连续访问内存
      - 关闭 -> 只能访问到奇数的1M段,即 00000-FFFFF, 200000-2FFFFF,300000-3FFFFF…

    作者回复: 赞

    2019-04-16
    1
    13
  • 赵又新
    之前课上说的,如果没有理解错的话:
    32位,分为16位寻址空间和16位偏移量。但通过左移4位的方式,将寻址空间扩充为20位。所以,0xFFFF的位置实际指的是0xFFFF0。

    作者回复: 是的

    2019-04-11
    12
  • 影影影
    补充阅读
    https://opensource.com/article/17/2/linux-boot-and-startup
    https://opensource.com/article/17/3/introduction-grub2-configuration-linux
    2019-04-10
    10
  • 天王
    总结:ROM只读存储器,ROm固化了一些程序就是BIOS,用来初始化系统,一开始的内存空间比较小,只有1M,最上面的64k映射为BIOS,指针指向这64k,开始进行初始化,有2个事情,一个是检查硬件环境,另一个是建立中断程序和中断向量表,同时把结果显示在显示器上,BIOS只是做初始化工作,真正安装系统了,首先要找系统,grub2是搞系统启动的,他把系统代码放在硬盘上,一般在第一个扇区,以0xAA55结束,512个字节,满足这个条件,就是系统启动的代码,grub2要首先安装的是第一个扇区MBR主引导扇区,他在BIOS初始化完成之后进行,会讲boot.img加载到内存,他能做的另一个事是加载core.img镜像,boot.img先加载core.img 的第一个扇区,diskboot.img,将core.img的其他程序加载进来,然后diskboot.img解压lzma_decompress.img, 再解压kernel.img,再然后是各个模块对应的映像。lzma_decompress在解压之前,调用real_to_prot,切换到保护模式。切换到保护模式,做的事情,启用分段,在内存里建立段描述表,将段寄存器里的段寄存器变成段选择子,指向某个段描述符,就能完成进程的切换,启动分页,管理的内存大了,将内存分成大小相等的块,打开Gate20,第21根地址线的控制线,有空间了,对kernel.img解压缩,开始运行,是一堆.c文件,里面有主函数,显示出操作系统的列表,选择了一个操作系统,开始调用grub_menu_execute_entry(),开始执行选择的那一项,里面的linux16命令,表示装载指定的内核文件,并传递内核启动参数,于是grub_cmd_linux()函数被调用,首先会读取linux内核头部的数据结构,加载到内存中来,检查通过,会加载整个linux内核镜像到内存,当都做完,调用grub_command_execute("boot",0,0),开始真正的启动内核。
    2019-04-11
    8
  • 流殇忘情
    既然BIOS是只读的,那升级BIOS固件是怎么做到的呢?

    作者回复: 写入方式不一样,咱们不是说升级bios是烧bios么

    2019-04-11
    6
  • 随风
    当电脑刚加电的时候,会做一些重置的工作,将 CS 设置为 0xFFFF,将 IP 设置为 0x0000,所以第一条指令就会指向 0xFFFF0。这个所以怎么得到的结果?为什么上面都是五位0xFFFFF, cs/ip都是四位0xFFFF? 小白越看越不明白了。

    作者回复: 左移4位+偏移量

    2019-04-10
    3
    6
  • wahaha
    grub2 是一个非常牛的 Linux 启动管理器
    这句应该去掉Linux,因为GRUB2也能启动其它操作系统

    作者回复: 对的

    2019-04-12
    5
  • leon
    32位处理器不是有32根地址线嘛?为啥只打开第21根地址线的控制线?这里可以再稍微解释一下吗?控制线是另外一种线嘛?

    作者回复: 实模式下,只开20以下的,32才开20以上的

    2019-04-14
    4
  • 天使也有爱
    老师 我现在看这些内容有点晕 太细了 我是要用那本书做配套看 还是直接用内核源码结合着看呢

    作者回复: 我推荐了书籍,对着源码看挺好的

    2019-04-10
    4
  • 徐庆新
    RAM是Random Access Memory,不是Read Access Memory

    作者回复: 我读的是read?

    2019-04-11
    3
  • TeFuir
    当电脑刚加电的时候,会做一些重置的工作,将 CS 设置为 0xFFFF,将 IP 设置为 0x0000,所以第一条指令就会指向 0xFFFF0,正是在 ROM 的范围内。 为什么第一条指令会指向0xFFFF0呢

    作者回复: 左移四位

    2019-04-10
    3
  • 星辰
    1.BIOS时期约定了启动扇区的位置与大小

    2.BootLoader时期主要是通过grub2来启动系统

    3.启动过程中有实模式到保护模式的切换。
    2019-04-10
    3
  • yan华建
    个人小结
    ROM(只读存储器) read only memory
    RAM(random access memory)随机存取存储器
    BIOS(Basic Input and Output System)基本输入输出系统
    MBR(Master Boot Record)主引导分区/记录
    BIOS初始化流程:
    1、检查系统的硬件是否正常
    2、建立中断向量表和中断服务程序(因为需要用到键盘和鼠标,需要通过中断进行)
    3、在内存空间映射显存的空间,在显示器上这是一些字符
    BootLoader时期
    Grub2工具(grand unified bootloader version 2)
    grub2首先会安装boot.img.它由boot.s编译而成。
    BIOS完成任务后,会将boot.img从硬盘加载到内存中的0x7c00开运行。
    由于512字节有限,boot.img做不了太多事。能做的最重要的一个事情就是加载Grub2的core.img。
    core.img由diskboot.img、lz_decompress.img、kernel.img和一系列的模块组成。
    实时模式只有1M的地址空间,放不了太多,所以在解压缩之前,lzma_compress.img做了一个重要的决定,就是调用real_to_prot,切换到保护模式,这样就能在更大的寻址空间里面,加载更多的东西。
    从实时模式到保护模式做了哪些工作
    1、启用分段,就是在内存中建立段描述表。
    2、启用分页
    3、打开第二十一跟地址线
    运行kernel.img选择一个操作系统
    启动内核
    2019-05-12
    2
  • 启曙
    看Linux0.12内核的时候,没有grub,而是内核有个bootsect.s的编译后写入MBR。文中grub是在MBR和bootsect.s直接增加的一个多系统引导功能。但是GRUB看起来不是必须的,为什么后来的内核要加入GRUB

    作者回复: 管理方便

    2019-04-12
    2
  • 扁担
    我的理解,先把握总体流程,细节部分可以暂时忽略,初始阶段先打通任督二脉。
    2019-10-31
    1
收起评论
84
返回
顶部