
正文
linuxfifo命令 linuxfind命令使用方法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
浅析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,使用如下命令:
相关问答
Q1: Linux下有没有办法能看到FIFO的大小
FIFO和pipe的区别在于:
FIFO在文件系统中有对应的inode,可以通过ls命令查看。
sh-3.2# ls -lhF 。/fifo_file
100 prwxrwxrwx 1 root root 0 Jan 1 1970 。/fifo_file|
sh-3.2#
正因为它有一个名字,所以任何进程都可以访问它,所以FIFO可用于任意两个进程之间的通信。
pipe没有名字,在现有文件系统中无法查看到它的存在。
它只能用于父子进程、兄弟进程等具有血缘关系的进程间通信。
创建FIFO的方法如下:
1. 调用umask系统调用来设定创建文件的权限,
#include 《sys/types.h》
#include 《sys/stat/h》
mode_t umask(mode_t mask);
2. 调用unlink系统调用先删除已经存在的fifo,
#include 《unistd.h》
int unlink(const char *pathname);
3. 调用mkfifo库函数去创建一个FIFO文件
Q2: linux里面文件的文件的st-mode,里面的fifo是什么东西?文件里面的fifo是什么东西?
在st_mode的特征位定义里有:
S_IFIFO 0010000 //先进先出(fifo)
fifo是管道文件,分为分为无名管道和有名管道。
无名管道例如:ls-l | grep name 使用管道可将一个命令的输出作为另一个命令的输入。命令执行时,无名管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是单独构成一种文件系统,并且只存在于内存中。无名管道是临时的,执行完成后会自动消失。由于没有名字,无名管道只能用于亲缘关系的进程间通信.
有名管道即FIFO,在文件系统中有自己文件名路径名,这样即使两个不相关(没有亲缘关系)的进程,只要可以访问该路径,就能够彼此通过创建FIFO相互(经常性的而非临时的)通信。有名管道的名字存在于文件系统中,但内容还是存放在内存中。
S_IFIFO 即表示有名管道文件。具体介绍和应用,还请翻阅“进程间通信--管道”的相关内容。
linuxfifo命令的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于linuxfind命令使用方法、linuxfifo命令的信息别忘了在本站进行查找喔。







