⑴ linux的进程优先级 NI 和 PR 有什么区别
用top -u 命令查看进程以及PID。命令如下:
$ top -u
PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)
⑵ linux镎崭綔绯荤粺璁剧疆浼桦厛绾х殑闂棰
linux涓嬭皟鏁磋繘绋嬩紭鍏堢骇
杩涚▼镄勪紭鍏堢骇鍐冲畾浜呜繘绋嬫槸钖︿紭鍏堣玞pu鍒嗛厤璧勬簮杩涜屽勭悊銆
鍦╟pu璧勬簮鍗佸垎鍏呰冻镞讹纴姣忎釜姝e湪杩愯岀殑杩涚▼閮借兘鍒嗛厤鍒拌冻澶熺殑璧勬簮杩涜屽勭悊锛屾ゆ椂璋冩暣杩涚▼镄勪紭鍏堢骇鏄娌℃湁浠涔堟剰涔夌殑锛
濡傛灉cpu璧勬簮绱у紶镞讹纴top镆ョ湅cpu浣跨敤杈惧埌90%浠ヤ笂镞讹纴浼桦厛绾ч珮镄勮繘绋嫔皢琚浼桦厛鍒嗛厤璧勬簮铡绘墽琛屻
濡傛灉姝ゆ椂镓嫔ご链変竴涓闱炲父绱ц佺殑浠诲姟瑕佹墽琛岋纴姣斿备紶杈扑竴涓闱炲父閲嶈佺殑鏁版嵁鎴栨槸鍑嗗囩粰瀹㈡埛鍙戜竴灏侀潪甯哥揣镐ョ殑闾浠讹纴
浣犲笇链涜繖浜涗换锷′紭鍏埚湴琚镓ц屽畬鎴愶纴闾d箞灏遍渶瑕佽皟鏁磋繖浜涗换锷$殑浼桦厛绾т简銆
浼桦厛绾х殑鍊=浼桦厛绯绘暟+nice鍊
浼桦厛绯绘暟鐢辩郴缁熷唴镙稿喅瀹氾纴涓嶅彲镟存敼
nice鍊煎彲浠ユ坠锷ㄦ洿鏀癸纴锣冨洿鏄
-20~19
浼桦厛绾х殑鍊艰秺浣庯纴浼桦厛绾ц秺楂桡绂浼桦厛绾х殑鍊艰秺楂桡纴浼桦厛绾ц秺浣庛
镓浠ユ兂璋冩暣鎴愭渶楂树紭鍏堢骇镄勮瘽锛屽氨灏唍ice鍊艰句负-20锛涙兂璋冩暣鎴愭渶浣庝紭鍏堢骇镄勮瘽锛屽皢nice鍊艰句负19銆
璋冩暣浼桦厛绾:
1銆佷换锷℃湭杩愯屽墠杩涜岃皟鏁
#
nice
-n-20
sh
/xxx/xxx.sh
--浠ユ渶楂树紭鍏堢骇杩愯寈xx.sh杩欎釜鑴氭湰
#
nice
-n19
sh
/xxx/xxx.sh
--浠ユ渶浣庝紭鍏堢骇杩愯寈xx.sh杩欎釜鑴氭湰
2銆佷换锷″凡缁忓紑濮嬭繍琛岀殑𨱍呭喌涓嬭皟鏁
鈶
#
top
--镆ョ湅绯荤粺褰揿墠杩涚▼杩愯屾儏鍐
>
r
--阌鍏ュ皬r
>
PID
to
renice:
--鎻愮ず杈揿叆杩愯岀殑杩涚▼镄刾id
>
Renice
PID
23302
to
value:
--鎶婅繖涓杩涚▼镄刵ice鍊艰剧疆涓哄氩皯,镙规嵁闇瑕佽繘琛岃皟鏁
鈶
#
renice
-20
PID
灏呜繘绋嬬殑nice鍊兼敼涓-20
#
renice
19
PID
灏呜繘绋嬬殑nice鍊兼敼涓19
杞杞姐銆绾㈤粦镵旂洘锛歭inux涓嬭皟鏁磋繘绋嬩紭鍏堢骇
⑶ 浅析Linux下进程的调度策略与优先级
在 Linux 中,线程是由进程来实现的,可以认为线程就是一个轻量级的进程,因此,线程调度是按照进程调度的方式来进行的。这样设计,线程调度流程可以直接复用进程调度流程,没必要再设计一个进程内的线程调度器了。
在 Linux 中,进程调度器是基于进程的调度策略与调度优先级来决定调度哪个进程运行。
调度策略主要包括:
调度优先级的范围是 0~99,数值越大,表示优先级越高。
其中,SCHED_OTHER、SCHED_IDLE、SCHED_BACH 为非实时调度策略,其调度优先级为 0。而 SCHED_FIFO、SCHED_RR 是实时调度策略,其调度优先级范围为 1~99。
实时调度策略的进程总是比非实时调度策略的进程优先级高。
在 Linux 内部实现中,调度器会为每个可能的调度优先级维护一个可运行的进程列表,以最高优先级列表头部的进程作为下一次调度的进程,所有的调度都是抢占式的,如果一个具有更高调度优先级的进程转换为可运行状态,那么当前运行的进程将被强制进入其等待的队列中。
SCHED_OTHER
该调度策略是默认的 Linux 分时调度策略,该调度策略为非实时的,其调度优先级总是为 0。
对于该调度策略类型的进程,调度器是基于动态优先级来调度的。动态优先级跟属性 nice 有关,nice 的值会随着进程的运行时间而动态改变,以确保所有具有 SCHED_OTHER 策略的进程公平地得到调度。
在 Linux 中,nice 的值范围为-20 ~ +19,默认值为 0。nice 值越大,则优先级越低,因此相对较低 nice 值的进程可以获得更多的处理器时间。
通过命令 ps -el 查看系统中的进程列表,其中 NI 列就是进程对应的 nice 值。
使用 top 命令,看到的 NI 列也是进程的 nice 值。
调整 nice 值,可以通过 shell 命令 nice ,该命令可以按照指定的 nice 值运行 cmd ,命令的帮助信息为:
重新调整已运行进程的 nice 值,可通过 renice 命令实现,命令的帮助信息为:
另外,可以执行 top 命令,输入 r ,根据提示输入进程的 pid ,再输入 nice 数值,也可以调整进程的 nice 值。
SCHED_FIFO
该调度策略为先入先出调度策略,简单概括,就是一旦进程占用了 CPU,则一直运行,直到有更高优先级的任务抢占,或者进程自己放弃占用 CPU。
SCHED_RR
该调度策略为时间片轮转调度策略,该调度策略是基于 SCHED_FIFO 策略的演进,其在每个进程上增加一个时间片限制,当时间片使用完成后,调度器将该进程置于队列的尾端,放在尾端保证了所有具有相同调度优先级的进程的调度公平。
使用 top 命令,如果 PR 列的值为 RT ,则说明该进程采用的是实时调度策略,其调度策略为 SCHED_FIFO 或者 SCHED_RR,而对于非实时调度策略的进程,该列的值为 NI + 20 。
可以通过命令 ps -eo state,uid,pid,ppid,rtprio,time,comm 来查看进程对应的实时优先级,实时优先级位于 RTPRIO 列下,如果进程对应的列显示为 - ,说明该进程不是实时进程。
chrt 命令可以用来很简单地更改进程的调度策略与调度优先级。在 Linux 下查看 chrt 命令的帮助信息:
比如,获取某个进程的调度策略,使用如下命令:
在比如,设置某个进程的调度策略为 SCHED_FIFO,调度优先级为 70,使用如下命令:
⑷ Linux的进程优先级NI和PR有什么区别
nice(NI)和priority(PR),并不是同一个概念。
NICE值应该是熟悉Linux/UNIX的人很了解的概念了,它是反应一个进程“优先级”状态的值,其取值范围是-20至19,一共40个级别。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。nice值虽然不是priority,但是它确实可以影响进程的优先级。一般会把nice值叫做静态优先级,这也基本符合nice值的特点,就是当nice值设定好了之后,除非我们用renice去改它,否则它是不变的。
实用priority值表示PRI和PR值,或者叫动态优先级。priority的值在之前内核的O1调度器上表现是会变化的,所以也叫做动态优先级。在内核中,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是MAX_PRIO,它的值为140。
而这个值又是由另外两个值相加组成的,一个是代表nice值取值范围的NICE_WIDTH宏,另一个是代表实时进程(realtime)优先级范围的MAX_RT_PRIO宏。
说白了就是,Linux实际上实现了140个优先级范围,取值范围是从0-139,这个值越小,优先级越高。nice值的-20到19,映射到实际的优先级范围是100-139。
⑸ 是指实时线程,Linux分配1-99为实时线程,是1为最高优先级还是99为最高
1是实时进程优先级最高的,99是实时进程优先级最低的,数字越小,优先级越高
你在做operating system的实验?