LinuxÀú³ÌÓÅÏȼ¶µ÷Àí»úÖÆÆÊÎö
ÎÊÌ⣺LinuxÀú³ÌÓÅÏȼ¶µ÷Àí»úÖÆÆÊÎö
Linux²Ù×÷ϵͳÊÇÒ»¸ö¿ªÔ´µÄ²Ù×÷ϵͳ£¬¾ßÓÐÇ¿Ê¢µÄ¶àʹÃü´¦Öóͷ£ÄÜÁ¦¡£ÔÚLinuxϵͳÖУ¬Àú³ÌµÄµ÷ÀíÊǺÜÊÇÖ÷ÒªµÄ£¬ËüÓ°Ïì×ÅϵͳµÄÐÔÄܺÍÏìÓ¦ËÙÂÊ¡£ÎªÁ˸üºÃµØ¾ÙÐÐÀú³Ìµ÷Àí£¬LinuxϵͳʵÏÖÁËÀú³ÌÓÅÏȼ¶µ÷Àí»úÖÆ¡£
1. Àú³ÌÓÅÏȼ¶
ÔÚLinuxϵͳÖУ¬Ã¿¸öÀú³Ì¶¼ÓÐÒ»¸öÓÅÏȼ¶£¬ÓÃÀ´¾öÒéÀú³ÌÔÚϵͳÖеĵ÷Àí˳Ðò¡£ÓÅÏȼ¶µÄÈ¡Öµ¹æģͨ³£ÊÇ0~139£¬ÆäÖÐ0´ú±í×î¸ßÓÅÏȼ¶£¬139´ú±í×îµÍÓÅÏȼ¶¡£Àú³ÌµÄÓÅÏȼ¶¿ÉÒÔͨ¹ýniceÖµÀ´ÉèÖã¬niceÖµµÄ¹æÄ£ÊÇ-20~19£¬ÖµÔ½Ð¡ÌåÏÖÓÅÏȼ¶Ô½¸ß¡£
2. Àú³Ìµ÷ÀíÕ½ÂÔ
Linuxϵͳ½ÓÄÉÁ˶àÖÖ²î±ðµÄÀú³Ìµ÷ÀíÕ½ÂÔ£¬³£¼ûµÄÓÐÁ½ÖÖ£ºÊµÊ±µ÷ÀíÕ½ÂԺͷÇʵʱµ÷ÀíÕ½ÂÔ¡£ÊµÊ±µ÷ÀíÕ½ÂÔ°üÀ¨FIFOµ÷ÀíºÍRound-Robinµ÷Àí£¬·Çʵʱµ÷ÀíÕ½ÂÔ°üÀ¨¹«Õýµ÷ÀíºÍ¾ßÓÐÓÅÏȼ¶µÄµ÷Àí¡£
3. Àú³Ìµ÷ÀíʵÏÖ
LinuxϵͳÖÐʹÓÃCFS£¨Completely Fair Scheduler£©µ÷ÀíÆ÷À´¾ÙÐÐÀú³ÌµÄµ÷Àí¡£CFSµ÷ÀíÆ÷ƾ֤Àú³ÌµÄÓÅÏȼ¶ºÍVRuntime£¨ÐéÄâÔËÐÐʱ¼ä£©À´¾öÒéÏÂÒ»¸öÒªÔËÐеÄÀú³Ì¡£¾ßÓиüСVRuntimeµÄÀú³Ì½«±»ÓÅÏÈÑ¡ÖоÙÐе÷Àí¡£
4. ´úÂëʾÀý
ÒÔÏÂÊÇÒ»¸ö¼òÆÓµÄC³ÌÐòʾÀý£¬Õ¹Ê¾ÁËÔõÑù½¨ÉèÒ»¸öеÄÀú³Ì²¢ÉèÖÃÆäÓÅÏȼ¶£º
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { pid_t pid; int nice_val = 0; pid = fork(); if (pid < 0) { perror("fork failed"); exit(1); } else if (pid == 0) { nice_val = 5; printf("Child process nice value before set: %d ", nice_val); nice(nice_val); printf("Child process nice value after set: %d ", nice_val); printf("Child process pid: %d ", getpid()); } else { nice_val = 10; printf("Parent process nice value before set: %d ", nice_val); nice(nice_val); printf("Parent process nice value after set: %d ", nice_val); printf("Parent process pid: %d ", getpid()); } return 0; }
µÇ¼ºó¸´ÖÆ
ÔÚÉÏÃæµÄ´úÂëÖУ¬Í¨¹ýŲÓÃniceº¯Êý¿ÉÒÔÉèÖÃÀú³ÌµÄniceÖµ£¬´Ó¶øÓ°ÏìÀú³ÌµÄÓÅÏȼ¶¡£×ÓÀú³ÌºÍ¸¸Àú³Ì»®·ÖÉèÖÃÁ˲î±ðµÄniceÖµ£¬ÒÔչʾÀú³ÌÓÅÏȼ¶µÄ²î±ð¡£
½áÓï
ͨ¹ýÒÔÉÏÆÊÎöºÍ´úÂëʾÀý£¬ÎÒÃǶÔLinuxÀú³ÌÓÅÏȼ¶µ÷Àí»úÖÆÓÐÁ˸üÉîÈëµÄÏàʶ¡£Àú³ÌÓÅÏȼ¶µ÷Àí»úÖƹØÓÚϵͳµÄÐÔÄܺÍ×ÊÔ´·ÖÅÉÆð×ÅÖÁ¹ØÖ÷ÒªµÄ×÷Óã¬Ã÷È·ºÍÕÆÎÕÕâÒ»»úÖƹØÓÚϵͳÖÎÀíÔ±ºÍ¿ª·¢Ö°Ô±À´ËµÊǺÜÊÇÖ÷ÒªµÄ¡£
ÒÔÉϾÍÊÇLinuxÀú³ÌÓÅÏȼ¶µ÷Àí»úÖÆÆÊÎöµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡