sched_setscheduler

Autres langues

Langue: ja

Version: 2006-03-23 (openSuse - 09/10/07)

Autres sections - même nom

Section: 2 (Appels système)

̾Á°

sched_setscheduler, sched_getscheduler - ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¡¦¥¢¥ë¥´¥ê¥º¥à¤È¥Ñ¥é¥á¡¼¥¿¤òÀßÄê/¼èÆÀ¤¹¤ë

½ñ¼°


#include <sched.h>



int sched_setscheduler(pid_t pid, int policy,


const struct sched_param *param); int sched_getscheduler(pid_t pid); struct sched_param { ... int sched_priority; ... };

ÀâÌÀ

sched_setscheduler() ¤Ï pid ¤Ë¤è¤Ã¤Æ¼±Ê̤µ¤ì¤ë¥×¥í¥»¥¹¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤ä ¤½¤ì¤Ë´ØÏ¢¤¹¤ë¥Ñ¥é¥á¡¼¥¿¤òÀßÄꤹ¤ë¡£pid ¤¬ 0 ¤Î¾ì¹ç¤Ï ¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤¬ÀßÄꤵ¤ì¤ë¡£ ¥Ñ¥é¥á¡¼¥¿ param ¤Î²ò¼á¤ÏÁªÂò¤µ¤ì¤¿Êý¿Ë¤Ë¤è¤ë¡£ ¸½ºß¤Î¤È¤³¤í¡¢Linux ¤Ç¤Ï SCHED_FIFO, SCHED_RR, SCHED_OTHER, SCHED_BATCH ¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤ë¡£ ¤½¤ì¤¾¤ì¤ÎÊý¼°¤Ë¤Ä¤¤¤Æ¤Ï°Ê²¼¤Ç½Ò¤Ù¤ë¡£

sched_getscheduler() ¤Ï pid ¤Ç¼±Ê̤µ¤ì¤ë¥×¥í¥»¥¹¤Ë¸½ºßŬÍѤµ¤ì¤Æ¤¤¤ë ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤ò¿Ò¤Í¤ë¡£pid ¤¬ 0 ¤Ê¤é¤Ð¡¢¸Æ¤Ó½Ð¤·¤¿ ¥×¥í¥»¥¹¼«¿È¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤¬ÊÖ¤µ¤ì¤ë¡£

¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë (scheduling policy)

¥¹¥±¥¸¥å¡¼¥é (scheduler) ¤È¤Ï¥«¡¼¥Í¥ë¤Î°ìÉô¤Ç¡¢¼¡¤Ë CPU ¤Ç¼Â¹Ô¤µ¤ì¤ë ¼Â¹Ô²Äǽ¤Ê¥×¥í¥»¥¹¤ò·èÄꤹ¤ë¤â¤Î¤Ç¤¢¤ë¡£ Linux ¤Î¥¹¥±¥¸¥å¡¼¥é¡¼¤Ï»°¤Ä¤Î°Û¤Ê¤ë¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤òÄ󶡤·¤Æ¤ª¤ê¡¢ °ì¤Ä¤ÏÄ̾ï¤Î¥×¥í¥»¥¹ÍÑ¡¢Æó¤Ä¤Ï¥ê¥¢¥ë¥¿¥¤¥à¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥óÍѤǤ¢¤ë¡£ Á´¤Æ¤Î¥×¥í¥»¥¹¤Ë¤Ï ÀÅŪͥÀèÅÙ (static priority) sched_priority ¤¬³ä¤êÅö¤Æ¤é¤ì¡¢ ¤³¤ÎÃͤϥ·¥¹¥Æ¥à¡¦¥³¡¼¥ë¤òÄ̤·¤Æ¤Î¤ßÊѹ¹¤Ç¤­¤ë¡£ sched_priority ¤Ï 0 ¤«¤é 99 ¤ÎÈϰϤÎÃͤò¼è¤ë¤³¤È¤¬¤Ç¤­¡¢ ¥¹¥±¥¸¥å¡¼¥é¤Ï¤½¤Î sched_priority ¤ÎÃͤ½¤ì¤¾¤ì¤ËÂФ·¤Æ ¼Â¹Ô²Äǽ¤Ê¥×¥í¥»¥¹¤Î¥ê¥¹¥È¤ò´ÉÍý¤·¤Æ¤¤¤ë¡£¼¡¤Ë¼Â¹Ô¤¹¤ë¥×¥í¥»¥¹¤ò ·èÄꤹ¤ë¤¿¤á¤Ë¡¢Linux ¤Î¥¹¥±¥¸¥å¡¼¥é¤ÏÀÅŪͥÀèÅ٤κǤâ¹â¤¤ ¶õ¤Ç¤Ê¤¤¥ê¥¹¥È¤òõ¤·¤Æ¡¢¤½¤Î¥ê¥¹¥È¤ÎÀèƬ¤Î¥×¥í¥»¥¹¤ò¼è¤ê½Ð¤¹¡£ ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤Ï¤½¤ì¤¾¤ì¤Î¥×¥í¥»¥¹¤¬Æ±¤¸ÀÅŪͥÀèÅÙ¤ò»ý¤Ä ¥×¥í¥»¥¹¤Î¥ê¥¹¥È¤ÎÃæ¤Î¤É¤³¤ËÁÞÆþ¤µ¤ì¡¢¤³¤Î¥ê¥¹¥È¤ÎÃæ¤ò¤É¤Î¤è¤¦¤Ë °ÜÆ°¤¹¤ë¤«¤ò·èÄꤹ¤ë¡£

SCHED_OTHER ¤Ï¥Ç¥Õ¥©¥ë¥È¤Î°ìÈÌŪ¤Ê»þʬ³ä·¿¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤Ç¡¢ ¿¤¯¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ»ÈÍѤµ¤ì¤ë¡£ SCHED_BATCH ¤Ï¥×¥í¥»¥¹¤Î¡Ö¥Ð¥Ã¥Á¡×¥¿¥¤¥×¤Î¼Â¹Ô¤òÌÜŪ¤È ¤·¤¿¤â¤Î¤Ç¤¢¤ë¡£ SCHED_FIFO ¤ÈSCHED_RR ¤Ï¤É¤Î¼Â¹Ô²Äǽ¥×¥í¥»¥¹¤òÁªÂò¤¹¤ë¤« ¤Ë¤Ä¤¤¤Æ¡¢¤è¤êÀµ³Î¤ÊÀ©¸æ¤òɬÍפȤ¹¤ë»þ´Ö¤ÎÀ©Ì󤬸·¤·¤¤Æüì¤Ê ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¤¿¤á¤Î¤â¤Î¤Ç¤¢¤ë¡£

SCHED_OTHER ¤ä SCHED_BATCH ¤Ç¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë ¥×¥í¥»¥¹¤ÏÀÅŪͥÀèÅ٤Ȥ·¤Æ 0 ¤¬»ØÄꤵ¤ì¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£ SCHED_FIFO ¤ä SCHED_RR ¤Ç¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë¥×¥í¥»¥¹¤Ï 1 ¤«¤é 99 ¤ÎÈϰϤΠÀÅŪͥÀèÅÙ¤ò¼è¤ë¤³¤È¤¬¤Ç¤­¤ë¡£¥·¥¹¥Æ¥à¡¦¥³¡¼¥ë sched_get_priority_min(2) ¤È sched_get_priority_max(2) ¤ò»ÈÍѤ¹¤ë¤³¤È¤ÇÁ´¤Æ¤Î POSIX.1-2001 ¸ß´¹¥·¥¹¥Æ¥à¤Ë °Ü¿¢²Äǽ¤ÊÊýË¡¤ÇÍ­¸ú¤ÊÍ¥ÀèÅÙ¤ÎÈϰϤò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

Á´¤Æ¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤Ï¥×¥ê¥¨¥ó¥×¥Æ¥£¥Ö (preemptive) ¤Ç¤¢¤ë: ¤è¤ê¹â¤¤Í¥ÀèÅÙ¤Î¥×¥í¥»¥¹¤Î¼Â¹Ô¤Î½àÈ÷¤¬¤Ç¤­¤ë¤È¡¢¸½ºß¤Î¥×¥í¥»¥¹¤Ï Í¥ÀèŪ¤Ê¤â¤Î¤ËÃÖ¤­¤«¤¨¤é¤ì (preempted)¡¢ÂÔ¤Á¥ê¥¹¥È¤ØÌᤵ¤ì¤ë¡£ ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤ÏƱ¤¸ÀÅŪͥÀèÅÙ¤ò»ý¤Ä¼Â¹Ô²Äǽ¤Ê¥×¥í¥»¥¹¤Î ¥ê¥¹¥È¤ÎÃæ¤Ç½çÈ֤Τߤò·èÄꤹ¤ë¡£

SCHED_FIFO: ¥Õ¥¡¡¼¥¹¥È¥¤¥ó¡¦¥Õ¥¡¡¼¥¹¥È¥¢¥¦¥È¡¦¥¹¥±¥¸¥å¡¼¥ê¥ó¥°

SCHED_FIFO ¤Ï 0 ¤è¤êÂ礭¤ÊÀÅŪͥÀèÅ٤ǤΤ߻ÈÍѤǤ­¡¢ SCHED_FIFO ¥×¥í¥»¥¹¤¬¼Â¹Ô²Äǽ¤Ë¤Ê¤Ã¤¿¾ì¹ç¡¢¤¹¤°¤Ë¡¢¸½ºß¼Â¹Ô¤·¤Æ¤¤¤ë SCHED_OTHER ¤« SCHED_BATCH ¥×¥í¥»¥¹¤ÈÃÖ¤­´¹¤¨¤é¤ì¤ë¡£ SCHED_FIFO ¤Ï»þʬ³ä¤Î¤Ê¤¤Ã±½ã¤Ê¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¡¦¥¢¥ë¥´¥ê¥º¥à¤Ç¤¢¤ë¡£ SCHED_FIFO Êý¿Ë¤Ç¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë¥×¥í¥»¥¹¤Ë¤Ï°Ê²¼¤Î µ¬Â§¤¬Å¬ÍѤµ¤ì¤ë: ¤è¤ê¹â¤¤Í¥ÀèÅ٤ξ¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤ÆÃÖ¤­¤«¤¨¤é¤ì¤¿ SCHED_FIFO ¥×¥í¥»¥¹¤Ï¤½¤ÎÍ¥ÀèÅ٤Υꥹ¥È¤ÎÀèƬ¤Ëα¤Þ¤ê³¤±¡¢ ¤è¤ê¹â¤¤Í¥ÀèÅÙ¤Î¥×¥í¥»¥¹Á´¤Æ¤¬Ää»ß (block) ¤·¤¿¾ì¹ç¤Ë¤ÏºÆ¤Ó¼Â¹Ô¤ò³¤±¤ë¡£ SCHED_FIFO ¥×¥í¥»¥¹¤¬¼Â¹Ô²Äǽ¤Ë¤Ê¤Ã¤¿»þ¡¢¤½¤ÎÍ¥ÀèÅ٤Υꥹ¥È¤ÎºÇ¸å ¤ËÁÞÆþ¤µ¤ì¤ë¡£ sched_setscheduler() ¤ä sched_setparam(2) ¤Ï pid ¤Ç»ØÄꤵ¤ì¤¿ SCHED_FIFO (¤Þ¤¿¤Ï SCHED_RR) ¥×¥í¥»¥¹¤¬ ¼Â¹Ô²Äǽ¤Ê¾ì¹ç¡¢¥ê¥¹¥È¤ÎºÇ½é¤ËÃÖ¤¯¡£ ·ë²Ì¤È¤·¤Æ¡¢¤â¤·¥×¥é¥¤¥ª¥ê¥Æ¥£¤¬Æ±¤¸¤À¤Ã¤¿¾ì¹ç¡¢ ¸½ºß¼Â¹ÔÃæ¤Î¥×¥í¥»¥¹¤ËÀè¤ó¤¸¤ë¤«¤â¤·¤ì¤Ê¤¤¡£ (POSIX.1-2001 ¤Ç¤Ï¥×¥í¥»¥¹¤Ï¥ê¥¹¥È¤ÎºÇ¸å¤Ë¹Ô¤¯¤Ù¤­¤Èµ¬Äꤵ¤ì¤Æ¤¤¤ë¡£) sched_yield(2) ¤ò¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤Ï¥ê¥¹¥È¤Î ºÇ¸å¤ËÃÖ¤«¤ì¤ë¡£¤½¤Î¾¤Î¥¤¥Ù¥ó¥È¤Ë¤è¤Ã¤Æ SCHED_FIFO Êý¿Ë¤Ç ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤ë¥×¥í¥»¥¹¤¬Æ±¤¸Í¥ÀèÅ٤μ¹ԲÄǽ¤Ê¥×¥í¥»¥¹¤Î ÂÔ¤Á¥ê¥¹¥È¤ÎÃæ¤ò°ÜÆ°¤¹¤ë¤³¤È¤Ï¤Ê¤¤¡£SCHED_FIFO ¥×¥í¥»¥¹¤Ï I/O Í×µá¤Ë¤è¤Ã¤ÆÄä»ß¤¹¤ë¤«¡¢¤è¤ê¹â¤¤Í¥ÀèÅÙ¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤ÆÃÖ¤­ ¤«¤¨¤é¤ì¤ë¤«¡¢ sched_yield(2) ¤ò¸Æ¤Ó½Ð¤¹¤Þ¤Ç¼Â¹Ô¤ò³¤±¤ë¡£

SCHED_RR: ¥é¥¦¥ó¥É¡¦¥í¥Ó¥ó (round robin) ¡¦¥¹¥±¥¸¥å¡¼¥ê¥ó¥°

SCHED_RR ¤Ï SCHED_FIFO ¤Îñ½ã¤Ê³ÈÄ¥¤Ç¤¢¤ë¡£ ¾å½Ò¤µ¤ì¤¿ SCHED_FIFO ¤Ë´Ø¤¹¤ëµ­½Ò¤ÏÁ´¤Æ SCHED_RR ¤Ë ŬÍѤǤ­¤ë¡£°Û¤Ê¤ë¤Î¤Ï¤½¤ì¤¾¤ì¤Î¥×¥í¥»¥¹¤ÏºÇÂç»þ´Öñ°Ì¤Þ¤Ç¤·¤«¼Â¹Ô¤Ç¤­¤Ê¤¤ ¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£SCHED_RR ¥×¥í¥»¥¹¤¬»þ´Öñ°Ì¤ÈƱ¤¸¤«¤½¤ì¤è¤ê Ť¤»þ´Ö¼Â¹Ô¤µ¤ì¤ë¤È¡¢¤½¤ÎÍ¥ÀèÅ٤Υꥹ¥È¤ÎºÇ¸å¤ËÃÖ¤«¤ì¤ë¡£ ¤è¤ê¹â¤¤Í¥ÀèÅÙ¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤ÆÃÖ¤­¤«¤¨¤é¤ì¡¢¤½¤Î¸å¼Â¹Ô¤òºÆ³«¤·¤¿ SCHED_RR ¥×¥í¥»¥¹¤Ï¡¢¤½¤Î¥é¥¦¥ó¥É¡¦¥í¥Ó¥ó»þ´Öñ°Ì¤ò´°Á´¤Ë»È¤¤ÀÚ¤ë ¤Þ¤Ç¼Â¹Ô¤µ¤ì¤ë¡£¤½¤Î»þ´Öñ°Ì¤ÎŤµ¤Ï sched_rr_get_interval(2) ¤ò»È¤Ã¤Æ¼èÆÀ¤Ç¤­¤ë¡£

SCHED_OTHER: Linux ¤Î¥Ç¥Õ¥©¥ë¥È¤Î»þʬ³ä¥¹¥±¥¸¥å¡¼¥ê¥ó¥°

SCHED_OTHER ¤ÏÀÅŪͥÀèÅÙ 0 ¤Ç¤Î¤ß»ÈÍѤǤ­¤ë¡£ SCHED_OTHER ¤Ï Linux ɸ½à¤Î»þʬ³ä¥¹¥±¥¸¥å¡¼¥é¤Ç¡¢ Æüì¤ÊÀÅŪͥÀèÅÙ¤ò»ý¤¿¤º¡¢¥ê¥¢¥ë¡¦¥¿¥¤¥àµ¡¹½¤òɬÍפȤ·¤Æ¤¤¤Ê¤¤Á´¤Æ¤Î ¥×¥í¥»¥¹¤Ç»ÈÍѤµ¤ì¤ë¡£¼Â¹Ô¤¹¤ë¥×¥í¥»¥¹¤ÏÀÅŪͥÀèÅÙ 0 ¤Î¥ê¥¹¥È¤Î Ãæ¤Î¤ß¤«¤é¡¢Æ°ÅªÍ¥ÀèÅÙ (dynamic priority) ¤Ë´ð¤¤¤Æ·èÄꤵ¤ì¤ë¡£ ưŪͥÀèÅÙ¤Ï (nice(2) ¤ä setpriority(2) ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤ë) nice ¥ì¥Ù¥ë¤Ë´ð¤Å¤¤¤Æ¤¤¤ë¡£¤³¤ÎÃÍ¤Ï¥×¥í¥»¥¹¤Î¼Â¹Ô½àÈ÷¤¬¤Ç¤­¤Æ¤ª¤ê¡¢ ¥¹¥±¥¸¥å¡¼¥é¤Ë¤è¤Ã¤Æ¼Â¹Ô¤¬µñÈݤµ¤ì¤Æ¤¤¤ë´Ö¡¢»þ´Öñ°Ì¤´¤È¤Ë¥¤¥ó¥¯¥ê¥á¥ó¥È ¤µ¤ì¤ë¡£¤³¤ì¤ÏÁ´¤Æ¤Î SCHED_OTHER ¥×¥í¥»¥¹¤Ë¸øÊ¿¤Ç¤¢¤ë¤³¤È¤òÊݾڤ¹¤ë¡£

SCHED_BATCH: ¥Ð¥Ã¥Á¥×¥í¥»¥¹¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°

(Linux 2.6.16 °Ê¹ß) SCHED_BATCH ¤ÏÀÅŪͥÀèÅÙ 0 ¤Ç¤Î¤ß»ÈÍѤǤ­¤ë¡£ ¤³¤ÎÊý¿Ë¤Ï SCHED_OTHER ¤È»÷¤Æ¤¤¤ë¤¬¡¢¤³¤ÎÊý¿Ë¤Ç¤Ï¥¹¥±¥¸¥å¡¼¥é¤¬ ¥×¥í¥»¥¹¤¬¾ï¤Ë CPU ¤ËÉé²Ù¤Î¤«¤«¤ë (CPU-intensive) ½èÍý¤ò¹Ô¤¦¤È²¾Äꤹ¤ë ÅÀ¤¬°Û¤Ê¤ë¡£·ë²Ì¤È¤·¤Æ¡¢¥¹¥±¥¸¥å¡¼¥é¤Ï¤½¤Î¥×¥í¥»¥¹¤Ë¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¾å ¤Î¥Ú¥Ê¥ë¥Æ¥£¤ò¾¯¤·²Ý¤·¡¢¤³¤Î¥×¥í¥»¥¹¤Ï¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤Î·èÄê¤Ç¼ã´³ Îä¶ø¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¡£ ¤³¤ÎÊý¿Ë¤Ï¡¢ÈóÂÐÏÃŪ¤Ê½èÍý¤À¤¬¤½¤Î nice Ãͤò²¼¤²¤¿¤¯¤Ê¤¤½èÍý¤ä¡¢ (½èÍý¤Î¥¿¥¹¥¯´Ö¤Ç) ;·×¤Ê¥¿¥¹¥¯¤ÎÃÖ¤­´¹¤¨¤Î¸¶°ø¤È¤¢¤ëÂÐÏÃŪ¤Ê½èÍý¤Ê¤·¤Ç ³ÎÄêŪ¤Ê (deterministic) ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤òŬÍѤ·¤¿¤¤½èÍý¤Ë ÂФ·¤ÆÍ­¸ú¤Ç¤¢¤ë¡£

Æø¢¤È¥ê¥½¡¼¥¹À©¸Â

2.6.12 ¤è¤êÁ°¤Î¥Ð¡¼¥¸¥ç¥ó¤Î Linux ¥«¡¼¥Í¥ë¤Ç¤Ï¡¢ Æø¢¥×¥í¥»¥¹ (CAP_SYS_NICE ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤Ä¥×¥í¥»¥¹) ¤À¤±¤¬ 0 °Ê³°¤ÎÀÅŪͥÀèÅÙ¤òÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤ë¡£ ÈóÆø¢¥×¥í¥»¥¹¤¬¤Ç¤­¤ëÊѹ¹¤Ï SCHED_OTHER Êý¿Ë¤òÀßÄꤹ¤ë¤³¤È¤À¤±¤Ç¤¢¤ê¡¢¤µ¤é¤Ë¤³¤ÎÊѹ¹¤ò¹Ô¤¨¤ë¤Î¤Ï sched_setscheduler() ¤Î¸Æ¤Ó½Ð¤·¸µ¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬Êý¿Ë¤ÎÊѹ¹ÂÐ¾Ý¥×¥í¥»¥¹ (pid ¤Ç»ØÄꤵ¤ì¤¿¥×¥í¥»¥¹) ¤Î¼Â¥æ¡¼¥¶ ID ¤«¼Â¸ú¥æ¡¼¥¶ ID ¤È °ìÃפ¹¤ë¾ì¹ç¤À¤±¤Ç¤¢¤ë¡£

Linux 2.6.12 °Ê¹ß¤Ç¤Ï¡¢¥ê¥½¡¼¥¹À©¸Â RLIMIT_RTPRIO ¤¬ÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢ ¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤¬ SCHED_RR ¤È SCHED_FIFO ¤Î¾ì¹ç¤Î¡¢ÈóÆø¢¥×¥í¥»¥¹¤ÎÍ¥ÀèÅ٤ξå¸Â¤òÄê¤á¤Æ¤¤¤ë¡£ ÈóÆø¢¥×¥í¥»¥¹¤Ë 0 °Ê³°¤Î RLIMIT_RTPRIO ¥½¥Õ¥È¡¦¥ê¥ß¥Ã¥È¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ ÈóÆø¢¥×¥í¥»¥¹¤Ï¤½¤Î¥×¥í¥»¥¹¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤ÎÊý¿Ë¤ÈÍ¥ÀèÅÙ¤ò Êѹ¹¤Ç¤­¤ë¤¬¡¢Í¥ÀèÅÙ¤ò RLIMIT_RTPRIO ¥½¥Õ¥È¡¦¥ê¥ß¥Ã¥È¤è¤ê¤â¹â¤¤ÃͤËÀßÄê¤Ç¤­¤Ê¤¤¤È¤¤¤¦À©¸Â¤¬²Ý¤µ¤ì¤ë¡£ RLIMIT_RTPRIO ¥½¥Õ¥È¡¦¥ê¥ß¥Ã¥È¤¬ 0 ¤Î¾ì¹ç¡¢Í¥ÀèÅÙ¤ò²¼¤²¤ëÊѹ¹¤·¤«µö²Ä¤µ¤ì¤Ê¤¤¡£ ¤¢¤ëÈóÆø¢¥×¥í¥»¥¹¤¬ÊÌ¤Î¥×¥í¥»¥¹¤ËÂФ·¤Æ¤³¤ì¤é¤ÎÊѹ¹¤ò¹Ô¤¦ºÝ¤Ë¤â¡¢ Ʊ¤¸¥ë¡¼¥ë¤¬Å¬ÍѤµ¤ì¤ë¡£Êѹ¹¤ò¹Ô¤¨¤ë¤Î¤Ï¡¢Êѹ¹¤ò¹Ô¤ª¤¦¤È¤¹¤ë¥×¥í¥»¥¹ ¤Î¼Â¸ú¥æ¡¼¥¶ ID ¤¬Êѹ¹ÂÐ¾Ý¤Î¥×¥í¥»¥¹¤Î¼Â¥æ¡¼¥¶ ID ¤«¼Â¸ú¥æ¡¼¥¶ ID ¤È °ìÃפ·¤Æ¤¤¤ë¾ì¹ç¤Ë¸Â¤é¤ì¤ë¡£ RLIMIT_RTPRIO ¤Ë´Ø¤¹¤ë¤â¤Ã¤È¾Ü¤·¤¤¾ðÊó¤Ï getrlimit(2) ¤ò»²¾È¤Î¤³¤È¡£ Æø¢¥×¥í¥»¥¹ (CAP_SYS_NICE ¥±¡¼¥Ñ¥Ó¥ê¥Æ¥£¤ò»ý¤Ä¥×¥í¥»¥¹) ¤Î¾ì¹ç¡¢¤³¤ÎÀ©¸Â¤Ï̵»ë¤µ¤ì¤ë; ¸Å¤¤¥«¡¼¥Í¥ë¤ÈƱ¤¸¤è¤¦¤Ë¡¢¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë¤ÈÍ¥ÀèÅÙ¤ËÂФ· Ǥ°Õ¤ÎÊѹ¹¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤ë¡£

±þÅú»þ´Ö (response time)

I/O ÂÔ¤Á¤ÇÄä»ß¤·¤¿¤è¤ê¹â¤¤Í¥ÀèÅÙ¤Î¥×¥í¥»¥¹¤ÏºÆ¤Ó¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤ë Á°¤Ë¤¤¤¯¤é¤«¤Î±þÅú»þ´Ö¤¬¤«¤«¤ë¡£¥Ç¥Ð¥¤¥¹¡¦¥É¥é¥¤¥Ð¡¼¤ò½ñ¤¯¾ì¹ç¤Ë¤Ï "slow interrupt" ³ä¤ê¹þ¤ß¥Ï¥ó¥É¥é¡¼¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç ¤³¤Î±þÅú»þ´Ö¤ò·àŪ¤Ë¸º¾¯¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤ë¡£

¤½¤Î¾

»Ò¥×¥í¥»¥¹¤Ï fork(2) ¤ÎºÝ¤Ë¿Æ¥×¥í¥»¥¹¤Î¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¡¦¥¢¥ë¥´¥ê¥º¥à¤ò·Ñ¾µ¤¹¤ë¡£ execve(2) ¤ÎÁ°¸å¤Ç¡¢¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¡¦¥¢¥ë¥´¥ê¥º¥à¤È¥Ñ¥é¥á¡¼¥¿¤ÏÊÝ»ý¤µ¤ì¤ë¡£

¥ê¥¢¥ë¡¦¥¿¥¤¥à¡¦¥×¥í¥»¥¹¤ÏÂçÄñ¡¢¥Ú¡¼¥¸¥ó¥°¤ÎÂÔ¤Á»þ´Ö¤òÈò¤±¤ë¤¿¤á¤Ë mlock(2) ¤ä mlockall(2) ¤ò»È¤Ã¤Æ¥á¥â¥ê¡¦¥í¥Ã¥¯¤ò¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£

SCHED_FIFO ¤ä SCHED_RR ¤Ç¥¹¥±¥¸¥å¡¼¥ê¥ó¥°¤µ¤ì¤ë ¥×¥í¥»¥¹¤¬Ää»ß¤»¤º¤Ë̵¸Â¥ë¡¼¥×¤Ë¤ª¤Á¤¤¤ë¤È¡¢ ¾¤ÎÁ´¤Æ¤Î¤è¤êÄ㤤ͥÀèÅÙ¤Î¥×¥í¥»¥¹¤ò±Êµ×¤ËÄä»ß (block) ¤µ¤»¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢ ¥½¥Õ¥È¥¦¥§¥¢³«È¯¼Ô¤Ï¥³¥ó¥½¡¼¥ë¤Î¥·¥§¥ë¤ÎÀÅŪͥÀèÅÙ¤ò¥Æ¥¹¥È¤¹¤ë ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤è¤ê¤â¾ï¤Ë¹â¤¯ÊݤĤ٤­¤Ç¤¢¤ë¡£ ¤³¤ì¤Ë¤è¤Ã¤Æ´üÂÔÄ̤ê¤ËÄä»ß¤·¤¿¤ê½ªÎ»¤·¤¿¤ê¤·¤Ê¤¤¥ê¥¢¥ë¡¦¥¿¥¤¥à¡¦ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¶ÛµÞ½ªÎ»¤µ¤»¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ë¡£

POSIX ¥·¥¹¥Æ¥à¤Ç¤Ï <unistd.h> ¤Ë _POSIX_PRIORITY_SCHEDULING ¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤Î¤ß sched_setscheduler() ¤È sched_getscheduler() ¤¬»ÈÍѤǤ­¤ë¡£

ÊÖ¤êÃÍ

À®¸ù¤·¤¿¾ì¹ç¡¢ sched_setscheduler() ¤Ï 0 ¤òÊÖ¤¹¡£ À®¸ù¤·¤¿¾ì¹ç¡¢ sched_getscheduler() ¤Ï¸½ºß¤Î¤½¤Î¥×¥í¥»¥¹¤ÎÊý¿Ë (ÈóÉé¤ÎÀ°¿ô) ¤òÊÖ¤¹¡£ ¥¨¥é¡¼¤Î¾ì¹ç¡¢-1 ¤¬ÊÖ¤µ¤ì¡¢ errno ¤¬Å¬ÀÚ¤ËÀßÄꤵ¤ì¤ë¡£

¥¨¥é¡¼

EINVAL
¥¹¥±¥¸¥å¡¼¥ê¥ó¥°Êý¿Ë policy ¤¬´Ö°ã¤Ã¤Æ¤¤¤ë¤«¡¢ ¥Ñ¥é¥á¡¼¥¿ param ¤¬¤½¤ÎÊý¿Ë¤Ç¤Ï°ÕÌ£¤ò¤Ê¤µ¤Ê¤¤¡£
EPERM
¸Æ¤Ó½Ð¤·¤¿¥×¥í¥»¥¹¤¬Å¬ÀÚ¤ÊÆø¢¤ò»ý¤Ã¤Æ¤¤¤Ê¤¤¡£
ESRCH
ID¤¬ pid ¤Î¥×¥í¥»¥¹¤¬¸«¤Ä¤«¤é¤Ê¤¤¡£

½àµò

POSIX.1-2001. SCHED_BATCH Êý¿Ë¤Ï Linux ¸ÇÍ­¤Ç¤¢¤ë¡£

Ãí°Õ

ɸ½àŪ¤Ê Linux ¤Ï°ìÈÌÌÜŪ¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤Ê¤Î¤Ç¡¢ ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¡¦¥×¥í¥»¥¹¤ä¡¢ÂÐÏÃŪ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡¢ ¥½¥Õ¥È¡¦¥ê¥¢¥ë¥¿¥¤¥à(soft real-time)¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó (ÉáÄ̤Υ¿¥¤¥ß¥ó¥°¤Î±þÅú´ü¸Â (deadline) ¤¬É¬Íפʥ¢¥×¥ê¥±¡¼¥·¥ç¥ó) ¤ò°·¤¨¤ë¡£

ɸ½àŪ¤Ê Linux ¤Ï (¤·¤Ð¤·¤Ð 1Éðʲ¼¤Î) ´ü¸Â¤òÊݾڤ¹¤ëɬÍפ¬¤¢¤Ã¤¿¤ê¡¢ ¼ºÇÔ¤¬ÇËÌÇŪ¤Ê»öÂÖ¤ò°ú¤­µ¯¤³¤¹¥Ï¡¼¥É¡¦¥ê¥¢¥ë¥¿¥¤¥à (hard real-time)¡¦ ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¥µ¥Ý¡¼¥È¤¹¤ë¤è¤¦¤Ë¤Ï À߷פµ¤ì¤Æ¤¤¤Ê¤¤¡£ ¾¤ÎÁ´¤Æ¤Î°ìÈÌÌÜŪ¤Î¥ª¥Ú¥ì¡¼¥Æ¥£¥ó¥°¥·¥¹¥Æ¥à¤ÈƱÍÍ¤Ë Linux ¤Ï ºÇ°­»þ¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Ç¤Ï¤Ê¤¯ Ê¿¶ÑŪ¤Ê¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤òºÇÂç²½¤¹¤ë¤è¤¦¤Ë¥Ç¥¶¥¤¥ó¤µ¤ì¤Æ¤¤¤ë¡£ Linux ¤ÎºÇ°­¤Î¾ì¹ç¤Î³ä¤ê¹þ¤ß½èÍý¤ÏÊ¿¶ÑŪ¤Ê¾ì¹ç¤ËÈæ¤Ù¤ÆÂ礭¤¯Îô¤Ã¤Æ¤¤¤ë¡£ (SMP ¤Î¤¿¤á¤Î¥í¥Ã¥¯¤Î¤è¤¦¤Ê) ¤µ¤Þ¤¶¤Þ¤Ê¥«¡¼¥Í¥ë¥í¥Ã¥¯¤ÏŤ¤ºÇĹÂÔ¤Á»þ´Ö ¤ò°ú¤­µ¯¤³¤¹¡£¤Þ¤¿Ê¿¶Ñ»þ´Ö¤ò¸º¤é¤¹¤¿¤á¤Ë³«È¯¤µ¤ì¤¿Â¿¿ô¤Î¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹ ²þÎɵ»½Ñ¤Ë¤è¤Ã¤ÆºÇ°­»þ¤Î»þ´Ö¤ÏÁý²Ã¤¹¤ë¡£ ¿¤¯¤Î¾õ¶·¤Ç¤Ï¤³¤ì¤¬¤¢¤Ê¤¿¤Î˾¤àÆ°ºî¤À¤í¤¦¡£¤·¤«¤·¤â¤·ËÜÅö¤Ë ¥Ï¡¼¥É¡¦¥ê¥¢¥ë¥¿¥¤¥à¡¦¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò³«È¯¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï RTLinux (http://www.rtlinux.org) ¤ä RTAI (http://www.rtai.org) ¤Î¤è¤¦¤Ê¥ê¥¢¥ë¥¿¥¤¥à³ÈÄ¥¤µ¤ì¤¿ Linux ¤ä¸·¤·¤¤¥ê¥¢¥ë¡¦¥¿¥¤¥à¥¢¥×¥ê¥±¡¼¥·¥ç¥óÀìÍѤËÀ߷פµ¤ì¤¿ ¾¤Î OS ¤Î»ÈÍѤò¹Íθ¤¹¤Ù¤­¤Ç¤¢¤ë¡£

´ØÏ¢¹àÌÜ

getpriority(2), mlock(2), mlockall(2), munlock(2), munlockall(2), nice(2), sched_get_priority_max(2), sched_get_priority_min(2), sched_getaffinity(2), sched_getparam(2), sched_rr_get_interval(2), sched_setaffinity(2), sched_setparam(2), sched_yield(2), setpriority(2), capabilities(7)

Programming for the real world - POSIX.4 by Bill O. Gallmeister, O'Reilly & Associates, Inc., ISBN 1-56592-074-0