13

每当引导加载程序加载操作系统时,大概只有一个程序流处于活动状态,对吧?这意味着,一个处理器持有指令指针并执行它在 EIP 寄存器指向的位置找到的命令。在什么时候以及系统如何开始利用更多的进程和/或线程(没有用户态线程,但 cpu 线程)?

4

3 回答 3

7

操作系统将以特殊角色启动(在 BIOS 和引导加载程序完成后) - 因为第一个运行它的程序将直接访问所有 CPU 命令。

所以它将设置系统的各个部分——比如设置中断处理程序(或中断服务程序)。完成此操作后,它就有能力创建“调度程序”。

实际的“进程/线程”处理将由该调度程序完成。它决定将运行哪些线程。它还管理所有活动线程。CPU 不知道所有这些事情。

一旦调度程序的主执行程序决定执行线程(或“进程”)A,它会将进程数据复制到寄存器中(并将寄存器存储到最近运行的线程的 InfoBlock 中)。它将告诉 CPU / 计时器在n微秒(或其他时间单位)内引起中断。然后它会告诉 cpu 在非 OS 模式下运行“程序”(CPU 唯一知道的事情)(这样它就不会修改关键数据或未经许可注册自己的中断处理程序)。

当线程 A 现在正在执行时,硬件计时器将运行。一旦达到所需的时间偏移量,它将导致中断。然后硬件将停止当前程序的执行,并调用已注册的程序Interrupt Handler。这个处理程序将是调度程序的一个方法(准确地说是主执行程序)。

然后,此方法将再次重新评估应该调度哪个线程,因此调度会继续。

于 2009-04-12T13:42:09.560 回答
4

正确,在启动过程中只有一个执行线程。通常情况下,直到操作系统初始化到低级内存管理、调度程序等功能正常为止。

甚至在多 CPU 系统中也是如此——一个核心是处理早期启动的“主处理器”,直到基础设施在那里启动其他核心。

最后,它是高度特定于操作系统的;英特尔架构软件开发人员手册包含硬件规格的详细信息。(假设您谈论的是英特尔架构;其他架构可能会有很大不同。)

于 2009-04-12T13:27:01.453 回答
3

(多线程)操作系统必须启动的第一件事是调度程序,它负责管理多个进程(因此也管理多个 CPU 线程,例如在多核机器上)。

此调度程序启动的第一个进程通常是某种“init”进程,该进程又负责随后加载其他程序/进程。

于 2009-04-12T13:25:26.310 回答