在Linux0.11中,我们可以看到存在一个main.c和main()
据我理解,对象代码需要一个操作系统来运行它。
我的意思是,既然Linux0.11是一个操作系统,那么谁在前面运行它呢?多斯莱斯?
发布于 2019-03-19 00:43:27
Linux内核,特别是在0.11天内,直接由硬件BIOS加载。
基本上,BIOS查看引导扇区(软盘)或硬盘的主引导记录,并加载该扇区。使用硬盘,MBR然后加载“主分区”引导扇区。
这个加载的引导扇区有足够的信息来了解如何将内核加载到内存中,然后运行它。
对于旧的0.11磁盘,它实际上是软盘引导解决方案,内核位于一个磁盘上,根位于另一个磁盘上,因此引导系统非常简单。
当Linux处理硬盘时,引导过程仍然非常简单。它是如此简单,以至于可以创建诸如"loadlin“这样的工具,这是一个简单的DOS程序,可以加载Linux内核并引导到其中,并模拟BIOS加载程序。通过这种方式,可以创建一个DOS config.sys菜单来引导DOS或Linux;这是一种早期的双引导形式。
但从本质上讲,Linux内核是从“裸金属”加载的,并接管了机器。
发布于 2019-03-19 00:49:49
main函数是C语言的一个特性。如何将其转换成计算机指令,使CPU“从这里开始”基本上是编译器实现的细节。在裸金属上,通常只需依靠硬件在第一次启动时在特定的内存地址开始执行。早期版本的Linux依赖于一个简单的x86引导加载程序;现在,这个角色通常由Grub来处理。这种行为反过来又取决于BIOS固件约定,但实际上,在每个级别上,您都有一个具有如何启动程序的约定的计算机体系结构。
https://unix.stackexchange.com/questions/507080
复制相似问题