`
memorymyann
  • 浏览: 270733 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

linux进程调度发生的时机

阅读更多

所谓调度时机就是:什么时候会发生进程调度。在linux中,进程调度的函数是schedule()。但执行了schedule的代码也不一定发生进程调度,进程调度真正的发生还会和进程调度的政策有关(就是我们在操作系统里面常常看到的:先来先服务,时间片轮流等等)。如果执行了schedule 发现按照规则,还是自己应该运行自然也不会发生进程调度,但可以说明一点,只有在schedule出现的地方才有可能发生进程调度。那么在linux中那些地方会出现schedule呢?


我们先从代码中找,看有哪些代码出现了schedule,代码有2种:自己的,别人的(这么分应该可以吧),对于linux来说就是系统内核代码(说白了就是操作系统作者写的)和其它不是作者的程序员写的(用户程序)。下面分2这2种来看:


1. 是用户程序自己调度schedule,也许有人会觉得我的代码中能引用schedule吗?也许不行吧,但大家知道wait4我们是可以调用的,前面我们没有给出wait4的代码,但我们知道在执行了wait4效果是父进程被挂起,所谓的挂起就是不运行了,放弃了CPU,这里发生了进程调度是显而易见的,其实在代码中有如下几行:

current->state = TASK_INTERRUPIBLE;schedule();还有exit也有current->state = TASK_ZOMBIE; schedule();这2种发生了进程调度,从代码上也可以看出(状态被改成了睡眠和僵死,然后去调度可运行进程,当前进程自然不会再占有CPU运行了),从效果中也能看出。这说明用户程序自己可以执行进程调度。


2.系统代码中,除了前面我们说到的wait4和exit等外,还有一个地方会出现了schedule,就是中断返回代码里面出现了,这里出现了还加了限制条件,我们可以看看这个代码(所谓的中断返回代码,就是恢复中断现场的代码,每一个发生中断都会执行到的代码,无论是什么中断),这段代码是:

277 testl $(VM_MASK | 3),%eax  # return to VM86 mode or non-supervisor?
278 jne ret_with_reschedule
279 jmp restore_all

我们看到jne ret_with_reschedule在此之前还有一次条件判断,代码就不过多解释了,意思是:当中断发生在用户控件时候才会执行ret_with_reschedule,那么我们就看到,在中断返回到用户空间的前夕也是可能会发生进程调度的。

 

那么现在就是中断返回用户空间前夕,还有用户程序自愿放弃CPU,这2种情况会发生进程调度。

 

意义:1.从前面知道,程序在系统空间是不会发生进程调度的,这意味着只要是系统空间运行的代码不管多长都是原子操作(可以说是个缺陷,如果执行时间过长,那么其他进程将会严重滞后,不过还好,内核代码设计可以避免,但不能根治)。这就能解决了临界资源共享问题(单CPU情况下,多CPU依然要注意)。

 

2.我们常常说多进程并发执行,这种假象就是靠的就是进程调度,如果没有进程调度,那就不是并发了。我们知道进程只有在结束时候才会exit,还有wait4不是常常使用的,那么就意味着多进程并发不能靠进程自觉,只有靠中断,那么就证实了以前说的,时钟中断的重要性。

分享到:
评论

相关推荐

    Linux进程调度算法分析

    操作系统进程调度是整个操作系统理论的核心,在设计进程调动机制需要考虑的具体问题主要有:调度的时机、调度的“政策”和调度的方式。 Linux 进程调度分为自愿调度和强制调度两种。自愿调度是指进程可以通过...

    Linux进程调度的时机问题.PDF

    Linux进程调度的时机问题.PDF

    linux进程调度策略

    本文将深入探讨Linux进程调度的相关知识点,包括进程调度的重要性、实时进程与普通进程的区别、优先级的概念以及调度策略等内容。 #### 二、进程调度的重要性 进程调度在Linux系统中扮演着关键角色,主要体现在...

    Linux进程调度的时机问题.pdf

    本文主要探讨了Linux进程调度的时机问题,这对于理解和优化Linux系统的性能至关重要。Linux进程调度涉及到多个状态转换和触发事件,这些都直接影响到系统的响应速度和整体效率。 首先,Linux进程的状态模型包括以下...

    LINUX进程调度算法的分析

    【LINUX进程调度算法的分析】 进程调度是操作系统中至关重要的一部分,它决定了CPU时间的分配方式,直接影响到系统的性能、响应时间和公平性。在Linux操作系统中,存在两种主要的普通进程调度算法,一种是以进程为...

    Linux进程调度时机 Schedule函数解析

    Linux进程调度时机Schedule函数解析 Linux进程调度时机Schedule函数解析是Linux操作系统中一个核心组件,负责决定何时执行进程切换。Schedule函数是Linux调度程序的核心组件,决定了进程的调度时机。 调度时机是指...

    Linux2.6进程调度机制的剖析.pdf

    Linux2.6 内核的进程调度机制可以分为三个部分:调度时机、调度策略和调度算法。调度时机是指什么时候应该进行进程调度,而调度策略是指在什么时候使用什么样的调度算法。 Linux2.6 内核提供了三种调度策略:SCHED_...

    LINUX内核的进程调度策略.doc

    Linux内核的进程调度策略是操作系统的核心组成部分,它决定了如何有效地在多个进程中分配CPU资源,以确保系统的公平性和响应速度。调度策略主要包括调度时机、调度方式和调度策略,这三个方面共同构成了Linux内核中...

    基于Linux系统中进程调度分析.pdf

    【Linux进程调度】Linux操作系统是一个多用户、多任务的系统,它通过公平且高效地调度多个进程,实现了系统的并发执行。Linux并不依赖单一的调度策略,而是结合了多种调度策略,如优先级调度、时间片轮转和先进先出...

    Linux进程调度策略的分析.pdf

    首先,理解Linux进程调度的时机至关重要。调度时机分为两种类型:主动调度和被动调度。主动调度发生在进程主动释放CPU,如进程终止、进入睡眠状态或在特定信号处理过程中。而被动调度则是在不显式调用schedule()函数...

    Linux进程调度的源码分析 基于Linux Kernel 4.4.2

    ### Linux进程调度的源码分析 #### 进程调度预备知识 **1.1 多任务** 多任务是指操作系统能够同时并发地执行多个进程。在单处理器系统中,通过快速切换进程来创建一种多任务执行的错觉。实际上,任何时刻只有一个...

    嵌入式Linux进程调度的研究.pdf

    首先,文章分析了Linux进程调度的时机,主要有以下几个方面:1)系统调用返回到用户态时,会触发schedule()函数;2)在进程生命周期的关键点,如进程挂起、睡眠或终止,系统会进行调度;3)当进程等待资源(如缓冲区、i...

    Linux进程调度算法的研究及改进.pdf

    【Linux进程调度算法的研究及改进】 在多处理器系统中,负载平衡是确保系统效率的关键,但同时也可能导致缓存失效的问题。缓存失效是指由于进程在不同处理器之间迁移,导致缓存中的数据失去有效性,从而降低了...

    linux进程间调度schedule()

    Linux 进程调度机制schedule() Linux 进程调度机制是操作系统核心组件之一,它负责管理和调度进程的执行顺序。 Schedule() 函数是 Linux 的调度程序,负责决定是否要进行进程的切换。 调度时机 调度时机是指在...

    嵌入式系统/ARM技术中的Linux进程调度时机

    总结来说,Linux进程调度机制在嵌入式系统/ARM技术中扮演着关键角色,通过精确控制调度时机和协同调度函数,确保了系统的高效和公平运行。理解这些时机和机制对于优化嵌入式系统的性能和稳定性至关重要。

    基于Linux的进程调度研究.pdf

    【基于Linux的进程调度研究】 ...总的来说,文章详细介绍了Linux进程调度的原理,重点讨论了优先级反向问题及其解决方案,对于操作系统设计和系统开发领域的研究人员及专业开发者来说,是一份重要的参考文献。

Global site tag (gtag.js) - Google Analytics