¶øÔÚÖÚ¶à²Ù×÷ϵͳÖУ¬Linuxƾ½èÆä¿ªÔ´¡¢¸ßЧ¡¢Îȶ¨µÄÌØµã£¬³ÉΪÁË·þÎñÆ÷¡¢Ç¶Èëʽϵͳ¡¢ÔƼÆËãµÈÁìÓòµÄÊ×Ñ¡
LinuxÖ®ËùÒÔÄܹ»ÔÚÕâЩÁìÓò´ó·ÅÒì²Ê£¬ÆäÇ¿´óµÄ½ø³Ì·ÖÅä»úÖÆ¹¦²»¿Éû
±¾ÎĽ«ÉîÈë̽ÌÖLinux½ø³Ì·ÖÅäµÄÔÀí¡¢²ßÂÔ¼°ÆäÔÚʵ¼ÊÓ¦ÓÃÖеĸßЧÐÔÓëÁé»îÐÔ£¬Õ¹ÏÖÕâÒ»×ÊÔ´¹ÜÀíÒÕÊõµÄ÷ÈÁ¦
Ò»¡¢Linux½ø³Ì·ÖÅäµÄ»ù´¡¿ò¼Ü LinuxµÄ½ø³Ì·ÖÅä»úÖÆ½¨Á¢ÔÚÆä¶ÀÌØµÄÄÚºËÉè¼ÆÖ®ÉÏ
ÔÚLinuxÖУ¬½ø³ÌÊÇ×ÊÔ´·ÖÅäºÍµ÷¶ÈµÄ»ù±¾µ¥Î»£¬Ã¿¸ö½ø³Ì¶¼ÓµÓÐ×Ô¼º¶ÀÁ¢µÄµØÖ·¿Õ¼ä¡¢ÎļþÃèÊö·û¼¯ºÏµÈ
½ø³Ì·ÖÅäµÄºËÐÄÔÚÓÚÈçºÎ¸ßЧ¡¢¹«Æ½µØ·ÖÅäCPUʱ¼äƬ¡¢ÄÚ´æ¡¢I/OÉ豸µÈ×ÊÔ´£¬ÒÔÈ·±£ÏµÍ³µÄÕûÌåÐÔÄܺÍÎȶ¨ÐÔ
1.½ø³Ì״̬Óëµ÷¶È LinuxÖеĽø³Ì¿ÉÒÔ´¦ÓÚ¶àÖÖ״̬£¬°üÀ¨ÔËÐÐ״̬£¨Running£©¡¢¿ÉÔËÐÐ״̬£¨Runnable£©¡¢×èÈû״̬£¨Blocked£©¡¢Ë¯Ãß״̬£¨Sleeping£©µÈ
½ø³Ìµ÷¶ÈÆ÷£¨Scheduler£©¸ºÔð¸ù¾Ýµ±Ç°½ø³ÌµÄ״̬ºÍÓÅÏȼ¶£¬¾ö¶¨Äĸö½ø³ÌÓ¦¸Ã»ñµÃCPU×ÊÔ´
Linux²ÉÓÃÁ˶༶·´À¡¶ÓÁУ¨Multi-Level Feedback Queue, MLFQ£©µÈ¸´ÔÓµ÷¶ÈËã·¨£¬ÒÔÆ½ºâÏìӦʱ¼ä¡¢ÍÌÍÂÁ¿ºÍ¹«Æ½ÐÔ
2.ÄÚ´æ¹ÜÀí Linuxͨ¹ýÐéÄâÄÚ´æ»úÖÆ£¬ÊµÏÖÁËÎïÀíÄÚ´æÓë½ø³ÌµØÖ·¿Õ¼äµÄ½âñî
Õâ°üÀ¨Ò³ÃæÖû»Ëã·¨£¨ÈçLRU, Least Recently Used£©¡¢Ð´Ê±¸´ÖÆ£¨Copy-On-Write, COW£©µÈ¼¼Êõ£¬ÓÐЧÌá¸ßÁËÄÚ´æÀûÓÃÂÊ£¬¼õÉÙÁËÄÚ´æË鯬£¬²¢Ö§³ÖÁ˽ø³ÌµÄ¿ìËÙ´´½¨ºÍÏú»Ù
3.I/Oµ÷¶È ¶ÔÓÚI/OÃܼ¯ÐÍÈÎÎñ£¬LinuxÌṩÁ˶àÖÖI/Oµ÷¶È²ßÂÔ£¬Èçnoop£¨ÎÞ²Ù×÷£©¡¢cfq£¨ÍêÈ«¹«Æ½¶ÓÁУ©¡¢deadline£¨½ØÖ¹Ê±¼ä£©µÈ£¬ÒÔÊÊÓ¦²»Í¬³¡¾°ÏµÄI/OÐèÇó
ÕâЩ²ßÂÔͨ¹ýºÏÀíµ÷¶ÈI/OÇëÇ󣬼õÉÙÁËI/O²Ù×÷µÄÑÓ³Ù£¬Ìá¸ßÁËϵͳµÄÕûÌåÏìÓ¦ËÙ¶È
¶þ¡¢Linux½ø³Ì·ÖÅäµÄ²ßÂÔÓëʵ¼ù LinuxµÄ½ø³Ì·ÖÅä²ßÂÔ²»½ö×¢ÖØÐ§ÂÊ£¬»¹Ç¿µ÷¹«Æ½ÐÔ£¬È·±£ËùÓнø³Ì¶¼ÄÜ»ñµÃ±ØÒªµÄ×ÊÔ´£¬Í¬Ê±±ÜÃâ×ÊÔ´¼¢¶öºÍ¹ýÔØ
1.ʱ¼äƬÂÖת£¨Round-Robin Scheduling£© ʱ¼äƬÂÖתÊÇ×î»ù±¾µÄ½ø³Ìµ÷¶È²ßÂÔÖ®Ò»
LinuxΪÿ¸ö¿ÉÔËÐнø³Ì·ÖÅäÒ»¸ö¹Ì¶¨´óСµÄʱ¼äƬ£¬µ±½ø³ÌµÄʱ¼äƬÓÃÍêʱ£¬µ÷¶ÈÆ÷½«ÆäÖÃÓÚ¶ÓÁÐĩβ£¬×ª¶øµ÷¶ÈÏÂÒ»¸ö½ø³Ì
ÕâÖÖ·½Ê½±£Ö¤ÁËÿ¸ö½ø³Ì¶¼Óлú»á»ñµÃCPU×ÊÔ´£¬ÊÊÓÃÓÚ½»»¥Ê½ÏµÍ³£¬È·±£Á¼ºÃµÄÓû§ÌåÑé
2.ÓÅÏȼ¶Óëʵʱµ÷¶È LinuxÖ§³Ö»ùÓÚÓÅÏȼ¶µÄµ÷¶È£¬¸ßÓÅÏȼ¶½ø³Ì¿ÉÒÔÓÅÏÈ»ñµÃCPU×ÊÔ´
´ËÍ⣬Linux»¹ÌṩÁËʵʱµ÷¶È²ßÂÔ£¨ÈçSCHED_FIFO,SCHED_RR£©£¬ÓÃÓÚÂú×ã¶Ôʱ¼äÃô¸ÐµÄÓ¦ÓÃÐèÇó£¬ÈçÒôÊÓÆµ´¦Àí¡¢ÊµÊ±¿ØÖÆÏµÍ³µÈ
ÕâЩ²ßÂÔͨ¹ýÌá¸ßʵʱ½ø³ÌµÄÓÅÏȼ¶£¬¼õÉÙÁËÑÓ³Ù£¬±£Ö¤ÁËϵͳµÄʵʱÐÔÄÜ
3.CPUÇ׺ÍÐÔ£¨CPU Affinity£© CPUÇ׺ÍÐÔÊÇÖ¸½ø³ÌÓëÌØ¶¨CPUºËÐÄÖ®¼äµÄ°ó¶¨¹ØÏµ
LinuxÔÊÐíÓû§»òϵͳ¹ÜÀíÔ±ÉèÖýø³ÌµÄCPUÇ׺ÍÐÔ£¬ÒÔ¼õÉÙ½ø³ÌÔÚCPUºËÐļäµÄÇ¨ÒÆ£¬½µµÍ»º´æÊ§Ð§µÄ¸ÅÂÊ£¬´Ó¶øÌá¸ßCPUµÄÀûÓÃÂʺͳÌÐòµÄÖ´ÐÐЧÂÊ
Õâ¶ÔÓÚ¶àºË´¦ÀíÆ÷ϵͳÓÈÎªÖØÒª
4.ÄÚ´æ¹ÜÀí²ßÂÔ LinuxµÄÄÚ´æ¹ÜÀí²»½ö¹Ø×¢ÄÚ´æµÄ·ÖÅäÓë»ØÊÕ£¬»¹Í¨¹ýÄÚ´æÑ¹Ëõ£¨ÈçzRAM£©¡¢ÄÚ´æÈ¥ÖØ£¨KSM, Kernel Samepage Merging£©µÈ¼¼Êõ£¬½øÒ»²½ÓÅ»¯ÁËÄÚ´æÊ¹ÓÃ
ÕâЩ²ßÂÔÔÚÄÚ´æ×ÊÔ´½ôÕÅʱÓÈÎªÖØÒª£¬Äܹ»ÓÐЧ»º½âÄÚ´æÑ¹Á¦£¬±ÜÃâϵͳ±ÀÀ£
5.I/OÓÅ»¯ Õë¶ÔI/OÃܼ¯ÐÍÓ¦Óã¬LinuxµÄI/Oµ÷¶È²ßÂÔͨ¹ýÖÇÄܵطÖÅäI/O´ø¿í£¬¼õÉÙÁË´ÅÅÌÕùÓã¬Ìá¸ßÁËI/O²Ù×÷µÄЧÂÊ
ÀýÈ磬cfq²ßÂÔͨ¹ý¹«Æ½µØ·ÖÅäI/OÇëÇ󣬱ÜÃâÁ˵¥¸ö½ø³Ì¶ÀÕ¼I/O×ÊÔ´£¬È·±£ÁËϵͳµÄÕûÌåÍÌÍÂÁ¿
Èý¡¢Linux½ø³Ì·ÖÅäµÄ¸ß¼¶ÌØÐÔÓëÌôÕ½ Ëæ×ż¼ÊõµÄ·¢Õ¹£¬Linux½ø³Ì·ÖÅä»úÖÆÒ²ÔÚ²»¶Ï½ø»¯£¬ÒÔÊÊÓ¦¸ü¼Ó¸´ÔÓµÄÓ¦Óó¡¾°ºÍÓ²¼þ»·¾³
1.ÈÝÆ÷»¯¼¼Êõ£¨ÈçDocker£© ÈÝÆ÷»¯¼¼Êõͨ¹ýÐéÄ⻯²Ù×÷ϵͳ¼¶±ðµÄ×ÊÔ´£¬ÊµÏÖÁ˽ø³Ì¼¶±ðµÄ¸ôÀëÓë×ÊÔ´ÏÞÖÆ
Linuxͨ¹ýcgroup£¨¿ØÖÆ×飩ºÍnamespace£¨ÃüÃû¿Õ¼ä£©µÈ¼¼Êõ£¬ÎªÈÝÆ÷ÌṩÁ˶ÀÁ¢µÄ×ÊÔ´ÊÓͼºÍ¿ØÖÆÄÜÁ¦£¬Ê¹µÃÈÝÆ÷»¯Ó¦ÓÃÄܹ»¸ßЧ¡¢°²È«µØ¹²ÏíËÞÖ÷»ú×ÊÔ´
2.ÐéÄ⻯ÓëÔÆ»·¾³ ÔÚÐéÄ⻯ÓëÔÆ»·¾³ÖУ¬Linux½ø³Ì·ÖÅäÃæÁÙ×ÅеÄÌôÕ½£¬Èç×ÊÔ´¶¯Ì¬·ÖÅä¡¢µ¯ÐÔÉìËõµÈ
Linuxͨ¹ýKVM£¨Kernel-based Virtual Machine£©¡¢XenµÈÐéÄ⻯¼¼Êõ£¬ÒÔ¼°KubernetesµÈÈÝÆ÷±àÅŹ¤¾ß£¬ÊµÏÖÁËÐéÄâ»ú»òÈÝÆ÷×ÊÔ´µÄÁé»îµ÷¶ÈÓë×Ô¶¯À©Õ¹£¬Âú×ãÁËÔÆ¼ÆËã»·¾³Ï¶Ô×ÊÔ´¸ßЧÀûÓúÍÁé»î¹ÜÀíµÄÐèÇó
3.°²È«ÐÔÓë¸ôÀëÐÔ Ëæ×Ű²È«ÍþвµÄÈÕÒæÑϾþ£¬Linux½ø³Ì·ÖÅä»úÖÆÒ²ÔÚ²»¶Ï¼ÓÇ¿°²È«ÐÔÓë¸ôÀëÐÔ
ÀýÈ磬ͨ¹ýSELinux¡¢AppArmorµÈ°²È«Ä£¿é£¬LinuxʵÏÖÁ˶Խø³ÌȨÏÞµÄϸÁ£¶È¿ØÖÆ£¬ÓÐЧ·ÀÖ¹Á˶ñÒâ½ø³ÌµÄ¹¥»÷ÓëÀ©É¢
ËÄ¡¢½áÂÛ Linux½ø³Ì·ÖÅä»úÖÆÊÇLinux²Ù×÷ϵͳ¸ßЧ¡¢Îȶ¨ÔËÐеĻùʯ
ͨ¹ý¸´ÔÓ¶ø¾«Ï¸µÄµ÷¶ÈËã·¨¡¢ÄÚ´æ¹ÜÀí²ßÂÔ¡¢I/Oµ÷