想象用户空间线程(通过WinApi创建)。用户线程(OS Windows)的内核模式堆栈是什么?
旁边:
- 线程环境块
- GDI处理,OpenGL的处理
- 用户空间的栈
- Therad内核(寄存器)
听说其持有的堆栈内核模式 - 12 KB - x86,24 KB - x64
q1:什么是内核堆栈的问题?
据我了解,当我们执行系统调用我们:
填入值,或在我们的上下文指针
启动寄存器通过INT中断甚至CALL(远调用保护模式)
在这里,我们是在内核中断服务例程。
Q2:我觉得 OS阻止用户线程,直到OS未完成的任务。是这样吗?
也许我们现在是在其中设备I/O控制管理器(如果我们发送IRP包)的一部分。也许在其他一些(如果我们决定创建信号量)。如果这段代码是可重入的,那么我认为系统可以从池中获得一个内核线程。
Q3:我认为,内核线程共享任何用户空间线程谁发起这一切工作。我错了吗?
你的第(3)步是错误的 - 线程没有被阻止,它继续运行在内核模式,使用它的内核模式堆栈。如果操作需要I/O或不能立即完成的IPC,则*线程将被阻塞。但在很多情况下,线程会自行执行请求的操作,并在完成时转换回用户模式。 (对于每次转换到内核模式,要求上下文切换到另一个线程的速度要慢得多)。 –
谢谢,但对我来说,内核由4个线程(kerels数)组成,用户空间可以由10个进程组成每个100个线程....为什么os需要在内核上存储1000个内核?我认为操作系统可以推动任务到队列中,阻止你的线程...... – bruziuz
我在内核模式下工作,但我没有创建线程他们....所以我不能说精确 – bruziuz