精华内容
下载资源
问答
  • 中断处理与进程调度的区别 对于中断处理和进程调度的抢占方式(处理机调度),因为二者都有打断的性质,都是抢占了CPU,所以容易混淆。 首先,中断处理是外设打断进程,比如一个进程在使用cpu,它的某条指令到达了...

    中断处理与进程调度的区别

    对于中断处理和进程调度的抢占方式(处理机调度),因为二者都有打断的性质,都是抢占了CPU,所以容易混淆。
    首先,中断处理是外设打断进程,比如一个进程在使用cpu,它的某条指令到达了中断周期,那么,这个进程被中断。(注意:是被外设中断而不是被一个进程打断。就算中断嵌套嵌套的也是其他中断而不是进程。中断服务程序的执行并不视为进程执行)
    进程调度抢占方式则是CPU中一个进程打断另一个执行中的进程。(如处于改进程某条指令的取值、执行或者非中断处理的任何时候)
    所以可以这么认为——中断处理是进程A执行过程中发生的,且一旦发生无法切换为另一个进程B。

    为什么中断处理时无法进行处理机调度(进程切换)?
    因为中断恢复所需要的所有数据都放在被中断进程的内核栈中,如果发生切换就找不到之前的被中断进程了,使得中断无法恢复。
    注:中断处理保存PC(隐指令保存断点)和PSW、通用寄存器内容(保护现场)都是为了恢复被中断进程。进程切换保存PC、PSW是为了下次再轮到被切换进程执行时该从哪开始。从这点看,他们的任务是一致的。(都是保存在被中断\切换进程的PCB中)

    关于进程切换必须用到中断的问题

    进程切换必定使用中断,这似乎与上文所述发生了矛盾,但实际上——上文所有中断说的都是外中断,而不是内中断。
    进程切换不可发生在外中断过程,但必定发生在内中断过程
    因为进程切换必定发生在内核态(管态),而“中断”,严格地说——“内中断”是目态进入管态的必要不充分条件,所以可见进程切换必定借助内中断且必定发生了处理机模式切换。(更确切的说这个内中断是软中断(指令产生的),是自愿的,往往这个软中断就是访管指令)

    展开全文
  • 进程调度 中断

    千次阅读 2011-06-08 17:52:00
    BUG:scheduling while atomic 通过学习,发现在中断的回调中,如果调用msleep函数,会引起进程调度,这时就会警告:scheduling while atomic 其实如果调用其他可能导致中断进程睡眠的函数如:down_interruptible...

    BUG:scheduling while atomic

     

    通过学习,发现在中断的回调中,如果调用msleep函数,会引起进程调度,这时就会警告:scheduling while atomic

     

    其实如果调用其他可能导致中断进程睡眠的函数如:down_interruptible(),也会出现这样的问题。

     

    内核检测到了这个问题,便给出了警告。

     

    ============================================

    参考:http://ecdav.cuc.edu.cn/bbs/viewthread.php?tid=145

     

              在spin lock 期间,调用了可以睡眠的 down_interruptible()函数。内核检测到了这个问题,便给出了警告。

     

    参考:http://bbs.chinaunix.net/thread-1939737-1-1.html

     

     

    顾名思义,kmap_atomic和kunmap_atmoic之间是不允许调度的,而f_op->read()是有可能引起调度的。一旦发生调度的话就可能发生问题:
    scheduling while atomic有几种case,比如:
    1. 如果你抓了一把spinlock,然后被调度出去了,就可能会引起死锁的问题。
    2. 就kmap_atomic和kunmap_atomic之间,不允许被调度出去,防止别的process也去调用kmap_atomic,如果交叉调用的话,就会出现问题了。

    kernel打出warning只是提醒你,这样做可能会有问题,但是问题不一定现在就会发生。。。

    展开全文
  • 进程调度算法Linux进程调度算法

    千次阅读 2018-02-06 20:02:27
    这次介绍一下操作系统的进程调度算法 操作系统的调度分为三种:1.远程调度(创建新进程);2.中程调度(交换功能的一部分);3.短程调度(下次执行哪个进程) 这次讲述的就是短程调度,可以简单的看作咱们平时...

    这次介绍一下操作系统的进程调度算法

    • 操作系统的调度分为三种:1.远程调度(创建新进程);2.中程调度(交换功能的一部分);3.短程调度(下次执行哪个进程)

    这次讲述的就是短程调度,可以简单的看作咱们平时所说的进程调度啦

    当发生下面几种情况的时候会调用短程调度器,然后就看下次执行那个进程啦

    • 时钟中断
    • I/O中断
    • 操作系统调用
    • 信号(如信号量)

     

    • 进程调度算法:
      • 先来先服务(FCFS)
      • 短作业优先(SPN)
      • 最短剩余时间(SRT)
      • 时间片轮转
      • 最高响应比优先
      • 公平共享调度

     

     

    • 先来先服务


    就和名字一样,哪个进程先来就先获得处理器时间,,用一个队列暂存等待处理器的进程,优点是实现简单(太简单了吧喂),缺点,遇到那种又臭又长的进程就很不爽了,好比食堂打饭,前面的人不买一直问,后面的人一直排队,那么后面的人就怎么了呢?后面的人就饥饿!同时如果现在有一个马上就要饿死的人急需吃饭,这就很尴尬了(紧急的进程无法处理,优先级高的进程处于饥饿状态),所以有了优先级队列的先来先服务算法,这样也不是很好,因为总有又臭又长的进程,排队是谁都不乐意的吧,而且处理器时间就不公平了。

    • 短作业优先

    因为先来先服务不好,所以有了短作业优先,通过设置执行时间短的进程作业的优先级为高来实现,也很简单粗暴,就是说进程时间越短就越先执行,看着是比较好了,不浪费时间了,但是有没有想过长进程的感受,来了一群短的进程,然后一直来短进程,这是要饿死长进程的节奏,人家长有错么?如果是可抢占的方式(见最短剩余时间版本),就更惨了,只要来了更短的就别想好好执行了。。。

    • 最短剩余时间

    就是刚才说的短作业优先的抢占版本,说过他的缺点了,当前执行的进程还剩10个时间单位,但是一直来了一群只要2个时间单位就跑完的进程,那当前的进程就会被抢占,然后含恨饿死。。

    • 时间片轮转

    既然上面几种算法都有可能出现饥饿进程,那么我就干脆让每个进程都执行那么一会,这样不就比较公平了?每个进程都有机会在处理器上跑,看起来很和谐,但是还是没有解决优先级的问题,优先级不好控制,比如有什么紧急的进程需要立即执行,就不好办了。而且每个进程的具体情况也是不一样的,比如有I/O消耗型进程,和处理器消耗型进程,在同样的事件片里真正占用处理器的时间是不一样的,而我们是真正占用处理器的时间希望能一样的,这样就公平了嘛。这样看来,时间片轮转也是有缺点的。

    • 最高响应比优先

    什么是响应比?看一下这个公式:R=(w+s)/s,其中R是响应比,w是等待处理器的时间,s是期待的服务时间,简单的来说响应比就是,进程从加入等待队列开始一直到执行完毕经历的时间除以进程使用处理器的时间,这个响应比比较高的就证明该进程等待比较久了,它估计会很饿,先让它吃!

    • 公平共享调度

    Linux系统中普通进程使用的调度方法就是公平共享调度的一个实例,被称作完全公平调度算法(CFS),虽然一定不可能公平。。。详情参照我的另一篇博客。。传送门召唤!!:http://www.cnblogs.com/lenomirei/p/5516872.html

    • Linux系统中的进程调度方案

    Linux在进行进程调度的时候把进程分为两种:1.普通进程;2.实时进程

    实时进程的优先级永远比普通进程的优先级高,也就是说实时进程只要来了就可以抢占普通进程,而且还抓住处理器就不撒手,直到所有的实时进程都执行完毕,才会把处理器让出来给普通进程使用

    之前也说了,普通进程的调度采用的是完全公平调度(CFS)对应的是SCHED_NORMAL

    而实时进程采用的调度方法就比较简单粗暴了,Linux提供了两种实时调度策略:SCHED_FIFO和SCHED_RR。

    SCHED_FIFO:简单的先入先出的调度算法,不使用时间片,只可能被更高优先级的FIFO或者SCHED_RR抢占

    SCHED_RR:时间片轮转的方式,优先级比SCHED_FIFO还要高,可以抢占SCHED_FIFO

    实时进程的调度没有实时优先级这一说法,采用的是静态优先级,一开始定好优先级之后就不会改变了。

    展开全文
  • 进程调度 进程调度的时机 在上篇中说到,进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。我们现在来说说什么时候需要使用到进程调度。 其实,进程调度与切换的时机分为两种情况,...

    进程调度


    进程调度的时机

    在上篇中说到,进程调度(低级调度),就是按照某种算法从就绪队列中选择一个进程为其分配处理机。我们现在来说说什么时候需要使用到进程调度与切换。
    进程调度与切换的时机分为两种情况,一种是当前运行的进程主动放弃处理机,还有一种是当前运行的进程被动放弃处理机。接下来看看它们分别对应什么事件。

    • 当前运行的进程主动放弃处理机
      1. 进程正常终止。
      2. 运行过程中发生异常而终止。(如 内中断)
      3. 进程主动请求阻塞。(如 请求使用打印机)
    • 当前运行的进程被动放弃处理机
      1. 分配给该进程的时间片用完。
      2. 有更紧急的事情要处理。(如 外中断)
      3. 有更高优先级的进程进入就绪队列。

    注意:有的系统只允许进程主动放弃处理机,而在有的系统,进程可以既主动放弃处理机,又可以被剥夺处理机(当有更紧急的任务需要处理时)。

    当然,有时候我们也不能进行进程调度与切换,比如以下的情况。

    • 不能进行进程调度与切换的情况
      1. 在处理中断的过程中。中断处理过程复杂,与硬件密切相关,很难做到在中断处理的过程中进行进程调度与切换。
      2. 在原子操作过程中(原语)。原子操作不可中断,要一气呵成。
      3. 进程在操作系统内核程序临界区中时。 (这个在下面会解释)

    对遗留问题的解释

    在解释上述问题之前,先说说什么是临界资源,什么是临界区。

    • 临界资源:一段时间内只允许一个进程使用的资源。即 各个进程只能互斥的访问临界资源。
    • 临界区:程序中访问临界资源的那段代码

    内核程序临界区一般是用来访问某种内核数据结构(临界资源)的代码。对于就绪队列这种内核临界资源,当有一个进程访问就绪队列时,该进程会给就绪队列上锁,以防其他进程的访问,所以此时我们不能进行进程调度,因为就绪队列被上锁了,进程调度相关进程无法访问该队列。

    所以,进程在操作系统内核程序区时的确不能进行进程调度,但进程处于(普通)临界区时还是可以进行进程调度的,下面对其解释。
    内核程序临界区和普通临界区不一样,普通临界区访问的临界资源不会直接影响到操作系统内核的管理工作,比如进程请求打印机这种临界资源,由于打印机准备需要时间,CPU总不能一直等待打印机准备完毕吧,所以此时需要进行进程调度。


    进程调度的方式

    进程调度的方式分为两种,分别是非剥夺式调度方式和剥夺式调度方式

    • 非剥夺调度方式
      该方式又称非抢占方式。该方式只允许进程主动放弃处理机。在运行过程中即使有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态。这种方式实现简单,系统开销小,但是无法及时的处理紧急任务,适合于早期批处理系统。

    • 剥夺调度方式
      该方式又称抢占方式。该方式允许进程处理机被剥夺。当有一个进程正在处理机上运行时,如果有一个更重要的进程需要使用处理机,操作系统会立即暂停正在运行的进程,将处理机分配给更重要的那个进程。这种方式实现相对复杂,但是可以优先处理紧急任务,也可以实现让各进程按时间片规划轮流执行相应的功能(通过时钟中断),适合于分时操作系统、实时操作系统。

    以上两种方式类似于银行排队,非剥夺调度方式就是每个人都按照顺序排好,顺序的完成需求,安分守己,而剥夺调度方式就是,当你正在处理需求的时候,来了一个彪形大汉,强制的把你从队头中踢出。

    进程调度的狭义与广义

    • 狭义的进程调度
      狭义的进程调度只是指从就绪队列中选择一个进程,为其分配处理机资源,不包括进程切换。
    • 广义的进程调度
      广义的进程调度包括了选择进程和切换进程两个过程。

    小贴士:进程切换是有代价的,如果过于频繁的进行进程调度、切换,必然会导致整个系统的工作效率降低,使系统大部分时间都花在进程切换上,而使真正用于运行进程的时间减少。


    总结

    在这里插入图片描述

    感谢

    以上内容大部分来自王道操作系统系列视频教学。

    展开全文
  • 内核抢占进程之间的并发得以避免 中断屏蔽的使用方法 local_irq_disable(); critical section ();//临界区 local_irq_enable();
  • 在_timer_interrupt计时中断中,通过do_timer进行进程调度。如果需要进行调度,即调用了switch_to的宏。此时CPU会切换到下一个新的进程。因为每一个进程都有自己的核心堆栈,_timer_interrupt中断的调用堆栈将保存在...
  • 完全基于中断的统一进程调度系统

    千次阅读 2012-04-21 13:23:27
    4.4BSD中将内核态下的进程根据其行为赋予了不同的优先级,然而中断可以打破进程的执行,并且中断还可以发布一些所谓的软中断,以高于进程优先级的优先级来执行,这看起来不是很和谐。实际上,可以使用更加和谐的方式...
  • 进程调度:Linux里的进程管理调度,如何调度使用不同的进程占用不同的时间片段,主要在核心函数 scheduler_tick (kernel/sched.c) 硬中断触发对操作系统来说,中断是一种电信号,由硬件设备产生,并直接送入中断...
  • linux进程调度中断处理: 简单起见,只先看单核cpu的场景。 ①在linux内核中,每一个进程都有对应的进程上下文数据结构,其中存储了本进程相关的属性信息、运行时的状态信息以及对应的u区表、用户栈、内核栈等等...
  • 在程序运行时,产生中断或异常事件,运行程序被中断,转向中断处理程序。这两种情况都是通过中断机制发生,可以说中断和异常是用户态到核心态转换的唯一途径。  当系统产生中断或异常,处理器将作出响应并交换...
  • 进程调度

    2016-04-17 21:24:26
    进程调度,进程切换,进程上下文,中断上下文
  • 日期 内核版本 CPU架构 作者 2019.04.06 Linux-5.0 ...时钟中断是系统中调度和抢占的驱动因素,在时钟中断中会进行进程运行时间的更新等,并更新调度标志,以决定是否进行调度。下面以Pow...
  • linux内核中断,下半部,同步机制.如果受欢迎,将完整更详细的更新。
  • 1理解进程调度时机跟踪分析进程调度与进程切换的过程:  schedule()调用发生在中断处理过程(包括时钟中断、I/O中断、系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用...
  • 一、Linux进程调度时机 进程状态转换的时刻:进程终止、进程睡眠; 当前进程的时间片用完时(current->counter=0); 设备驱动程序; 进程从中断、异常及系统调用返回到用户态时。 二、实验截图 可以...
  • 849 进程调度

    2020-10-07 17:27:34
    进程调度 进程调度的基本概念 概念: 合理的对进程进行处理机分配 调度的层次 作业调度(高级调度):从辅存中选择作业送入内存,每个作业调入一次,调出一次 内存调度(中级调度):提高内存的利用率和系统吞吐量,...
  • 进程调度之核心调度器 调度行为的发生一般有两种方式:自己主动放弃CPU并进入等待运行队列,该过程通过主调度器实现;系统通过中断周期性地检查进程状态,以确定是否需要调度,该过程通过周期性调度器实现。 主调度...
  • linux进程调度

    2012-09-01 11:01:29
    文章不长,但对linux进程调度策略讲解的很浅显易懂,实时进程,普通进程的调度,区别,优先级,调度的公平性,调度的时机,内核抢占,中断

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,485
精华内容 994
关键字:

中断进程调度