我的问题是进程调度系统运行时是以什么样方式的运行,按照我的理解进程调度系统不可能以线程的方式运行,因为如果以线程方式运行,那么可能被自己调度出可运行队列
请各位大虾不吝赐教
5 个解决方案
#1
我不是搞Linux这种操作系统的哈。但是从通用的操作系统概念简单点说。
当时间片或者其他的硬件中断到来的时候。首先进入的是操作系统进程调度模块scheduler。然后调度模块根据不同的调度策略来选择下一个获得CPU的进程,把其任务描述符保存的上下文内容读出来,加载到CPU,然后跳到它该执行的地方,调度结束。
可以理解为,每一个时间片最最开头的那么一小小段时间,CPU都是在跑内核的调度模块,然后才供被调度的用户进程来用。具体的调度模块是以什么形式存在的,我个人感觉倒是不需要过分纠结,因为不同的操作系统有不同的特点。或许可以只是中断服务程序的一部分,或许是以一个专门的进程存在,都可啊。
当时间片或者其他的硬件中断到来的时候。首先进入的是操作系统进程调度模块scheduler。然后调度模块根据不同的调度策略来选择下一个获得CPU的进程,把其任务描述符保存的上下文内容读出来,加载到CPU,然后跳到它该执行的地方,调度结束。
可以理解为,每一个时间片最最开头的那么一小小段时间,CPU都是在跑内核的调度模块,然后才供被调度的用户进程来用。具体的调度模块是以什么形式存在的,我个人感觉倒是不需要过分纠结,因为不同的操作系统有不同的特点。或许可以只是中断服务程序的一部分,或许是以一个专门的进程存在,都可啊。
#2
我不是搞Linux这种操作系统的哈, same here.
用户态和内核态分别映射不同的地址空间. a small comment here: If necessary, say a ABI system call occurred from user space, data stored in the user space might be copied over to kernel space.
As for the process scheduling, if you are interested:
http://oreilly.com/catalog/linuxkernel/chapter/ch10.html
This book is pretty old, kernel has been changed a lot after 2000. But it should be OK as a starter...
用户态和内核态分别映射不同的地址空间. a small comment here: If necessary, say a ABI system call occurred from user space, data stored in the user space might be copied over to kernel space.
As for the process scheduling, if you are interested:
http://oreilly.com/catalog/linuxkernel/chapter/ch10.html
This book is pretty old, kernel has been changed a lot after 2000. But it should be OK as a starter...
#3
哈哈,楼上够直接,ULK第十章。。。
#4
#5
谢谢楼上几位,本人是做终端设备驱动的,最近对linux内核很感兴趣,在看深入linux内核这本书的过程中发现了很多疑惑,以后多交流哈
#1
我不是搞Linux这种操作系统的哈。但是从通用的操作系统概念简单点说。
当时间片或者其他的硬件中断到来的时候。首先进入的是操作系统进程调度模块scheduler。然后调度模块根据不同的调度策略来选择下一个获得CPU的进程,把其任务描述符保存的上下文内容读出来,加载到CPU,然后跳到它该执行的地方,调度结束。
可以理解为,每一个时间片最最开头的那么一小小段时间,CPU都是在跑内核的调度模块,然后才供被调度的用户进程来用。具体的调度模块是以什么形式存在的,我个人感觉倒是不需要过分纠结,因为不同的操作系统有不同的特点。或许可以只是中断服务程序的一部分,或许是以一个专门的进程存在,都可啊。
当时间片或者其他的硬件中断到来的时候。首先进入的是操作系统进程调度模块scheduler。然后调度模块根据不同的调度策略来选择下一个获得CPU的进程,把其任务描述符保存的上下文内容读出来,加载到CPU,然后跳到它该执行的地方,调度结束。
可以理解为,每一个时间片最最开头的那么一小小段时间,CPU都是在跑内核的调度模块,然后才供被调度的用户进程来用。具体的调度模块是以什么形式存在的,我个人感觉倒是不需要过分纠结,因为不同的操作系统有不同的特点。或许可以只是中断服务程序的一部分,或许是以一个专门的进程存在,都可啊。
#2
我不是搞Linux这种操作系统的哈, same here.
用户态和内核态分别映射不同的地址空间. a small comment here: If necessary, say a ABI system call occurred from user space, data stored in the user space might be copied over to kernel space.
As for the process scheduling, if you are interested:
http://oreilly.com/catalog/linuxkernel/chapter/ch10.html
This book is pretty old, kernel has been changed a lot after 2000. But it should be OK as a starter...
用户态和内核态分别映射不同的地址空间. a small comment here: If necessary, say a ABI system call occurred from user space, data stored in the user space might be copied over to kernel space.
As for the process scheduling, if you are interested:
http://oreilly.com/catalog/linuxkernel/chapter/ch10.html
This book is pretty old, kernel has been changed a lot after 2000. But it should be OK as a starter...
#3
哈哈,楼上够直接,ULK第十章。。。
#4
#5
谢谢楼上几位,本人是做终端设备驱动的,最近对linux内核很感兴趣,在看深入linux内核这本书的过程中发现了很多疑惑,以后多交流哈