每当引导程序加载操作系统时,可能只有一个程序流处于活动状态,对吧?这意味着,一个处理器保存指令指针并执行它在EIP寄存器指向的位置处发现的命令。此时,系统如何开始利用更多进程和/或线程(没有用户态线程,但是cpu线程)?
每当引导程序加载操作系统时,可能只有一个程序流处于活动状态,对吧?这意味着,一个处理器保存指令指针并执行它在EIP寄存器指向的位置处发现的命令。此时,系统如何开始利用更多进程和/或线程(没有用户态线程,但是cpu线程)?
操作系统将以特殊角色启动(在BIOS和引导加载程序完成之后) - 因为运行它的第一个程序将直接访问所有CPU命令。
因此,它将设置系统的各个部分 - 如设置 中断处理程序 (或中断服务程序)。完成此操作后,它可以创建“调度程序”。
实际的“进程/线程”处理将由此调度程序完成。它决定了哪些线程将被运行。它还管理所有活动线程。 CPU没有意识到所有这些事情。
一旦调度程序的主执行程序决定执行线程(或“进程”)A,它就会将进程数据复制到寄存器中(并将寄存器存储到最近运行的线程的InfoBlock中)。它将告诉CPU /定时器导致中断 ñ 微秒(或其他时间单位)。然后它将告诉cpu在非OS模式下运行“程序”(CPU唯一知道的事情)(这样它就不会在未经许可的情况下修改关键数据或注册自己的中断处理程序)。
当线程A正在执行时,硬件计时器将运行。一旦达到所需的时间偏移,就会导致中断。然后硬件将停止执行当前程序,并将调用注册的程序 Interrupt Handler
而是哪个。这个处理程序将是调度程序的一个方法(确切地说是主执行程序)。
然后,此方法将再次重新评估应调度哪个线程,以便继续调度。
操作系统将以特殊角色启动(在BIOS和引导加载程序完成之后) - 因为运行它的第一个程序将直接访问所有CPU命令。
因此,它将设置系统的各个部分 - 如设置 中断处理程序 (或中断服务程序)。完成此操作后,它可以创建“调度程序”。
实际的“进程/线程”处理将由此调度程序完成。它决定了哪些线程将被运行。它还管理所有活动线程。 CPU没有意识到所有这些事情。
一旦调度程序的主执行程序决定执行线程(或“进程”)A,它就会将进程数据复制到寄存器中(并将寄存器存储到最近运行的线程的InfoBlock中)。它将告诉CPU /定时器导致中断 ñ 微秒(或其他时间单位)。然后它将告诉cpu在非OS模式下运行“程序”(CPU唯一知道的事情)(这样它就不会在未经许可的情况下修改关键数据或注册自己的中断处理程序)。
当线程A正在执行时,硬件计时器将运行。一旦达到所需的时间偏移,就会导致中断。然后硬件将停止执行当前程序,并将调用注册的程序 Interrupt Handler
而是哪个。这个处理程序将是调度程序的一个方法(确切地说是主执行程序)。
然后,此方法将再次重新评估应调度哪个线程,以便继续调度。
正确,在引导过程中只有一个执行线程。通常情况是这样,直到OS初始化到低级别内存管理,调度程序等功能的程度。
在多CPU系统中甚至就是这种情况 - 一个核心是处理早期启动的“主处理器”,直到基础设施开始启动其他核心。
最后,它是高度针对特定操作系统的;该 英特尔架构软件开发人员手册 有硬件规格的详细信息。 (假设您正在谈论英特尔架构;其他架构可能会有很大不同。)
(多线程)操作系统必须首先启动的是调度程序,它负责管理多个进程(因此也管理多个CPU线程,例如在多核机器上)。
此调度程序启动的第一个进程通常是某种“初始化”进程,后者又负责随后加载其他程序/进程。