Linux ͬ²½·½·¨ÆÊÎö
ÎÄÕÂÀ´Ô´:http://www.ibm.com/developerworks/cn/linux/l-linux-synchronization.html
¼¶±ð£º Öм¶
M. Tim Jones, ¹ËÎʹ¤³Ìʦ, Emulex
2007 Äê 11 ÔÂ 19 ÈÕ
ÔÚѧϰ Linux® µÄ¹ý³ÌÖУ¬ÄúÒ²Ðí½Ó´¥¹ý²¢·¢£¨concurrency£©¡¢ÁÙ½ç¶Î£¨critical section£©ºÍËø¶¨£¬µ«ÊÇÈçºÎÔÚÄÚºËÖÐʹÓÃÕâЩ¸ÅÄîÄØ£¿±¾ÎÄÌÖÂÛÁË 2.6 °æÄÚºËÖпÉÓõÄËø¶¨»úÖÆ£¬°üÀ¨Ô×ÓÔËËã·û£¨atomic operator£©¡¢×ÔÐýËø£¨spinlock£©¡¢¶Á/Ð´Ëø£¨reader/writer lock£©ºÍÄÚºËÐźÅÁ¿£¨kernel semaphore£©¡£ ±¾ÎÄ»¹Ì½ÌÖÁËÿÖÖ»úÖÆ×îÊʺÏÓ¦Óõ½ÄÄЩµØ·½£¬ÒÔ¹¹½¨°²È«¸ßЧµÄÄں˴úÂë¡£
±¾ÎÄÌÖÂÛÁË Linux ÄÚºËÖпÉÓõĴóÁ¿Í¬²½»òËø¶¨»úÖÆ¡£ÕâЩ»úÖÆÎª 2.6.23 °æÄں˵ÄÐí¶à¿ÉÓ÷½·¨ÌṩÁËÓ¦ÓóÌÐò½Ó¿Ú£¨API£©¡£µ«ÊÇÔÚÉîÈëѧϰ API ֮ǰ£¬Ê×ÏÈÐèÒªÃ÷°×½«Òª½â¾öµÄÎÊÌâ¡£
developerWorks ÉÏ Tim µÄ¸ü¶à ÆÊÎö... ϵÁÐ
Linux ÎļþϵͳÆÊÎö
Linux ÍøÂç¶ÑÕ»ÆÊÎö
Linux ÄÚºËÆÊÎö
Linux slab ·ÖÅäÆ÷ÆÊÎö
Tim µÄËùÓÐ Anatomy of... ÎÄÕÂ
²¢·¢ºÍËø¶¨
µ±´æÔÚ²¢·¢ÌØÐÔʱ£¬±ØÐëʹÓÃͬ²½·½·¨¡£µ±ÔÚͬһʱ¼ä¶Î³öÏÖÁ½¸ö»ò¸ü¶à½ø³Ì²¢ÇÒÕâЩ½ø³Ì±Ë´Ë½»»¥£¨ÀýÈ磬¹²ÏíÏàͬµÄ×ÊÔ´£©Ê±£¬¾Í´æÔÚ²¢·¢ ÏÖÏó¡£
ÔÚµ¥´¦ÀíÆ÷£¨uniprocessor£¬UP£©Ö÷»úÉÏ¿ÉÄÜ·¢Éú²¢·¢£¬ÔÚÕâÖÖÖ÷»úÖжà¸öÏ̹߳²Ïíͬһ¸ö CPU ²¢ÇÒÇÀÕ¼£¨preemption£©´´½¨¾ºÌ¬Ìõ¼þ¡£ÇÀÕ¼ ͨ¹ýÁÙʱÖжÏÒ»¸öÏß³ÌÒÔÖ´ÐÐÁíÒ»¸öÏ̵߳ķ½Ê½À´ÊµÏÖ CPU ¹²Ïí¡£¾ºÌ¬Ìõ¼þ ·¢ÉúÔÚÁ½¸ö»ò¸ü¶àÏ̲߳Ù×ÝÒ»¸ö¹²ÏíÊý¾ÝÏîʱ£¬Æä½á¹ûÈ¡¾öÓÚÖ´ÐеÄʱ¼ä¡£ÔÚ¶à´¦ÀíÆ÷£¨MP£©¼ÆËã»úÖÐÒ²´æÔÚ²¢·¢£¬ÆäÖÐÿ¸ö´¦ÀíÆ÷Öй²ÏíÏàͬÊý¾ÝµÄÏß³ÌͬʱִÐС£×¢ÒâÔÚ MP Çé¿öÏ´æÔÚÕæÕýµÄ²¢ÐУ¨parallelism£©£¬ÒòΪÏß³ÌÊÇͬʱִÐеġ£¶øÔÚ UP ÇéÐÎÖУ¬²¢ÐÐÊÇͨ¹ýÇÀÕ¼´´½¨µÄ¡£Á½ÖÖģʽÖÐʵÏÖ²¢·¢¶¼½ÏΪÀ§ÄÑ¡£
Linux ÄÚºËÔÚÁ½ÖÖģʽÖж¼Ö§³Ö²¢·¢¡£Äں˱¾ÉíÊǶ¯Ì¬µÄ£¬¶øÇÒÓÐÐí¶à´´½¨¾ºÌ¬Ìõ¼þµÄ·½·¨¡£Linux ÄÚºËÒ²Ö§³Ö¶à´¦Àí£¨multiprocessing£©£¬³ÆÎª¶Ô³Æ¶à´¦Àí£¨SMP£©¡£¿ÉÒÔÔÚ±¾ÎĺóÃæµÄ ²Î¿¼×ÊÁÏ ²¿·Öѧµ½¸ü¶à¹ØÓÚ SMP µÄ֪ʶ¡£
ÁÙ½ç¶Î¸ÅÄîÊÇΪ½â¾ö¾ºÌ¬Ìõ¼þÎÊÌâ¶ø²úÉúµÄ¡£Ò»¸öÁÙ½ç¶Î ÊÇÒ»¶Î²»ÔÊÐí¶à··ÃÎʵÄÊܱ£»¤µÄ´úÂë¡£Õâ¶Î´úÂë¿ÉÒÔ²Ù×ݹ²ÏíÊý¾Ý»ò¹²Ïí·þÎñ£¨ÀýÈçÓ²¼þÍâΧÉ豸£©¡£ÁÙ½ç¶Î²Ù×÷ʱ¼á³Ö»¥³âËø£¨mutual exclusion£©ÔÔò£¨µ±Ò»¸öÏ̴߳¦ÓÚÁÙ½ç¶ÎÖÐʱ£¬ÆäËûËùÓÐÏ̶߳¼²»ÄܽøÈëÁÙ½ç¶Î£©¡£
ÁÙ½ç¶ÎÖÐÐèÒª½â¾öµÄÒ»¸öÎÊÌâÊÇËÀËøÌõ¼þ¡£¿¼ÂÇÁ½¸ö¶ÀÁ¢µÄÁÙ½ç¶Î£¬¸÷×Ô±£»¤²»Í¬µÄ×ÊÔ´¡£Ã¿¸ö×Ê
Ïà¹ØÎĵµ£º
<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->
½üÆÚÒÔÀ´£¬¾²¹ÛÊÀ½ç
Linux
Òµ½çµÄ¸÷ÖÖ¶¯Ïò£¬ÁîÈËÐÄÈç³±Ó¿£¬²»µÃ°²Äþ¡£´Ë»°Ôõô½²£¿
Ê®¼¸ÄêÀ´£¬
Linux
ÒѾÐγÉÒ»¹ÉÊÀ½çÐԵķ¢Õ¹³±Á÷£¬ÈκÎÊÆÁ¦Ò²×èµ²²»ÁË¡£Ðí¶àÊÀ½ç¼¶µÄ´ó¹ ......
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
pthread_mutex_t wqy_mutex_pause = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t wqy_cond_pause = PTHREAD_COND_INITIALIZER;
bool wqy_pthread_pause = false;
void wqy_pthread_suspend(void)
{
if ......
×¢Òâ¸Ã·½·¨ÊǼÆËãµÄ×Ô¿ª»úÒÔÀ´µÄʹÓÃÂÊ£¬ÊÇÒ»¸öÈ«¾ÖµÄ£¬Ã»¶à´óÒâÒ壬ÿһ´Î¼ÆËãCPUÀûÓÃÂÊ = 100 *£¨user + nice + system£©/£¨user + nice + system + idle£© ÕâÀïÒª¼õÈ¥Ò»¶¨Ê±¼äÒÔǰ·½¿É¼ÆËã³öÕâÒ»¶Îʱ¼äÄÚµÄcpuʹÓÃÂÊ¡£ "procÎļþϵͳÊÇÒ»¸öαÎļþϵͳ£¬ËüÖ»´æÔÚÄÚ´æµ±ÖУ¬¶ø²»Õ¼ÓÃÍâ´æ¿Õ¼ä¡£ËüÒÔÎļþϵͳµÄ·½Ê½Îª·ÃÎÊÏµÍ ......
×î½ü¿´ÁËһЩLinuxÃüÁîÐеÄÎÄÕ£¬ÔÚϵͳÐÅÏ¢²é¿´·½ÃæÑ§µ½²»ÉÙÃüÁî¡£ÏëÆðÒÔǰд¹ýµÄһƪÆäʵLinuxÕâÑùÓøü¼òµ¥£¬·¢ÏÖÕâЩϵͳÐÅÏ¢²é¿´ÃüÁîÒ²¿ÉÒÔ×ܽá³öһƪССµÄ¶«Î÷À´ÁË¡£
ÁíÍâÕâÀﻹÓзdz£¶àµÄÃüÁ¿ÉÒÔ×÷Ϊ²Î¿¼¡£
ϵͳ
# uname -a &n ......
ÔÚlinuxÏÂһЩ³£ÓõĹػú/ÖØÆôÃüÁîÓÐshutdown¡¢halt¡¢reboot¡¢¼°init£¬ËüÃǶ¼¿ÉÒÔ´ïµ½ÖØÆôϵͳµÄÄ¿µÄ£¬µ«Ã¿¸öÃüÁîµÄÄÚ²¿¹¤×÷¹ý³ÌÊDz»Í¬µÄ£¬Í¨¹ý±¾ÎĵĽéÉÜ£¬Ï£ÍûÄã¿ÉÒÔ¸ü¼ÓÁé»îµÄÔËÓø÷ÖֹػúÃüÁî¡£
¡¡¡¡1.shutdown
¡¡¡¡shutdownÃüÁȫµØ½«ÏµÍ³¹Ø»ú¡£ÓÐЩÓû§»áʹÓÃÖ±½Ó¶ÏµôµçÔ´µÄ·½Ê½À´¹Ø±Õlinux£¬ÕâÊÇÊ®·ÖΣÏյġ£ÒòÎ ......