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

pri*_*bel 11 cpu multithreading operating-system process low-level

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

Mar*_*rth 5

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

因此,它将设置系统的各个部分 - 如设置中断处理程序(或中断服务程序).完成此操作后,它可以创建"调度程序".

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

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

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

然后,此方法将再次重新评估应调度哪个线程,从而继续调度.