首页
学习
活动
专区
圈层
工具
发布

linux内核调度算法(2)–CPU时间片如何分配

内核在微观上,把CPU的运行时间分成许多分,然后安排给各个进程轮流运行,造成宏观上所有的进程仿佛同时在执行。...就是在这颗CPU上,会比较均匀的把时间分配给这几个nginx worker,每个worker进程运行完一个时间片后,内核需要做进程切换,把正在运行的进程上下文保存下来。...当然,实际的运行进程里,大部分并不是nginx这种希望独占CPU全部时间片的进程,许多进程,比如vi,它在很多时间是在等待用户输入,这时vi在等待IO中断,是不占用时间片的,内核面对多样化的进程,就需要技巧性的分配...内核分配时间片是有策略和倾向性的。换句话说,内核是偏心的,它喜欢的是IO消耗型进程,因为这类进程如果不能及时响应,用户就会很不爽,所以它总会下意识的多分配CPU运行时间给这类进程。...sleep_avg就是关键了,它表示进程睡眠和运行的时间,当进程由休眠转到运行时,sleep_avg会加上这次休眠用的时间。在运行时,每运行一个时钟节拍sleep_avg就递减直到0为止。

7.6K40

Linux调度器如何判断进程的时间片耗尽?

1、第一个问题:timeslice用尽的判断 在Linux内核中,调度器确实是在时钟中断(通常每隔一段时间触发,比如1毫秒)中更新每个进程的vruntime值。...在时钟中断中,调度器还会检查当前进程的时间片(timeslice)是否已经用完。...如果用尽,则意味着该进程已经占用了足够的CPU时间,调度器将会在红黑树(rb_tree,用于组织可运行进程的平衡二叉树)中寻找最左侧的下一个进程来运行。...因此,timeslice的用尽和时钟中断确实有紧密的联系:调度器利用定期的时钟中断来逐步更新进程的运行状态并判断时间片是否耗尽。...当时间片耗尽时,调度器会执行上下文切换,从红黑树中选择一个新的可运行进程。 2、第二个问题:可中断睡眠进程的唤醒 对于睡眠状态的进程,首先要明确睡眠类型和信号机制的工作原理。

66710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CPU核心数,线程数,时间片轮转机制解读

    当Java线程数大于CPU线程数,操作系统使用时间片机制,采用线程调度算法,频繁的进行线程切换。...时间片轮转机制 时间片轮转法(Round-Robin,RR): 根据先进先出原则,排成队列(就绪队列),调度时,将CPU分配给队首进程,让其执行一个时间段(称为:时间片),时间片通常为10-100ms数量级...在使用一个时间片后,进程还没有完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待再次运行。 处理器同一个时间只能处理一个任务。...不需要处理器处理的时候,这部分时间就要分配给其他的进程。原来的进程就要处于等待的时间段上。经过周密分配时间,宏观上就象是多个任务一起运行一样,但微观上是有先后的,就是时间片轮换。...当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序根据这个请求停止该进程的运行,将它送到就绪队列的末尾,再把处理机分给就绪队列中新的队列首进程,同时让它也执行一个时间片 ---- Java调度机制

    5.4K20

    C语言多线程运行时间计算

    C语言多线程运行时间计算 单线程下的运行时间可以使用clock()进行计算 clock()计算的是the CPU time used so far,即占用的CPU时间 而多线程和单线程不同的是...,多线程会占用更多的CPU时间(多个线程同时运行),因此,多线程下使用clock()会造成结果过大 使用clock_gettime来获取多线程下每个线程的运行时间 int clock_gettime(clockid_t...clk_id, struct timespec *tp); 第一个参数要输入一个宏,一般使用的有: CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0...:0:0开始计时, CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响 CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间 CLOCK_THREAD_CPUTIME_ID...:本线程到当前代码系统CPU花费的时间 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

    2.5K40

    基于Linux-3.9.4内核增加简单的时间片轮转功能

    简单的时间片轮转多道程序内核代码 原创作品转载请注明出处https://github.com/mengning/linuxkernel/ 作者:sa18225465 ---- 一、安装 Linux-3.9.4...qemu -kernel arch/x86/boot/bzImage 二、添加时间片轮转多道批处理功能 进入 mykernel 文件夹,可以看到 qemu 窗口输出的内容的代码 mymain.c 和...mymain.c 中的代码如下: myinterrupt.c 中的代码如下: 从添加时间片轮转多道程序的代码中下载 mymain.c、myinterrupt.c、mypcb.h 三个文件...= 1,当时间片达到1000的整数倍时,将当前运行进程中断并打印。...通过修改一个简单的内核源码,增加一个时间片轮转功能,让我们更具体的体会到了操作系统底层的实现原理,对我们后续的学习会有很大的帮助。

    1.3K30

    进程调度(二)——时间片轮转算法

    一 定义 时间片轮转算法是将所有的就绪进程按先来先服务的原则,排成一个队列,按时间片轮转。时间片的大小从几ms到几百ms。...当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。...这样就可以保证就绪队列中的所有进程,在一给定的时间内,均能获得一时间片的处理机执行时间。...method stub RR rr = new RR(); rr.Print(rr.getProcess()); System.out.println("请输入时间片...new Scanner(System.in); int Timeperiod = in.nextInt(); //时间片

    2.7K40

    Linux |使用“at”命令在指定时间运行任务

    引言 作为 cron 作业调度程序的替代方案,at 命令允许您安排命令在给定时间运行一次,而无需编辑配置文件。...enable atd --------- On SysVinit --------- # service atd start # chkconfig --level 35 atd on atd 运行后...另外请注意,at 不仅允许以下固定时间:现在、中午(12:00)和午夜(00:00),还允许自定义 2 位数字(代表小时)和 4 位数字时间(小时和分钟)。...例如,要在今天晚上 11 点(如果当前日期晚于晚上 11 点,则明天)运行 updateb,请执行以下操作: # echo "updatedb" | at -m 23 要在今天 23:55 关闭系统(...时间规范遵循 POSIX 标准。 总结 根据经验,只要您只想在明确定义的时间运行命令或执行给定任务一次,请使用 at 代替 cron 作业调度程序。对于其他场景,请使用 cron。

    84210

    Python Web学习笔记之CPU时间片

    时间片即CPU分配给各个程序的时间,每个线程被分配一个时间段,称作它的时间片,即该进程允许运行的时间,使各个程序从表面上看是同时进行的。...如果在时 间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。而不会造成CPU资源浪费。...下面两图描述了时间片模式和非时间片模式下的线程执行的情况: ? ? 在图一中可以看到,任何线程如果都排队等待CPU资源的获取,那么所谓的多线程就没有任何实际意义。...图二中的CPU Manager只是我虚拟的一个角色,由它来分配和管理CPU的使用状况,此时多线程将会在运行过程中都有机会得到CPU资源,也真正实现了在单CPU的情况下实现多线程并行处理。...在Linux的内核处理过程中,每一个进程默认会有一个固定的时间片来执行命令(默认为1/100秒),这段时间内进程被分配到CPU,然后独占使用。

    1.6K110

    UCOS-III笔记(五)时间片调度与时间管理

    UCOS-III笔记(五) 时间片调度 时间片:同等优先级任务轮流地享有相应的运行时间(可设置),在UCOSIII中,一个时间片就等于SysTick 中断周期 eg: 运行条件: 创建三个任务:...Task1、Task2、Task3 Task1、Task2、Task3的优先级均为1;即3个任务同等优先级 Task1、Task2、Task3的时间片默认均设置为100 运行过程如下: 首先Task1运行完...100个时间片后,切换至Task2运行 Task2运行完100个时间片后,切换至Task3运行 Task3运行过程中(还不到100个时间片),Task3被挂起了(系统延时或等待信号量等),此时直接切换到下一个任务...Task1 Task1运行完100个时间片后,切换至Task2运行 注意: 同等优先级任务,轮流执行;时间片流转 一个时间片大小,取决为滴答定时器中断频率 每个任务都可以定义自身的时间片长度 注意没有用完的时间片不会再使用...,下次任务Task3得到执行还是按照100个时间片的时钟节拍运行 OSSchedRoundRobinCfg():用于开启时间片调度,并设置时间片的默认值 时间片相关API函数介绍: void OSSchedRoundRobinCfg

    12010

    Linux下查看进程的启动和运行时间

    有时需要知道某进程运行的时间,比如我想知道我sra文件转换成fq格式的转化速度。以便我做好时间安排。...-eo pid,tty,user,comm,lstart,etime|grep fastq 参数说明: pid:进程ID tty:终端 user:用户 comm:进程名 lstart:开始时间...etime:运行时间 运行结果如下: 91413 pts/0 root fastq-dump Tue May 21 10:01:44 2019 45:05...CPU百分比 %MEM:占用内存的百分比 VSZ:该进程使用的虚拟內存量(KB) RSS:该进程占用的固定內存量(KB)(驻留中页的数量) STAT:进程的状态 START:该进程被触发启动时间...TIME:该进程实际使用CPU运行的时间 top命令 top也可以看进程信息,与ps区别如下 ps看命令执行那刻的进程信息,top是持续监视,ctrl c退出 ps只是查看进程,而top还可以监视系统性能

    16.6K10

    使用uptimed命令监视Linux系统正常运行时间

    作为一名合格的 Linux 运维人员,监视系统的正常运行时间可以说是一门基本功了。今天这篇文章就为大家分享一个用于记录和跟踪系统的运行时间的实用命令行工具,它的名字叫做 uptimed。...之所以推荐 uptimed,主要是因为它能在记录和跟踪系统的运行时间之余,还能将这些历史记录以摘要的形式直截了当地展示给用户,比如你的系统已经运行多长时间了?最长的运行时间记录是多少?...在 Arch Linux 上安装: $ sudo pacman -S uptimed 在 Debian,Ubuntu,Linux Mint 上安装: $ sudo apt-get install uptimed...在 Ubuntu 及其衍生版本上安装前请确保添加了 universe 存储库,没有的话请运行以下命令添加: $ sudo add-apt-repository universe 在 Fedora...使用uptimed工具 安装完成 uptimed 工具之后,运行 uprecords 命令就能显示系统运行时间的历史摘要了: # uprecords 输出的摘要结果: #

    1.7K10

    linux中怎么知道进程运行了多长时间

    你有没有遇到过想知道一个进程在你的 Linux 机器上运行了多长时间的情况? 你不需要任何监控应用程序。...在 Linux 和其他类 Unix 操作系统中,有一个名为 的命令ps,用于显示有关活动进程的信息。使用ps命令,我们可以很容易地找出一个进程在 Linux 中运行了多长时间。...查看一个进程在 Linux 中运行了多长时间 该ps命令具有不同的格式说明符(关键字),可用于控制输出格式。我们将使用以下两个关键字来查找活动进程的正常运行时间。...现在,我们可以使用命令查看该进程运行了多长时间: $ ps -p 8299 -o etime ELAPSED 04:05:37 你还可以使用 etimes 关键字查看经过的时间(以秒为单位)。...进程的正常运行时间,后者以秒为单位显示正常运行时间。

    9.3K20

    Linux命令之time——计算命令运行时间

    linux下time命令可以获取到一个程序的执行时间,包括程序的实际运行时间(real time),以及程序运行在用户态的时间(user time)和内核态的时间(sys time)。...,在最后输出了三个时间,它们分别是: real:实际时间,从command命令行开始执行到运行终止的消逝时间; user:用户CPU时间,命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;...实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。...另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。...%c 进程被迫进行上下文切换的次数(由于时间片到期)。

    16.2K20

    实时性迷思(2)——“时间片轮转”的沙子

    其实,在上一篇文章的留言区,很多朋友除了热烈讨论以外,还针对原文中的例子提出了“将任务拆分成小块进行时间片轮转”的解决方案,认为这样就可以解决文中提出的实时性矛盾。究竟时间片轮转能不能确保实时性?...【反复横跳的代价】 ----   不知道你还记不记得本文一开始我们试图讨论的那个问题:即,时间片轮转是否对实时性的保证有意义?...,拥有相同优先级任务间所使用的可抢占式时间片轮询,即Round-roubin模式(详情请参考《【解惑】到底是“时间片”还是“分时轮询”?》)。...结论:频繁任务切换对系统实时性是有害的;由于频繁时间片轮转会导致大量不必要的任务切换,因此对实时性总体上来说是有害的。...时间片轮转只是裸机和操作系统环境下常见的、“无脑”实现并发的一种方式——或者说,时间片轮转的作用只是实现并发而已,它不仅与实时性的保证无关,甚至是有害的。

    90620

    中科院开源 RISC-V 处理器“香山”流片,已成功运行 Linux

    2021年7月15日,第一代香山“雁栖湖”流片。但接下来由于受到全球芯片产能影响,我们不得不经历漫长的等待期。...因为许久没有回片后的消息,有一些关注香山的朋友发来小心翼翼的询问:“香山是不是流片失败了?”流片失败,就是指香山无法点亮,也就意味着它就是一块石头。...大家非常给力,每天都有大进展:CPU频率>1GHz,DDR4-2400稳定运行,Linux正常启动,CoreMark成功运行。...大家非常给力,每天都有大进展:CPU频率>1GHz,DDR4-2400稳定运行,Linux正常启动,CoreMark成功运行。...图1:每日攻关任务清单 图2:DDR4-2400内存稳定性测试 图3:Linux启动进入shell 图4:运行CoreMark ---- 香山是一款开源 RISC-V 处理器核,它的架构代号以湖命名

    2.2K30
    领券