分享
Nanos-lite启动过程分析
输入“/”快速插入内容
Nanos-lite启动过程分析
飞书用户4347
2024年5月27日修改
Nanos-lite的启动过程思考
✅
一、PA中使用的
操作系统
叫
Nanos-lite
, 它是南京大学操作系统Nanos的裁剪版.
二、要捋清楚Nanos-lite的启动的过程,本质是明白一般操作系统的启动流程,具体流程如下:
1.
启动引导加载程序
2.
引导加载程序的执行
3.
操作系统内核的加载
4.
用户空间的初始化
5.
启动完成
Nanos-lite具体的启动过程
✅
启动引导加载程序
针对于完整的操作系统:
计算机开机后(硬件),
BIOS(基本输入/输出系统)
将会首先运行。而这个BIOS所做的事情是进行硬件的自检,然后寻找可引导设备(磁盘,光盘),一旦找到可引导的设备,
BIOS
会加载该设备上的引导扇区到内存中,并将控制权交给这个引导加载程序。
针对于Nanos-lite:
通过查看Nanos-lite目录下的Makefile,得知Makefile将实现Nanos-lite源代码加入到
SRCS
这个变量中,做这个操作是将实现Nanos-lite的源代码编译何链接成可执行得二进制文件,使
Nanos-lite
能运行在
基于AM的loongarch32r-nemu
上。
✅
引导加载程序的执行
针对于完整的操作系统:
引导加载程序(通常是bootloader)会被加载到内存中,并开始执行。该引导加载程序的主要功能是加载操作系统的核心部分到内存中,并启动操作系统内核。这通常涉及到文件系统的解析、设备初始化和其他必要的操作。
针对于Nanos-lite:
通过交叉编译将Nanos-lite的源码变成可执行文件运行在基于AM的loongar32r-nemu上,似乎就已经实现完整的操作系统启动的前两个操作。
插入:
为什么我们的nanos-lite会和完整的操作系统启动过程这么不同呢?
这是因为针对完整的计算机的操作系统来说,它是固化到硬盘上某个地址位置,而普通计算机硬件启动后,会根据硬件跳转到硬盘中的某个地址将固化到里面的操作系统源代码加载到内存中,然后将控制权交给操作系统。而我们模拟的这个操作系统它并没有固化这个操作,因为它是交叉编译后诞生的产物。你可以这么来理解,就是我们所有的程序(nemu,nanos-lite,AM)都是在交叉编译完的这一刻诞生.
✅
操作系统内核的加载
针对于完整的操作系统:
引导加载程序通过文件系统,将操作系统内核加载到内存中的一个合适的地址,并开始启动内核。内核的启动过程包括初始化硬件设备、建立内存空间的映射关系、创建进程、初始化进程调度器等。
针对于Nanos-lite:
将Nanos-lite加载进来之后,后面的行为似乎和普通的操作系统没什么区别。开始启动内核,而内核的启动也是包含初始化硬件,建立内存空间的映射关系。