【学习笔记】小 O 带你掌握操作系统的心跳 - OneOS 内核启动

简介: 一、简介内核启动介绍了整个系统从硬件上电如何一步步进入用户程序的过程。一般情况下,启动过程分为硬件上电,首先运行和体系架构相关的启动汇编文件,进行一些最基本硬件的初始化 (例如 CPU 配置,时钟,栈地址,RAM 等),为内核运行铺垫好环境,然后初始化内核各模块 (例如调度器,定时器等),接着创建系统任务 (例如空闲任务) 和用户任务,最后启动调度和运行用户程序。

一、简介
内核启动介绍了整个系统从硬件上电如何一步步进入用户程序的过程。一般情况下,启动过程分为硬件上电,首先运行和体系架构相关的启动汇编文件,进行一些最基本硬件的初始化 (例如 CPU 配置,时钟,栈地址,RAM 等),为内核运行铺垫好环境,然后初始化内核各模块 (例如调度器,定时器等),接着创建系统任务 (例如空闲任务) 和用户任务,最后启动调度和运行用户程序。

二、自动初始化
自动初始化是指初始化函数不需要被显式调用。

隐式调用(静态调用):将动态链接库和其它源程序文件(或者目标文件)一起参与链接;在介绍内核启动之前,有必要介绍自动初始化的实现机制。

在介绍内核启动之前,有必要介绍自动初始化的实现机制。

显式调用(动态调用):手动调用动态链接库中包含的资源,同时用完后要手动将资源释放。自动初始化的实现是利用编译器的段和段排序的特性,以 GCC 编译器为例具体如下:

在介绍内核启动之前,有必要介绍自动初始化的实现机制。

自动初始化的实现是利用编译器的段和段排序的特性,以 GCC 编译器为例具体如下:

1、通过 GCC 的关键字attribute((section (x))),可以把定义的符号(函数地址或变量地址)放到段名为 x 的段中,段名 x 由用户指定。在自动初始化应用中,段名都包含.init_call 字符串,若采用通配符的表示方法,段名为.init_call,表示任何一串其它一串字符串;

2、在 GCC 的链接脚本中,关键字 KEEP ((SORT (.init_call))) 可以对段名符合.init_call * 形式的段进行排序;

3、若把自动初始化函数的符号(即函数地址)放到符合.init_call * 形式的段中,就可以间接实现函数符号排序,从而可以提供有顺序的执行自动初始化函数的方法。

自动初始化通过宏定义提供了注册初始化函数的接口,接口如下:

提供了段结构的宏定义,根据初始化优先级的不同,有如下宏定义:

编译之后,初始化宏对应的段结构如下:

三、内核启动流程
下图展示了整个系统启动过程和内核启动过程,本节主要介绍内核启动部分。

可见,内核启动主要有下面几个

步骤:

1、系统先从启动文件开始运行,然后进入 OneOS 的内核启动函数 os_kernel_init () 和 os_kernel_start ()

2、os_kernel_init 中调用_k_run_init_call 函数执行 OS_INIT_LEVEL_PRE_KERNEL_1,进行内核启动前的第一阶段的初始化

3、初始化内核各模块,如 tick 队列,调度器,定时器等

4、创建 recycle,idle,timer,sys 系统任务

5、启动调度器,最后会运行 sys 任务,sys 任务调用_k_run_init_call 函数依次执行其他自动化宏注册的函数,最后调用 main 函数进入用户程序入口

相关文章
|
6天前
|
存储 人工智能 安全
操作系统的心脏:内核深度解析
【8月更文挑战第13天】 在数字世界的每一次跳动中,都能感受到操作系统内核的强大生命力。本文将带你走进操作系统的核心——内核,揭示它如何协调和管理计算机硬件资源,保证软件运行的高效和稳定。从内核的定义和功能,到它的结构和设计哲学,再到现代操作系统中的创新与挑战,我们将一起探索这个让计算机系统“活着”的秘密所在。
22 3
|
2月前
|
存储 Cloud Native 物联网
探索操作系统的心脏:内核设计与实现
【6月更文挑战第28天】在数字世界的每一次跳动中,操作系统的内核扮演着不可或缺的角色。本文将深入探讨操作系统内核的设计原理、实现机制以及它们如何影响系统性能和稳定性。我们将从内核的基本概念出发,逐步剖析其核心组件,包括进程管理、内存管理、文件系统和设备驱动等方面。通过分析Linux内核作为案例,揭示现代操作系统内核设计的复杂性和优雅性。文章旨在为读者提供对操作系统内核深层次理解的同时,也展望了未来操作系统可能的发展趋势。
|
9天前
|
存储 安全
操作系统的心脏:内核探秘
【8月更文挑战第10天】 本文带你深入操作系统最神秘的角落,探索内核的奥秘。我们将一窥内核如何协调硬件与软件之间的复杂关系,保持系统稳定运行。通过简明的语言和生动的比喻,你将了解进程管理、内存分配、文件系统等核心概念。无论你是技术新手还是资深爱好者,这篇文章都将为你打开一扇理解计算机深层工作原理的大门。
33 13
|
6天前
|
安全 物联网 云计算
操作系统的心脏:内核探秘
本文将深入剖析操作系统的核心组件——内核,通过浅显易懂的语言和生动的比喻,揭示其神秘面纱。我们将从内核的定义与功能出发,逐步探索进程管理、内存管理等关键模块,并讨论其在现代计算环境中的重要性。无论你是计算机新手还是资深爱好者,这篇文章都将为你打开一扇了解计算机深层工作原理的大门。
10 2
|
14天前
|
存储 网络协议 安全
操作系统的心脏:内核探秘
在数字世界的海洋中,操作系统扮演着船舶的角色,而内核则是推动这艘船前进的引擎。本文将深入探索操作系统内核的设计哲学、功能组件以及它如何影响系统性能和稳定性。我们将通过具体实例来揭示内核对现代计算体验的重要性,并提出一些关于未来操作系统内核发展的思考。
|
6天前
|
算法 调度 UED
操作系统的心脏:内核与进程管理
在数字世界的宏伟建筑中,操作系统是那支撑起一切软件运行的基石。本文将深入浅出地探讨操作系统的核心—内核,以及它如何通过进程管理来协调计算机资源的使用。我们将从内核的定义和功能出发,逐步深入到进程的生命周期,以及调度算法的重要性,最终揭示这些机制如何影响我们日常使用的电子设备性能。
13 2
|
7天前
|
算法 安全 调度
操作系统的心脏:内核深度解析
【8月更文挑战第12天】 本文将带你进入操作系统的核心—内核,探索其设计、功能和工作原理。我们将通过通俗易懂的语言和生动的比喻,让你轻松理解这个复杂但至关重要的主题。无论你是计算机科学的初学者,还是有一定基础的开发者,这篇文章都将为你提供新的视角和深入的理解。让我们一起揭开操作系统内核的神秘面纱,探索它的奥秘吧!
19 3
|
9天前
|
机器学习/深度学习 存储 人工智能
操作系统的心脏:内核探索之旅
【8月更文挑战第11天】在数字世界的宏伟建筑中,操作系统是支撑软件生态和硬件资源协同工作的基石。而在这庞大复杂的系统中,内核则是其跳动的心脏。本文将深入探讨操作系统内核的设计哲学、功能组件以及它在现代计算环境中的作用与挑战。我们将一窥内核如何管理处理器、内存、存储设备等关键资源,并分析它如何在多任务处理、安全性保障及系统性能优化方面扮演至关重要的角色。此外,文章还将讨论当前技术趋势对内核设计的影响,以及未来可能出现的创新方向。
|
9天前
|
安全 Linux Windows
探索操作系统的心脏:内核与用户模式的奥秘
本文将深入探讨操作系统的核心组件——内核,以及它如何通过用户模式和内核模式的切换来管理资源和保护系统安全。我们将从基础概念出发,逐步深入到内核的设计原理,最后讨论现代操作系统中用户模式与内核模式的交互机制。通过这篇文章,读者将获得对操作系统内核工作原理的深刻理解,并认识到它在计算机系统中的重要性。
|
22天前
|
Web App开发 物联网 虚拟化
深入理解操作系统:从内核到用户界面的探索之旅
【7月更文挑战第28天】在数字世界的心脏跳动着的,是复杂而精密的操作系统。它不仅仅是计算机硬件和软件之间的桥梁,更是维系现代计算生态的关键。本文将带领读者穿越操作系统的层层迷雾,从内核的深邃奥秘到用户界面的直观魅力,一探究竟。我们将探讨操作系统如何管理资源、提供接口、确保安全以及适应不断变化的技术需求,揭示这个我们每天都在使用但往往忽视的复杂系统的真实面貌。

热门文章

最新文章