精华内容
下载资源
问答
  • 2022-02-03 18:48:15

    有两种调度模型:分时调度模型和抢占式(java默认使用)调度模型。

    • 分时调度模型: 平均分配每个线程占用的 CPU 的时间片。
    • 抢占式调度模型: 让优先级高的线程占用CPU,如果线程优先级相同,那么就随机选择一个线程。
    更多相关内容
  • 进程和线程调度算法

    千次阅读 2019-07-29 13:12:54
    调度算法是指:根据系统的资源分配策略所规定的资源分配算法,如任务A在执行完后,选择哪个任务来执行,使得某个因素(如进程总执行时间,或者磁盘寻道时间等)最小。对于不同的系统目标...

    调度算法是指:根据系统的资源分配策略所规定的资源分配算法,如任务A在执行完后,选择哪个任务来执行,使得某个因素(如进程总执行时间,或者磁盘寻道时间等)最小。对于不同的系统目标,通常采用不同的调度算法。

    几个常用的操作系统进程调度算法。

    1 先来先服务(队列)

    先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。
    缺点:比较有利于长作业,而不利于短作业。 有利于CPU繁忙的作业,而不利于I/O繁忙的作业。

    2 最短优先(优先队列)

    最短优先调度算法是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
    缺点:长作业的运行得不到保证。

    2 高优先权优先调度算法

    2.1 优先权调度算法的类型

    为了照顾紧迫型作业,使之在进入系统后便获得优先处理,引入了最高优先权优先(FPF)调度算法。此算法常被用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统中。当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程,这时,又可进一步把该算法分成如下两种。
    1) 非抢占式优先权算法
    在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。这种调度算法主要用于批处理系统中;也可用于某些对实时性要求不严的实时系统中。
    2) 抢占式优先权调度算法
    在这种方式下,系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程i 时,就将其优先权Pi与正在执行的进程j 的优先权Pj进行比较。如果Pi≤Pj,原进程Pj便继续执行;但如果是Pi>Pj,则立即停止Pj的执行,做进程切换,使i 进程投入执行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。

    2.2 高响应比优先调度算法

    在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权,并使作业的优先级随着等待时间的增加而以速率a 提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:
    由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先权又相当于响应比RP。据此,又可表示为:
    由上式可以看出:
    (1) 如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业。
    (2) 当要求服务的时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,因而它实现的是先来先服务。
    (3) 对于长作业,作业的优先级可以随等待时间的增加而提高,当其等待时间足够长时,其优先级便可升到很高,从而也可获得处理机。
    简言之,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。

    3 基于时间片的轮转调度算法

    3.1 时间片轮转法

    在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU 分配给队首进程,并令其执行一个时间片。时间片的大小从几ms 到几百ms。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。

    3.2  多级反馈队列调度算法

    前面介绍的各种用作进程调度的算法都有一定的局限性。如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用。而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法。在采用多级反馈队列调度算法的系统中,调度算法的实施过程如下所述。
    (1) 应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍。
    (2) 当一个新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n 队列便采取按时间片轮转的方式运行。
    (3) 仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的任何一个队列),则此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程放回到第i队列的末尾,把处理机分配给新到的高优先权进程。

    4 电梯调度算法

    高层建筑中电梯请求不断地到来,控制电梯的计算机能够很容易地跟踪顾客按下请求的顺序。如果使用先来先服务算法调度,同时如果电梯负载很重,那么大部分时间电梯将停留在电梯的中部区域,而电梯两端区域的请求将不得不等待,直到负载中的统计波动使得中部区域没有请求位置,这样导致远离中部区域的请求得到的服务很差。因此获得最小响应时间的目标和公平性之间存在着冲突。
    大多数电梯使用电梯算法来协调效率和公平性这两个相互冲突的目标。电梯算法电梯保持按一个方向移动,直到在那个方向上没有请求位置,然后改变方向。
    电梯算法(elevation algorithm)需要软件维护一个二进制位,即当前方向位:向上(up)或向下(down)。当一个请求处理完成之后,电梯的驱动程序检查该位,如果是up,电梯移至下一个更高的未完成的请求。如果更高的位置没有未完成的请求,则方向位取反。当方向位设置为down时,同时存在一个低位置的请求,则移向该位置。

    现在我们明白了,电梯的上下箭头按钮是为了告诉电梯你想向上还是向下去),而不是让电梯向上还是向下。

    举例:电梯在上行,5楼有上召和下召。电梯会停5楼,但它是为上召服务的,所以下召灯还会保持点亮。然后启动向上,直到服务完上行的所有请求。转下行,到五楼时还是会停。这时是服务5楼下召的。

    电梯处理请求规则:

    电梯有移动方向,各楼层的请求有请求方向,这里维护一个请求表(记录请求ID,请求方向,该请求的停靠楼层)。因为电梯会按照移动方向移动,直到该方向没有请求(请求包括请求ID和停靠楼层的请求),所以不会根据请求方向突然改变电梯的移动方向。因此,电梯在移动过程中只处理与“电梯移动方向”相同的“请求方向”的请求。如电梯向下移动,只处理向下的请求,且该请求的方向也向下(停靠楼层请求无方向)。

    具体算法过程举例如下:









        操作系统中的磁盘壁调度算法(读写一个磁盘块需要的时间主要因素是寻道时间:将磁盘臂移动到适当的柱面所需的时间)也运用了电梯算法。

    有关调度的题目

    [(2013年阿里巴巴暑期实习招聘笔试题)]设在内存中有P1,P2,P3三道程序,并按照P1,P2,P3的优先级次序运行,其中内部计算和IO操作时间由下表给出(CPU计算和IO资源都只能同时由一个程序占用):
    P1:计算60ms---》IO 80ms---》计算20ms
    P2:计算120ms---》IO 40ms---》计算40ms
    P3:计算40ms---》IO 80ms---》计算40ms
    完成三道程序比单道运行节省的时间是()
    A.80ms
    B.120ms
    C.160ms
    D.200ms



    参考文献

    [1]现代操作系统
    [2]编程之美

    [3]http://www.wypblog.com/archives/251


    转载自:http://blog.csdn.net/yangzhongblog/article/details/9881753

    参考:http://book.51cto.com/art/201011/235752.htm

    http://blog.csdn.net/l_yangliu/article/details/7105245

    http://blog.csdn.net/ctthuangcheng/article/details/8914149

    展开全文
  • 1、时间片轮转调度算法(RR): 给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,属于抢占式调度。 ...

     

    1、时间片轮转调度算法(RR):

    给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,属于抢占式调度。

     

    优点是兼顾长短作业;

    缺点是平均等待时间较长,上下文切换较费时。适用于分时系统。

     

    2、先来先服务调度算法(FCFS)

    根据进程到达的先后顺序执行进程,不考虑等待时间和执行时间,会产生饥饿现象。属于非抢占式调度,

     

    优点是公平,实现简单;

    缺点是不利于短作业。

     

    3、优先级调度算法(HPF):

    在进程等待队列中选择优先级最高的来执行。

     

    4、多级反馈队列调度算法:

    将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。

     

    优点是兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。

     

    5、高响应比优先调度算法:

    根据“响应比=(进程执行时间+进程等待时间)/ 进程执行时间”这个公式得到的响应比来进行调度。高响应比优先算法在等待时间相同的情况下,作业执行的时间越短,响应比越高,满足段任务优先,同时响应比会随着等待时间增加而变大,优先级会提高,能够避免饥饿现象。

     

    优点是兼顾长短作业

    缺点是计算响应比开销大,适用于批处理系统。

     

    展开全文
  • 线程调度算法分析

    千次阅读 2017-08-10 09:01:52
    4.1.1 线程调度算法的总体描述 在分时系统中,内核给每个线程分配一段CPU时间,这段时间称为时间片,当这段时间过去之后,内核将调度另一个线程将其变为执行态。这就是所谓的时间片轮转法。 与UNIX中的线程调度...

    4.1.1 线程调度算法的总体描述
    在分时系统中,内核给每个线程分配一段CPU时间,这段时间称为时间片,当这段时间过去之后,内核将调度另一个线程将其变为执行态。这就是所谓的时间片轮转法。

    与UNIX中的线程调度十分相似的是,OSKit的调度程序也采用了一种被称为多级反馈循环调度的算法,此种算法属于操作系统调度程序中最常用的一种。其核心思想是:内核给线程分一个时间片,并把该线程反馈回若干优先级队列中的某一个。一个线程在结束它之前,可能需要多次通过多次的"反馈循环"。当内核作上下文切换和恢复的时候,调度程序必须保证该线程从原来挂起的地方继续执行,否则这种调度算法是不能采用的。

    因此,我认为有必要向大家重申一下线程的上下文切换和恢复。首先,所谓线程的上下文是指由用户地址空间的内容、硬件寄存器的内容以及与该线程有关的内核数据结构组成的。更加严格的讲,线程的上下文是由它的用户级上下文、寄存器上下文以及系统级上下文组成。

    4.1.2 优先级逆转法
    OSKit中采用了操作系统设计中比较精彩的优先级逆转算法,即在一个优先级较低的线程占有mutex的同时,另一个优先级较高的线程又来申请此mutex,这样,优先级较高的线程就被比他低的线程阻塞。

    此时我们引入了优先级逆转算法,也就是说,当上述情况发生的时候,线程调度程序就将优先级较低的线程的优先级提升至与较高优先级线程一样,这样可以使得占有mutex的线程快速执行。

    如果现在需要调度的线程不止两个的话,该算法允许进行递归,也就是说,那个优先级低的线程执行还需要另外一个mutex,而此mutex被另一个优先级更低的线程占有,所以,调度程序就依次提升优先级低的线程的优先级,这就是递归提升。

    但是,如过我们支持递归提升优先级的话,就可能出现死锁,所以我们又必须引入一套检验死锁的程序,这大大增加了操作系统核心的大小和系统的开销,但使得操作系统更加完善,并可以处理实时线程。

    pthread/pthread_scheduler.c
    此源码文件包括了一套完整的线程调度机制,OSKit的全部线程调度算法都集中在了这个文件之中,通过阅读下面的函数分析,将使读者了解OSKit到底是用什么函数来具体实现线程调度的,并且能对前面讲述的概念有更深入的理解。

    4.2.1清空等待调度的线程队列
    说明:为了能让大家真正从概念上了解此函数的作用,我想有必要先说明一下什么是线程等待队列。由于调度程序在操作系统中也是作为一个线程出现的,并且同一时间,它只能调度一个线程,所以就会造成有许多线程等待调度但无法接受调度的情况,OSKit提供的这个函数正弥补了这个缺陷,他将所有的等待调度的线程用链表的形式链接在一起,这就是所谓的等待调度的线程队列。显然,清空它实际上就是释放链表的指针。 
    static inline int posix_runq_empty ( void )

    4.2.2得到等待队列中优先级最高的线程的优先级
    说明:当调度线程完成手头的工作,要对下一个线程进行调度时,就将面临一个问题,到底应该调度哪个等待调度的线程?OSKit提供的这个函数可以返回此时在等待队列中优先级最高的线程,供调度线程调度。 
    static inline int posix_runq_maxprio ( void )return PRIORITY_MAX - ( prio - 1 );

    4.2.3得到指向下一个要执行线程的指针
    说明:当某个线程要转执行态的时候,调度程序并不知道这个线程挂起在了什么地方,我们可以通过调用OSKit提供的这个函数来找到指向要执行线程的指针。 
    static inline int posix_runq_onrunq ( pthread_thread_t *pthread )

    4.2.4在线程的执行队列的队尾追加一个线程
    说明:将优先级最低的线程,或者是由于其他原因要最后执行的线程添加到线程执行队列的最后。 
    static inline void posix_runq_insert_tail ( pthread_thread_t *pthread )

    4.2.5在线程的执行队列的队头追加一个线程
    说明:将优先级最高的线程或者是由于某种原因要现执行的线程添加到线程执行队列的最前面。 
    static inline void posix_runq_insert_head ( pthread_thread_t *pthread )

    4.2.6将等待队列中优先级最高的线程提出队列执行
    说明:当操作系统要执行在线程执行队列里等待线程的时候,理所当然应该从头开始,我们考调有此函数来实现线程出对执行的功能。 
    static inline pthread_thread_t * posix_runq_dequeue ( void ) 
    注: 返回指向下一个等待线程的指针

    4.2.7从等待队列中删除独占资源的线程
    说明:为了使操作系统能够在总体最优化的前提下运行,OSKit规定不允许某一个线程长时间独占系统资源,如果发现此类时间,就可以调用这个函数来将独占资源的线程从执行队列中删除,以保持线程调度的公平合理。 
    static inline void posix_runq_remove ( pthread_thread_t *pthread )

    4.2.8此时用到的调度算法
    说明:在前面的章节里,我曾经提到,线程的调度算法仿佛其属性一样,在初始化的时候就赋给了它,但它却是可以更改的,OSKit就是通过调用下面的这个函数来实现在线程创建之后来改变调度算法的。

    int posix_sched_schedules ( int policy )
        if ( policy == SCHED_RR || policy == SCHED_FIFO )
            return 1;
        return 0;

    4.2.9将一个线程变为运行态
    说明:众所周知,线程在系统中一般有三种状态,OSKit通过调用该函数实现线程转执行态的功能。 
    int posix_sched_setrunnable ( pthread_thread_t *pthread )

    4.2.10终止该线程目前的调度算法
    说明:这又是在线程创建之后改变其调度算法的一种函数调用,它的功能是中止该线程目前的调度算法。

    void posix_sched_disassociate ( pthread_thread_t *pthread )
    {
        if (posix_runq_onrunq(pthread)) {
            /* * On the scheduler queue, so its not running.     */
            posix_runq_remove ( pthread );
        }
    }

    4.2.11为一个新的线程创建调度参数
    说明:所谓调度参数就是调度程序决定是否执行某个线程的依据。例如,某用户态线程最近使用CPU时间的统计等。

    void posix_sched_init_schedstate ( pthread_thread_t *pthread,const struct 
    sched_param *param )

    4.2.12改变线程的调度状态
    说明:如果其调度参数符合调度条件,调度程序会通过调用OSKit提供这个函数来改变此线程的调度状态,并将它转为准备调度态。此时该线程被锁住,而且要关中断

    int posix_sched_change_state ( pthread_thread_t *pthread , const struct 
    sched_param *param )

    4.2.13优先级迁移
    说明:这是我在上面提到的优先级逆转法的具体实现,OSKit就是通过调用它来完成对线程优先级的动态变更的。 
    int posix_sched_priority_bump ( pthread_thread_t *pthread, int newprio )

     

    注意:这只是暂时的,仅仅适用于实时线程

    4.2.14基于某种原因,线程被送回等待队列
    说明:当线程在操作系统中执行的时候,完全有可能由于用户的原因造成当线程执行完它的时间片后返回执行队列时,位置改变了。下边是我对OSKit提供的几种改变原因的注解。

    int posix_sched_dispatch ( resched_flags_t reason, pthread_thread_t 
    *pthread )
          switch (reason) {
    case RESCHED_USERYIELD:     posix_runq_insert_tail(pthread);
                             /* 如果由用户造成线程为空闲态,则插入队尾 */
               case RESCHED_YIELD:      posix_runq_insert_head(pthread);
    /* 如果由用户造成线程为空闲态,则插入队尾 */
               case RESCHED_PREEMPT:
    /* 根据线程拥有的优先级和其调度算法来具体分析 */
                    if (pthread->policy == SCHED_RR) {
                         if (--pthread->ticks == 0) {
                               posix_runq_insert_tail(pthread);
         /* 如果是时间片轮转发调度且只有一个ticks,则插入队尾 */
                               pthread->ticks = SCHED_RR_INTERVAL;
                         }
                         else
                              posix_runq_insert_head(pthread);
      /* 虽然是时间片轮转法,但拥有的ticks不止一个,则插入对头 */
                    }
    else if (pthread->policy == SCHED_FIFO) 
    posix_runq_insert_head(pthread);
     /* 如果是先来先处理法,则插入对头 */
               case RESCHED_INTERNAL:    /* 使线程变为空闲态 */
                default:
    if (pthread == IDLETHREAD)
         /* 停止所有的调度算法,将线程变成空闲态 */
                        panic("posix_sched_dispatch: Idlethread!/n");
          }

    4.2.15返回优先级最高的处于等待状态的线程
    说明:当调度程序要将一个出于等待状态的线程加入到执行队列中的时候,就需要有一个函数,它能返回优先级最高的等待线程,下面的函数正好就完成了这项任务。

    pthread_thread_t   * posix_sched_thread_next ( void )
          {         if ( posix_runq_empty( ) )
                          return 0;
                    return posix_runq_dequeue( );
           }

    4.2.16改变线程的优先级
    说明:实质是将线程从队列中删除,重新赋给优先级,再插入到队尾。 
    OSKIT_INLINE void threads_change_priority (pthread_thread_t *pthread, int newprio)

    4.2.17优先级继承
    说明:所谓优先级继承,其理论的实质就是所有出于等待状态的线程,在等待过程中,它的优先级会随时间的推移慢慢提高。 
    void pthread_priority_inherit ( pthread_thread_t *pwaiting_for )

    4.2.18不继承优先级
    说明:这其实与上一个优先级继承正好相反,无论等待了多长时间,线程的优先级都不会因此而改变。 
    void pthread_priority_uninherit ( pthread_thread_t *punblocked )

    4.2.19优先级递减
    说明:如果一个线程总是处于执行状态,则出于总体最优化的考虑,OSKit会调用此函数将其优先级逐步递减,从而使得更多的线程有被执行的可能。 
    void pthread_priority_decreasing_recompute ( pthread_thread_t *pthread)

    小 结
    本章从线程调度的一般性概括到具体实现,系统地阐述了OSKit的线程调度机制。

    在第一节主要是对一般的线程调度概念的描述,并且对OSKit中最为精彩的优先级逆转法的理论作了详细的论述。第二节中以源代码中的pthreads/pthread_scheduler.c为例,从等待调度的线程队列、线程的执行队列到优先级继承、优先级递减等,完整的阐明了OSKit的线程调度机制。

    <script type="text/JavaScript"><!-- google_ad_client = "pub-0246923946865164"; /* 728x90, created 10/10/09 */ google_ad_slot = "1248078023"; google_ad_width = 728; google_ad_height = 90; // --></script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

    展开全文
  • 在运行池中,会有多个处于就绪状态的线程在等待 CPU,JAVA 虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配 CPU 的使用权。 有两种调度模型:分时调度模型和抢占式调度模型。 分时调度...
  • 多核系统线程调度算法的研究.doc
  • 常用的线程调度算法

    千次阅读 2018-09-16 21:58:24
    1、先来先服务(FCFS) ...3、基于优先权的调度算法(FPPS) 4、时间片轮转(RR) 5、多级队列调度(Multilevel feedback queue) 参考链接:http://en.wikipedia.org/wiki/Scheduling_(computing) ...
  • 基于多核微处理器温度感知的线程调度算法.pdf
  • 一个线程用完CPU之后,操作系统会根据线程优先级、线程饥饿情况等数据算出一个总的优先级并分配下一个时间片给某个线程执行。 操作系统中可能会出现某条线程常常获取到VPU控制权的情况,为了让某些优先级比较低的...
  • Nachos实现id、限制线程数和按优先级调度算法(增改源码) Nachos实现id、限制线程数和按优先级调度算法
  • 线程调度算法

    千次阅读 2015-02-06 18:22:51
    我们可能经常会用到 Sleep 函数来使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题: 假设现在是 2012-12-16 3:37:40,如果我调用一下 Thread.Sleep(1000) ,在 2012-12-...
  • 文章目录理解线程的上下文上下文切换实现过程引起线程上文切换的原因线程调度算法抢占式调度协同式调度jvm的线程调度线程让出CPU的情况进程调度算法优先调度算法高优先权优先调度算法高响应比优先调度算法基于时间片...
  • 线程调度方式 抢占式调度 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长,甚至某些...
  • 线程的实现、线程上下文切换、线程调度、线程安全、进程调度算法线程的实现线程上下文切换上下文切换上下文切换的原因上下文切换的开销线程调度方式抢占式调度协同式调度Java线程调度的实现:抢占式线程让出CPU的...
  • 在运行池中,会有多个处于就绪状态的线程在等待 CPU,JAVA 虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配 CPU 的使用权。 有两种调度模型:分时调度模型和抢占式调度模型。 分时调度...
  • 一,调度算法的评价指标: 调度算法的评价指标大体如下: 1. CPU利用率 CPU利用率指CPU忙碌的时间占总的时间的比例: 如:某个计算机只支持单道程序,若刚开始需要在cpu上运行5秒, 再用打印机运行5秒,再...
  • 线程调度算法

    2017-11-05 19:21:58
    线程是CPU使用的基本单元,它由线程ID、程序计数器、寄存器集合和栈组成。它与属于同一进程的其他线程共享代码段、数据段和其他操作系统资源。 一个应用程序通常是作为一个具有多个控制线程的独立进程实现的,例如...
  • 进程(线程)调度的任务是控制、协调进程(线程)对CPU的竞争,按照一定的调度算法,使某一就绪进程获得CPU的控制权,转换成运行状态。 2.1.1 概述 1.进程(线程)调度的主要功能 记录系统中所有进程(线程...
  • 操作系统内核对线程调度非常有意思,因为他的一系列思想和方法论都能从生活和业务开发中找到影子,比如:超市收银台会分多个收银通道,快速通道针对那些提篮子的客户,慢速通道针对那些推购物车的客...
  • 【Java】JVM线程调度和进程调度方式

    千次阅读 2020-03-11 20:24:18
    进程调度算法3.1 优先调度算法3.2 高优先权优先调度算法3.3 基于时间片的轮转调度算法 1. Java线程调度的方式 1.1 抢占式调度 抢占式调度指的是每条线程执行的时间、线程的切换都由系统控制。 系统控制指的是在系统...
  • 理发师睡眠 问题 线程调度 算法 理发师数目为1人,算法比较巧妙
  • Intel公司的超线程技术(Hyper-ThreadingTechnology)是一项新的微处理器体系结构技术,...分析了超线程技术的特点,重点研究了Linux超线程感知调度优化技术,解决了对Intel处理器的有效支持问题,并且进行了相关的性能评测。
  • 浅析Java的线程调度策略

    千次阅读 2019-03-13 23:52:34
    作者:杨兴强 原文来源:开点工作室(ID:kaidiancs) 一.... 看着Java线程执行起来的那种任性和随意,我们不免会...本文将带着这样的问题,探讨Java线程调度机制。 程序的问题还是先从代码说起吧,下面是一个广泛...
  • Linux的进程调度算法简介

    千次阅读 2021-07-16 09:28:57
    文章目录一、调度算法的原理和分类1.进程调度简介2.按不同需求对调度的进程分类3.调度算法分类二、使用步骤1.引入库1.引入库总结 一、调度算法的原理和分类 1.进程调度简介   进程调度的研究是整个操作系统理论的...
  • FreeRTOS调度算法 – 简述

    千次阅读 2021-12-31 13:50:00
    一、任务状态 ...这种类型的调度方案被称为”固定优先级抢占式调度”。所谓”固定优先级”是指每个任务都被赋予了一个优先级,这个优先级不能被内核本身改变(只能被任务修改)。 ”抢占式”是指当任务进入就绪
  •  作业调度算法:分别采用先来先服务、短作业优先、高响应比调度算法。  每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。 作业的...
  • Java线程在JDK1.2之前,是基于称为“绿色线程”(Green Threads)的用户线程实现的,而在JDK1.2中,线程模型替换为基于操作系统原生线程模型来实现。因此,在目前的JDK版本中,操作系统支持怎样的线程模型,在很大...
  • RTEMS线程调度算法(RMS)详解

    千次阅读 2018-01-24 17:43:51
    RTEMS是以线程为基本调度单位的,调度算法基于优先级的抢占式线程调度,支持256个线程优先级。当然RTEMS值hi创建同等优先级线程,相同优先级的线程采用时间片轮转调度。调度器寻找下一个最高优先级就绪线程的时间是o...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 126,125
精华内容 50,450
关键字:

线程调度算法