基本的OS启动问题

lam*_*mas 5 boot assembly operating-system bios

我对计算机的引导过程以及引导加载程序调用操作系统的部分有一些基本的问题.

所以我知道BIOS将可引导驱动器的前512个字节复制到内存中并执行代码 - 这就是引导块.

  • 但是那个小型汇编程序如何从操作系统启动引导加载程序?
  • 引导加载程序是否继续运行并仍然充当软件和硬件之间的"发送器"?或完全控制操作系统?
  • 为什么所有的bootloader都是用汇编语言编写的?
  • 为什么在编写操作系统时必须从C++返回到C?

最好的问候,喇嘛

小智 12

1)引导加载程序通常包含一些简单的指令,用于从磁盘加载更多数据并执行它.

2)不,

3)尽量减少他们占用的空间.

4)你没有.


Dig*_*oss 6

  • 但是那个小型汇编程序如何从操作系统启动引导加载程序?

是的,引导程序很小,但BIOS不是,它实现..一直实现.. DOS I/O"系统调用".这个I/O系统最初在DOS和Windows早期运行整个OS I/O系统.现在它只是一个负责加载真实操作系统的控制台,然后提供所有自己的驱动程序.它是一种用于引导加载程序的设备驱动程序库和原始IBM-PC模拟器.

  • 引导加载程序是否继续运行并仍然充当软件和硬件之间的"发送器"?或完全控制操作系统?

一旦操作系统运行,引导加载程序就会出现.这是一个很好的问题,因为在最初的PC概念中,BIOS为操作系统和引导加载程序执行了I/O,因此系统的一部分在加载操作系统时仍然存在.

  • 为什么所有的bootloader都是用汇编语言编写的?

有几个原因:它们需要很小,它们有固定地址布局限制,它们必须进行int $ x样式的BIOS调用,并且考虑到它们的大小以及其中一些必须在汇编中的事实,没有太多的获取128个左右的字节并说"好吧,这个部分你可以用C写,尽量不要写超过10个左右的语句".

  • 为什么在编写操作系统时必须从C++返回到C?

C++今天很好; 当今天的大核心开始时,事情就不同了.