低级编程:操作系统如何启动新的线程/进程?

时间:2009-04-12 13:14:59

标签: multithreading operating-system process cpu low-level

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

3 个答案:

答案 0 :(得分:5)

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

因此它将设置系统的各个部分 - 比如设置Interrupt Handlers(或中断服务程序)。完成此操作后,它可以创建“调度程序”。

实际的“进程/线程”处理将由此调度程序完成。它决定了哪些线程将被运行。它还管理所有活动线程。 CPU没有意识到所有这些事情。

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

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

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

答案 1 :(得分:4)

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

在多CPU系统中甚至就是这种情况 - 一个核心是处理早期启动的“主处理器”,直到基础设施开始启动其他核心。

最终它具有高度的操作系统特性; Intel Architecture Software Developer's Manuals具有硬件规格的详细信息。 (假设您正在谈论英特尔架构;其他架构可能会有很大不同。)

答案 2 :(得分:3)

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

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