在单个内核线程操作系统上进行多重编程

时间:2019-02-12 15:50:33

标签: operating-system

假设有一个具有单个处理器的系统和一个具有单个内核线程的操作系统,并且我运行的C program具有scanf() function

现在,如果我执行程序并且不提供值。 内核将如何处理?是指scanf()执行阻塞的系统调用,read()并且内核正在处理器上执行以处理系统调用并被阻塞。内核将如何使另一个本身被阻塞的进程运行。

在单个内核线程操作系统上如何支持多程序。

2 个答案:

答案 0 :(得分:0)

内核不必为每个用户线程都具有线程上下文。特别是,许多微内核根本没有内核线程上下文的概念。这些 stateless 内核操纵表示线程的数据结构,因此当人们想 read 时,kenrel可能会启动io并排队一个数据结构(延续)以记录要做什么当io完成时。然后,在io操作正在进行时,内核可以自由选择另一个线程来运行。

经典的 heavyweight 线程模型由于unix(后来的linux)而变得无处不在,但绝不是唯一的,甚至不是最好的模型。

答案 1 :(得分:0)

  

内核将如何处理?我的意思是,由于scanf()执行了阻塞的系统调用,因此read()且内核正在处理器上执行以处理系统调用并被阻塞。内核将如何运行另一个本身被阻止的进程。

如果系统支持“多于CPU的线程”;那么它必须有一些东西(一个调度程序)来确定哪个线程可以在某个地方(也许在内核中,也许没有)使用哪个CPU。在这种情况下,希望(但不是必须),如果线程阻塞,则调度程序会将线程标记为阻塞(以及原因),然后将CPU分配给其他线程,然后再通知(无论何时有阻塞线程在等待)发生),调度程序将取消阻塞该线程,并使其再次使用CPU。