深度探索Linux操作系统 —— 从内核空间到用户空间

news2024/11/30 0:42:25

在这里插入图片描述

系列文章目录


深度探索Linux操作系统 —— 编译过程分析
深度探索Linux操作系统 —— 构建工具链
深度探索Linux操作系统 —— 构建内核
深度探索Linux操作系统 —— 构建initramfs
深度探索Linux操作系统 —— 从内核空间到用户空间


文章目录

  • 系列文章目录
  • 一、Linux操作系统加载
    • 1、GRUB映像构成
    • 2、安装GRUB


一、Linux操作系统加载

    PC 上电或复位后,处理器跳转到 BIOS ,开始执行 BIOSBIOS 首先进行加电自检,初始化相关硬件,然后加载 MBR 中的程序到内存 0x7c00 处并跳转到该地址处,接着由 MBR 中的程序完成操作系统的加载工作。通常,MBR 中的程序也被称为 Bootloader 。当然,鉴于现代操作系统的复杂性,Bootloader 已远远不止一个扇区大小。这一节,我们就以一个具体的 Bootloader —— GRUB 为例,探讨操作系统的加载过程。为简单起见,我们只讨论典型的从硬盘加载操作系统的过程,所以后续的讨论全部是针对从硬盘启动的情况。

    PC 上硬盘的传统分区方式是 MBR 分区方案。但是 MBR 最大能表示的分区大小为 2TB。因此,随着硬盘容量的不断扩大,为了突破 MBR 分区方式的一些限制,20 世纪 90 年代 Intel 提出了 GPT 分区方案。对于不同的分区方式,加载操作系统的方式还是有些许不同的。也是为了简单起见,我们结合现在依然广泛使用的传统的 MBR 分区方案进行讨论。

1、GRUB映像构成

    对于仅有 512 字节大小的 MBR,又要留给分区表 64 字节,在这么小的一个空间,已经很难容纳加载一个现代操作系统的代码。于是 GRUB 采取了分阶段的策略,MBR 中仅存放 GRUB 的第一阶段的代码,MBR 中的代码负责把 GRUB 的其余部分载入内存。

    但是 GRUB 分成几段合适呢?要回答这个问题我们还得从 DOS 谈起。

    DOS 的系统映像是不能跨柱面存放的,所以在 DOS 时代,磁盘的第一个分区索性并没有紧接在 MBR 的后面,而是直接从下一个柱面的边界开始。而且,按照柱面对齐,对系统的性能有很大好处,这对于现代操作系统同样适用。于是,在 MBR 与第一个分区之间,就出现了一块空闲区域。从那时起,这种分区方式成为了一个约定俗成,基本上所有的分区工具都把这种分区方式保留了下来。如果硬盘是 MBR 分区方案,用分区工具 fdisk 就可以看到这一点。

    根据 fdisk 的输出可见,每个磁道划分为 63 个扇区。硬盘的第一个分区起始于第 63 个扇区(从 0 开始计数)。也就是说,对于第 0 个磁道,除了 MBR 占据的一个分区,其余 62 个分区是空闲的。

    于是,GRUB 的开发人员就打算把 GRUB “嵌入”到这个空闲区域,这样做的好处就是相对来说比较安全。因为某些文件系统的一些特性或者一些修复文件系统的操作,有可能导致文件系统中的文件所在的扇区发生改变。因此,单纯依靠扇区定位文件是有一定的风险的。而对于 GRUB 来说,在其初始阶段,由于尚未加载文件系统的驱动,因此,它恰恰需要通过 BIOS 以扇区的方式访问 GRUB 的后续的阶段。但是,一旦 GRUB 嵌入到这个不属于任何分区的特殊区域,则将不再受文件系统的影响。当然将 GRUB 嵌入到这个区域也不是必须的,但是因为这个相对安全的原因,GRUB 的开发人员推荐将 GRUB 嵌入到这个区域。

    但是这个区域的大小是有限的,通常,一个扇区 512 字节,一个柱面最多包含 63 个扇区。因此,除去 MBR ,这个区域的大小是 62 个扇区,即 31KB。因此,嵌入到这里的 GRUB 的映像最大不能超过 31KB 。为了控制嵌入到这个区域中的映像的尺寸不超过 31KB,GRUB 采用了模块化的设计方案。

    GRUB 在嵌入的映像中包含硬件及文件系统的驱动,因此,一旦嵌入的映像载入内存,GRUB 即可访问文件系统。其他模块完全可以存储在文件系统上,通过文件系统的接口访问这些模块,避开了因为如修复文件系统而引起文件所在扇区的变化而带来的风险。另外也可以很好地控制嵌入到空闲扇区的映像的尺寸。

    由上述内容可知,GRUB 将映像分为三个部分:MBR 中的 boot.img、嵌入空闲扇区的 core.img 以及存储在文件系统中的模块。这三个部分也对应着 GRUB 执行的三个阶段。在 MBR 分区模式下,以嵌入方式安装的 GRUB 的各个部分在硬盘上的分布如图5-1所示。

在这里插入图片描述

    core.img 包括多个映像和模块,以从硬盘启动为例,core.img 包含的内容如图 5-2 所示。

在这里插入图片描述

2、安装GRUB

    通常,在安装操作系统的最后,操作系统安装程序将会为用户安装 GRUB 。当然,有时我们也会手动安装 GRUB 。但是都是通过 GRUB 提供的工具,执行的命令如下:

grub-install /dev/sda

    事实上,在这个安装命令的背后,GRUB 的安装过程分为两个阶段:第一阶段是创建 core.img ,GRUB 为此提供的工具是 grub-mkimage ;第二阶段是安装 boot.imgcore.img 到硬盘,GRUB 提供的工具是 grub-setup 。为了方便,GRUB 将这两个过程封装到脚本 grub-install 中。

   

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java IO流(六)(字符流FileReader和FileWriter)

字符流 字符流的底层其实就是字节流 字符流字节流字符集 特点 输入流:一次读一个字节,遇到中文时,一次读多个字节 使用场景 对于纯文本文件进行读写操作 FileReader类 ①创建字符输入流对象 构造方法 说明 public FileReader(File f…

Configuring environment||ROS2环境配置

Goal: This tutorial will show you how to prepare your ROS 2 environment. Tutorial level: Beginner Time: 5 minutes ROS 2 relies on the notion (concept)of combining workspaces using the shell environment. “Workspace” is a ROS term …

读书笔记:《股票量化交易的七个策略》

从长远来看,基本面最重要;从短期来看,价格和情绪最重要。在别人贪婪时恐惧,在别人恐惧时贪婪。 相对强弱指数策略【趋势反转】 相对强弱指数(Relative Strength Index,RSI) RSI的取值范围在0到…

亚马逊云科技re_Invent 2023产品体验:亚马逊云科技产品应用实践 国赛选手带你看Elasticache Serverless

抛砖引玉 讲一下作者背景,曾经参加过国内世界技能大赛云计算的选拔,那么在竞赛中包含两类,一类是架构类竞赛,另一类就是TroubleShooting竞赛,对应的分别为AWS GameDay和AWS Jam,想必也有朋友玩过此类竞赛&…

【C++】输入输出流 ⑥ ( cout 标准输出流对象 | cout 常用 api 简介 | cout.put(char c) 函数 )

文章目录 一、cout 标准输出流对象1、cout 标准输出流对象简介2、cout 常用 api 简介 二、cout.put(char c) 函数1、cout.put(char c) 函数 简介2、代码示例 - cout.put(char c) 函数 一、cout 标准输出流对象 1、cout 标准输出流对象简介 cout 是 标准输出流 对象 , 是 ostrea…

Redis的概念与常见命令

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

新版Spring Security6.2架构 (一)

Spring Security 新版springboot 3.2已经集成Spring Security 6.2,和以前会有一些变化,本文主要针对官网的文档进行一些个人翻译和个人理解,不对地方请指正。 整体架构 Spring Security的Servlet 支持是基于Servelet过滤器,如下…

永磁同步电机反电动势系数怎么算?磁链强度怎么算?转矩系数怎么算?

在进行永磁同步电机simulink仿真时,一个关键参数就是永磁体磁链强度, 实际上在simulink中,永磁体磁链强度/反电动势系数/转矩系数这三个是放一起的,这是因为他们都可互相算出来。 Torque constat (Nm/A) 转矩系数 1.5 * Np *…

Java 匿名内部类使用的外部变量,为什么一定要加 final?

问题描述 Effectively final Java 1.8 新特性,对于一个局部变量或方法参数,如果他的值在初始化后就从未更改,那么该变量就是 effectively final(事实 final)。 这种情况下,可以不用加 final 关键字修饰。 …

计算机设备管理器如何看内存,怎么查看电脑配置信息?3种方法,让你掌握电脑全部信息!...

转载:https://blog.csdn.net/weixin_35849957/article/details/118512756?spm1001.2014.3001.5502 原标题:怎么查看电脑配置信息?3种方法,让你掌握电脑全部信息! 电脑的配置决定了电脑性能高低以及运行速度。而电脑…

Ubuntu22.04 LTS + CUDA12.3 + CUDNN8.9.7 + PyTorch2.1.1

简介 本文记录Ubuntu22.04长期支持版系统下的CUDA驱动和cuDNN神经网络加速库的安装,并安装PyTorch2.1.1来测试是否安装成功。 安装Ubuntu系统 如果是旧的不支持UEFI启动的主板,请参考本人博客U盘系统盘制作与系统安装(详细图解&#xff09…

深度学习基础介绍

定义: 深度学习是机器学习领域中一个新的研究方向,被引入机器学习使其更接近于最初的目标,即人工智能AI, Artifical Intelligence。 深度学习是学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字…

Docker网络架构介绍

本文主要介绍了Docker容器的单机网络架构与集群网络架构,辅以演示,并简单介绍了网络管理中的命令。 前文: Docker的安装与简单操作命令-CSDN博客 docker网络原理介绍 与ovs类似,docker容器采用veth-pair linux bridge (虚拟交…

CPU设计——Triumphcore——MP_work版本

该版本用作系统寄存器的实现,M/S/U状态的实现与切换,以及load/store的虚实地址转换 设计指标 2023.12.8 2023.12.9 不实现mideleg和medeleg,因此一旦出现异常,直接切换至M态, 调试记录 到存储区中取PTE要额外至少…

hive 命令行中使用 replace 和nvl2 函数报错

1.有时候在命令行的情况下使用 replace 函数时会报错 这个时候可以使用 translate 代替 2.有时候使用 nvl2() 函数的时候会报错 这个时候可以用 case when 来代替

IO / day06 作业

1.使用有名管道&#xff0c;完成两个进程的相互通信 代码&#xff1a; // 使用有名管道&#xff0c;完成两个进程的相互通信#include <myhead.h>// task sender void *tasks(void *arg) {printf("I am tasks\n");int fdw -1;const char **ppargv (const c…

Redis核心知识点总结

1.Redis介绍 Redis 是 NoSQL&#xff0c;但是可处理 1 秒 10w 的并发&#xff08;数据都在内存中&#xff09; 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql&#xff0c;有各类实现他的实现类&#xff0c;我们常用的是 druid 其中对 redis&#xff0c;我们通常用 J…

链表面试题的总结和思路分享

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

Vite4、Vue3、Axios 针对请求模块化封装搭配自动化导入(简单易用)

针对请求模块化封装搭配自动化导入&#xff08;简单易用&#xff09; 目标目录目标代码前提步入正题src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自动化配置vite.config.jseslint 校…

《PySpark大数据分析实战》-01.关于数据

&#x1f4cb; 博主简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是wux_labs。&#x1f61c; 热衷于各种主流技术&#xff0c;热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员&#xff08;PCTA&#xff09;、TiDB数据库专家&#xff08;PCTP…