2个回答
展开全部
Linux 的启动是因为他的 GRUB 的 MBR 里面的代码和 Windows 的 MBR 程序启动方式不同而已。
首先说 MBR 共计 512字节,里面只有 446 字节可以放程序内容,其余空间有一个 55AA 标志和一个 4*16 字节的主分区表数据。
主分区表只有 4 个位置,每个分区 16 字节的表示数据。扩展分区也在这里,但扩展分区的逻辑分区表却不在这里能体现,导致真正存储数据的逻辑分区不能直接找到(需要先通过读取主分区表,找到扩展分区表的入口位置,这个位置其实就是扩展分区在的硬盘中间数据区的开始段落。但逻辑分区表不是连续的数据,他是一个链式数据,每次的数据只是表明本逻辑分区的状况,以及标明下一个分区的开始位置),需要更多的代码功能才能完整的访问全扩展分区。
Linux 的 GRUB MBR 里面的代码是读取固定位置,也就是 MBR 之后紧邻的空闲的几个扇区里面的代码继续启动,这部分代码再读取分区表、继续启动硬盘某个特定位置的 GRUB 二级程序。之后 GRUB 二级程序读取分区驱动等东西后,读取 Linux / 或者 /boot 分区里面的 grub.conf 配置程序按设置显示选择界面或者读取内核启动 Linux。
Windows 的 MBR 里面的代码只有 MBR 里面的 446 字节。这个 MBR 程序因为和分区表都在 MBR 扇区里面,BIOS 启动系统时,会固定先读取这 512 字节并且运行他,结果就是不需要任何的操作,446 字节就可以知道分区表状况。 Windows 的 MBR 程序就直接扫描这 4*16 字节,找到标记为“激活”的分区,那么就读取这个分区的 superblock 的 boot 区,并且运行 boot 区程序。
这样你看到区别没:
GRUB 是先启动自己到足够的功能后再看分区表。Windows 是直接看主分区表之后启动对应位置的系统启动程序。
这就导致了 GRUB 代码体积更大,但功能更多。Windows 的 MBR 程序体积很小,但功能简单。
这是两种不同的计算机系统实现方式,相对来说 GRUB 的限制更多,因为他某些环节需要用直接地址的方式读取大量的程序代码。而 Windows 只需要在自己的 C 盘上的 boot 区域放好真正的启动程序就行了。
GRUB 需要某些代码不能变地方,Windows 只需要自己的 C 盘某些地方必须是启动代码。前者更灵活,因为 GRUB 的某些启动代码可以任意放置,只要前期程序可以找到。Windows 因为整个系统都是自己掌控,所以固定位置可以方便减小功能要求。
各有各的好处,其实 GRUB 也支持类似 Windows 的那种 MBR 启动某个主分区上的 GRUB 来继续启动系统的功能。不过 Linux 不是一家掌握的,而且Linux 分区是针对服务器、多用户设计的,文件就是散开放置的,位置很难固定。Windows 不光数据是连续存放,而且整个系统底层自己控制,可以很方便的保证某部分空间放置特定的文件体。
其实都是 BIOS 折腾的,BIOS 功能太简单,所以限制了系统的启动。
苹果机上面用的是 EFI ,这个要比 BIOS 好很多,所以 MAC 的系统启动会灵活很多。不需要折腾 446 字节的程序代码问题。
首先说 MBR 共计 512字节,里面只有 446 字节可以放程序内容,其余空间有一个 55AA 标志和一个 4*16 字节的主分区表数据。
主分区表只有 4 个位置,每个分区 16 字节的表示数据。扩展分区也在这里,但扩展分区的逻辑分区表却不在这里能体现,导致真正存储数据的逻辑分区不能直接找到(需要先通过读取主分区表,找到扩展分区表的入口位置,这个位置其实就是扩展分区在的硬盘中间数据区的开始段落。但逻辑分区表不是连续的数据,他是一个链式数据,每次的数据只是表明本逻辑分区的状况,以及标明下一个分区的开始位置),需要更多的代码功能才能完整的访问全扩展分区。
Linux 的 GRUB MBR 里面的代码是读取固定位置,也就是 MBR 之后紧邻的空闲的几个扇区里面的代码继续启动,这部分代码再读取分区表、继续启动硬盘某个特定位置的 GRUB 二级程序。之后 GRUB 二级程序读取分区驱动等东西后,读取 Linux / 或者 /boot 分区里面的 grub.conf 配置程序按设置显示选择界面或者读取内核启动 Linux。
Windows 的 MBR 里面的代码只有 MBR 里面的 446 字节。这个 MBR 程序因为和分区表都在 MBR 扇区里面,BIOS 启动系统时,会固定先读取这 512 字节并且运行他,结果就是不需要任何的操作,446 字节就可以知道分区表状况。 Windows 的 MBR 程序就直接扫描这 4*16 字节,找到标记为“激活”的分区,那么就读取这个分区的 superblock 的 boot 区,并且运行 boot 区程序。
这样你看到区别没:
GRUB 是先启动自己到足够的功能后再看分区表。Windows 是直接看主分区表之后启动对应位置的系统启动程序。
这就导致了 GRUB 代码体积更大,但功能更多。Windows 的 MBR 程序体积很小,但功能简单。
这是两种不同的计算机系统实现方式,相对来说 GRUB 的限制更多,因为他某些环节需要用直接地址的方式读取大量的程序代码。而 Windows 只需要在自己的 C 盘上的 boot 区域放好真正的启动程序就行了。
GRUB 需要某些代码不能变地方,Windows 只需要自己的 C 盘某些地方必须是启动代码。前者更灵活,因为 GRUB 的某些启动代码可以任意放置,只要前期程序可以找到。Windows 因为整个系统都是自己掌控,所以固定位置可以方便减小功能要求。
各有各的好处,其实 GRUB 也支持类似 Windows 的那种 MBR 启动某个主分区上的 GRUB 来继续启动系统的功能。不过 Linux 不是一家掌握的,而且Linux 分区是针对服务器、多用户设计的,文件就是散开放置的,位置很难固定。Windows 不光数据是连续存放,而且整个系统底层自己控制,可以很方便的保证某部分空间放置特定的文件体。
其实都是 BIOS 折腾的,BIOS 功能太简单,所以限制了系统的启动。
苹果机上面用的是 EFI ,这个要比 BIOS 好很多,所以 MAC 的系统启动会灵活很多。不需要折腾 446 字节的程序代码问题。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询