友汇网网站建设,一流的低价网站建设,wordpress手机版侧栏导航条,益阳seo快速排名一、时间片概念 时间片#xff08;timeslice#xff09;又称为 “量子”#xff08;quantum#xff09;或 “处理器片”#xff08;processor slice#xff09;#xff0c;是分时操作系统分配给每个正在运行的进程微观上的一段 CPU 时间#xff08;在抢占内核中是…一、时间片概念 时间片timeslice又称为 “量子”quantum或 “处理器片”processor slice是分时操作系统分配给每个正在运行的进程微观上的一段 CPU 时间在抢占内核中是从进程开始运行直到被抢占的时间。 简单来说时间片就是 CPU 分配给各个程序的时间即该进程允许运行的时间。如果进程在时间片结束时还在运行则 CPU 将被强制剥夺并分配给另一个进程如果进程在时间片结束前就阻塞或结束则 CPU 会在阻塞或结束时当即进行切换。 二、并行计算 说到并行计算尤其是单台计算机的并行计算一定要先建立时间片的概念。 现在使用的的操作系统基本都是多任务操作系统Windows、Linux、Mac OS X 等它们允许同时运行多个进程 —— 例如我们可以在打开音乐播放器听音乐的同时用浏览器浏览网页并下载文件这样看来播放器和浏览器是同时运行的。 但事实上虽然一台计算机可能有多个 CPU 但是同一个 CPU 在一个时刻永远只能运行一个任务而不可能真正地同时运行多个任务。 三、如何实现并行计算 实现这种同时运行的 “假象” 其实是操作系统按照一定的策略定期给每个活动的进程执行其内部程序的机会并且每次只执行一小段时间然后操作系统利用中断强行退出运行并将当前程序信息压栈然后转去执行下一个进程的一小段程序。 通过这样不断快速的循环切换每个程序都得到了执行。由于切换时间非常短在用户看来就是很多程序在同时的执行这就模拟了并行计算。
现在新的多核 CPU 以及超线程 CPU 内部有超过 1 个的 CPU 执行体它们运行时就不是模拟并行计算而是真的有两个及以上的程序同时被执行 这里我们只需要理解 —— 程序是被操作系统片段执行的每个片段就是一个时间片。在只考虑一个 CPU 的情况下时间片使得这些进程 “看起来像” 同时运行的实则是轮番穿插地运行。时间片通常都很短Linux上为5ms800ms所以用户并不会感觉到进程的切换。 由于是片段执行我们需要知道自己的程序在运行时并不是独一无二的。在用户看来很顺畅的工作其实是由一个个的执行片段构成的。在我们眼中相邻的两条语句甚至同一条语句中两个不同的运算符之间都有可能插入其他线程或进程的动作。 四、时间片的分配 时间片由操作系统内核的调度程序分配给每个进程。首先内核会给每个进程分配相等的初始时间片然后每个进程轮番地执行相应的时间。当所有进程都处于时间片耗尽的状态时内核会重新为每个进程计算并分配时间片如此往复。 也就是说一个系统中所有的进程分配到的时间片长短并不是相等的尽管初始时间片基本相等其实 Linux 系统中初始时间片也不相等而是各自父进程的一半。 系统通过测量进程处于 “睡眠” 和 “正在运行” 状态的时间长短来计算每个进程的交互性交互性和每个进程预设的静态优先级Nice 值的叠加即是动态优先级。动态优先级按比例缩放就是要分配给对应进程时间片的长短。一般地为了获得较快的响应速度交互性强的进程趋向于 I/O 消耗型分配到的时间片要长于交互性弱的趋向于处理器消耗型进程。 五、时间片的长度 从一个进程切换到另一个进程是需要一定时间的 —— 保存和装入寄存器值及内存映像、更新各种表格和队列等都是需要时间的。 假如进程切换process switch【有时也称为上下文切换context switch】需要 5 毫秒再假设时间片设置为 20 毫秒。则 CPU 在做完 20 毫秒有用的工作之后还将花费 5 毫秒来进行进程的切换。也就是说 CPU 时间的 20% 5/(205) 都浪费在管理开销上。 为了提高 CPU 使用的效率我们将时间片设置为 500 毫秒这样 CPU 浪费的时间只有 1% 不到。但是这样真的好吗如果在一个分时系统中有十个交互用户几乎同时按下了回车键会发生什么情况假设前九个进程都用足了它们的时间片那么最后一个不幸的进程必须等待将近 5 秒才能获得运行的机会。如果恰好最后一个运行的倒霉进程只是一条简短的命令却要 5 秒才能做出响应这样对用户的使用体验非常不好。同样的问题在一台支持多道程序的个人计算机上也会发生。 所以结论总结如下时间片太短会导致过多的进程切换降低了 CPU 利用效率而时间片太长又可能导致对较短交互请求的响应变差。所以需要寻找一个合适的时间片长度平衡 CPU 效率和交互响应效果100毫秒通常是一个比较合理的折中值。 六、总结 在数据传输领域我们亲眼看见的都不一定是真的。在宏观上我们可以同时打开多个应用程序每个程序并行不悖、同时运行。但是在微观上由于只有一个 CPU 一次只能处理一个程序中的一部分内容。 如何公平地进行处理一种方法就是引入时间片每个程序轮流执行。时间片使得各个程序从表面上看是同时进行的又减少了 CPU 资源的浪费。