请各位大牛帮我解决这个疑惑

时间:2022-04-20 21:39:40
linux kernel的进程调度系统调度的是进程,分时共用CPU去运行代码,内核态时内核空间代码在cpu上运行,用户态时用户空间代码在cpu上运行,用户态和内核态分别映射不同的地址空间,这样的理解正确么?

我的问题是进程调度系统运行时是以什么样方式的运行,按照我的理解进程调度系统不可能以线程的方式运行,因为如果以线程方式运行,那么可能被自己调度出可运行队列

请各位大虾不吝赐教

5 个解决方案

#1


我不是搞Linux这种操作系统的哈。但是从通用的操作系统概念简单点说。
当时间片或者其他的硬件中断到来的时候。首先进入的是操作系统进程调度模块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...

#3


哈哈,楼上够直接,ULK第十章。。。

#4


引用 3 楼 Heaven_Redsky 的回复:
哈哈,楼上够直接,ULK第十章。。。


请各位大牛帮我解决这个疑惑

#5


谢谢楼上几位,本人是做终端设备驱动的,最近对linux内核很感兴趣,在看深入linux内核这本书的过程中发现了很多疑惑,以后多交流哈

#1


我不是搞Linux这种操作系统的哈。但是从通用的操作系统概念简单点说。
当时间片或者其他的硬件中断到来的时候。首先进入的是操作系统进程调度模块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...

#3


哈哈,楼上够直接,ULK第十章。。。

#4


引用 3 楼 Heaven_Redsky 的回复:
哈哈,楼上够直接,ULK第十章。。。


请各位大牛帮我解决这个疑惑

#5


谢谢楼上几位,本人是做终端设备驱动的,最近对linux内核很感兴趣,在看深入linux内核这本书的过程中发现了很多疑惑,以后多交流哈