ÀÌ Àå¿¡¼´Â Ä¿³ÎÀÇ ¿©·¯ ºÎºÐµéÀÌ ÇÔ²² È¿°úÀûÀ¸·Î µ¿ÀÛÇÒ ¼ö ÀÖµµ·Ï ¸®´ª½º Ä¿³ÎÀÌ Á¦°ø ÇÏ´Â ¸î°¡Áö ÀϹÝÀûÀÎ ÀÛ¾÷°ú ¸ÞÄ¿´ÏÁò¿¡ ´ëÇؼ ¼³¸íÇÑ´Ù.
Ä¿³ÎÀÇ ÇϹݺΠÇڵ鷯 Áß¿¡ ¾î¶² °ÍµéÀº ÀåÄ¡¿¡ °íÁ¤µÇ¾î ÀÖÁö¸¸ ´Ù¸¥ °ÍµéÀº º¸´Ù ÀϹÝÀû À¸·Î ¾µ ¼ö ÀÖ´Ù4 :
Ä¿³Î¿¡ ÀÖ´Â ¾î¶² °ÍÀ̵ç (¿¹¸¦ µé¾î µð¹ÙÀ̽º µå¶óÀ̹ö°°Àº) ÀÛ¾÷Å¥¸¦ ¸¸µé°í »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ½ÇÁ¦·Î Ä¿³ÎÀÌ ¸¸µé°í °ü¸®ÇÏ´Â ÀÛ¾÷Å¥·Î´Â ´ÙÀ½ ¼¼°¡Áö°¡ ÀÖ´Ù9.
ÀÛ¾÷Å¥°¡ 󸮵Ǹé Å¥¿¡ Àִ ù¹ø° ¿ø¼Ò¿¡ ´ëÇÑ Æ÷ÀÎÅʹ ť¿¡¼ Á¦°ÅµÇ¾î null Æ÷ÀÎÅÍ·Î ¹Ù²ï´Ù. »ç½Ç, ÀÌ Á¦°ÅÇÏ´Â °úÁ¤Àº ÇϳªÀÇ ÂÉ°³Áú ¼ö ¾ø´Â ¿¬»êÀ¸·Î 󸮵Ǹç, Áß´ÜµÉ ¼ö ¾ø ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô Å¥¿¡ ÀÖ´Â °¢°¢ÀÇ ¿ø¼Òµé¿¡ µî·ÏµÈ ó¸® ·çƾµéÀÌ Â÷·Ê·Î È£ÃâÀÌ µÈ´Ù. Å¥¿¡ ÀÖ´Â °¢ ¿ø¼Ò´Â Á¾Á¾ Á¤ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÇÒ´ç¹Þ±âµµ ÇÑ´Ù. ±×·±µ¥ ¿©±â¿¡´Â ÇÒ´çµÈ ¸Þ ¸ð¸®¸¦ ¾Ë¾Æ¼ ÇØÁ¦ÇÏ´Â ¸ÞÄ¿´ÏÁòÀÌ º»·¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. ÀÛ¾÷Å¥¸¦ ó¸®ÇÏ´Â ·çƾÀº ´ÜÁö ¸®½ºÆ®ÀÇ ´ÙÀ½ ¿ø¼Ò·Î À̵¿ÇÒ »ÓÀÌ´Ù. ÇÒ´ç¹ÞÀº Ä¿³Î ¸Þ¸ð¸®¸¦ Á¦´ë·Î ÇØÁ¦ÇÏ´Â °ÍÀº Å¥¿¡ ÀÖ´ø ÀÛ¾÷ÀÌ ÇØ¾ß ÇÒ ÀÏÀÌ´Ù.
11.3 ŸÀ̸Ó(Timer)
¿î¿µÃ¼Á¦´Â ¹Ì·¡ÀÇ ¾î¶² ½Ã°£¿¡ ÇؾßÇÒ ÇൿµéÀ» ½ºÄÉÁìÇÒ ¼ö ÀÖ´Â ´É·ÂÀ» ÇÊ¿ä·Î ÇÑ´Ù. ÀÌ
µé ÇൿµéÀ» »ó´ë½Ã°£À¸·Î Á¤È®ÇÏ°Ô ¾ó¸¶°£ÀÇ ½Ã°£ ÈÄ¿¡ ½ÇÇàÇϵµ·Ï ½ºÄÉÁìÇϱâ À§ÇÑ ¸ÞÄ¿
´ÏÁòÀÌ ÇÊ¿äÇÏ´Ù. ¿î¿µÃ¼Á¦¸¦ Áö¿øÇϱ⸦ ¹Ù¶ó´Â ¸¶ÀÌÅ©·ÎÇÁ·Î¼¼¼µéÀº, ¹Ýµå½Ã Á¤±âÀûÀ¸·Î
ÇÁ·Î¼¼¼¿¡°Ô ÀÎÅÍ·´Æ®¸¦ ¹ß»ýÇÏ´Â ÇÁ·Î±×·¡¹Ö °¡´ÉÇÑ °£°Ý ŸÀ̸Ó(interval timer)¸¦ °¡Áö°í
ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ·¸°Ô Á¤±âÀûÀ¸·Î ¹ß»ýÇÏ´Â ÀÎÅÍ·´Æ®¸¦ ½Ã½ºÅÛ Å¬·° ƽ(clock tick)À̶ó°í Çϸç,
ÀÌ´Â ½Ã½ºÅÛÀÇ ÇൿµéÀ» °áÁý½ÃÅ°´Â ¸ÞÆ®·Î³ð°ú ºñ½ÁÇÑ ÀÏÀ» ÇÏ´Â °ÍÀÌ´Ù. ¸®´ª½º´Â ÇöÀç
½Ã°£À» ¾ÆÁÖ ´Ü¼øÇÏ°Ô Ç¥ÇöÇÑ´Ù. ¸®´ª½º´Â ½Ã°£À» ½Ã½ºÅÛÀÌ ºÎÆÃÇÑ ¶§ºÎÅÍ ¹ß»ýÇÑ Å¬·° ƽ
ÀÇ È½¼ö ´ÜÀ§·Î Ç¥ÇöÇÑ´Ù. ¸ðµç ½Ã½ºÅÛ ½Ã°£Àº ÀÌ ´ÜÀ§·Î µÇ¾î ÀÖÀ¸¸ç, ÀÌ´Â jiffies¶ó°í
Çϸç, ÀÌ¿Í ¶È°°Àº À̸§ÀÇ Àü¿ª º¯¼ö°¡ Á¸ÀçÇÑ´Ù12.
¸®´ª½º´Â µÎ°¡Áö ÇüÅÂÀÇ ½Ã½ºÅÛ Å¸À̸Ӹ¦ °¡Áö°í ÀÖÀ¸¸ç, ÀÌ µÎ Å¥ÀÇ ·çƾµéÀº ¶È°°Àº ½Ã½º ÅÛ Å¸ÀÓ¿¡ È£ÃâµÇÁö¸¸13, ±¸Çö¹æ½Ä¿¡ ÀÖ¾î¼ ¾à°£ÀÇ Â÷ÀÌ°¡ ÀÖ´Ù. ±×¸² 11.3Àº ÀÌ µÎ°¡Áö ¸Þ Ä¿´ÏÁòÀ» º¸¿©ÁØ´Ù. ¾ÕÀÇ °ÍÀº ¿¹ÀüÀÇ Å¸ÀÌ¸Ó ¹æ½ÄÀ¸·Î¼, Á¤Àûº¯¼ö·Î timer_struct ÀÚ·á ±¸Á¶¿¡ ´ëÇÑ Æ÷ÀÎÅÍ 32°³¸¦ ¹è¿·Î °¡Áö°í ÀÖÀ¸¸ç, ¾×Ƽºê ŸÀ̸ÓÀÇ ¸¶½ºÅ©ÀÎ timer_active¸¦ °¡Áö°í ÀÖ´Ù. ŸÀ̸Ӱ¡ ŸÀÌ¸Ó Å×ÀÌºí¿¡ µé¾î°¡´Â °ÍÀº Á¤ÀûÀ¸·Î Á¤ÀÇµÈ ´Ù (ÇϹݺΠÇڵ鷯 Å×À̺íÀÎ bh_base¿¡ ´õ °¡±õ´Ù14). °¢ Ç׸ñµéÀº ½Ã½ºÅÛ ÃʱâÈ ¶§ ´ëºÎ ºÐ ÀÌ Å×ÀÌºí¿¡ Ãß°¡µÈ´Ù. µÎ¹ø° ¹æ½ÄÀº ´õ »õ·Î¿î °ÍÀ¸·Î¼ timer_list ÀڷᱸÁ¶¸¦ ¸¸ ·á½Ã°£ÀÇ ¿Ã¸²¼øÀ¸·Î °¡Áö°í ÀÖ´Â ¿¬°á ¸®½ºÆ®¸¦ »ç¿ëÇÑ´Ù.
ÀÌ µÎ°¡Áö ¹æ½Ä ¸ðµÎ ¸¸·á½Ã°£À» jiffies ´ÜÀ§·Î °¡Áö°í ÀÖ´Â ½Ã°£À» ÀÌ¿ëÇϹǷÎ, 5ÃÊ ÈÄ ¿¡ ½ÇÇàµÇ±æ ¹Ù¶ó´Â ŸÀ̸Ӷó¸é, 5Ãʸ¦ jiffies ´ÜÀ§·Î º¯È¯ÇÑ ÈÄ ÇöÀç ½Ã½ºÅÛ ½Ã°£¿¡ ´õ ÇÏ¿© ¸¸·á½Ã°£À» ½Ã½ºÅÛ ½Ã°£ÀÇ jiffies·Î ³ªÅ¸³»¾ß ÇÑ´Ù15. ¸ðµç ½Ã½ºÅÛ Å¬·° ƽ¸¶´Ù Ÿ ÀÌ¸Ó ÇϹݺΠÇڵ鷯´Â ¾×Ƽºê·Î Ç¥½ÃµÇ°í, ´ÙÀ½¿¡ ½ºÄÉÁì·¯°¡ ½ÇÇàµÉ ¶§ ŸÀÌ¸Ó Å¥°¡ ó¸® µÉ ¼ö ÀÖµµ·Ï ÇÑ´Ù. ŸÀÌ¸Ó ÇϹݺΠÇڵ鷯´Â ÀÌ µÎ°¡Áö ¹æ½ÄÀÇ ½Ã½ºÅÛ Å¸À̸Ӹ¦ ¸ðµÎ ó¸® ÇÑ´Ù. ¿¹Àü ¹æ½ÄÀÇ ½Ã½ºÅÛ Å¸À̸ӿ¡ ´ëÇؼ´Â timer_active ºñÆ®¸¶½ºÅ©¸¦ °Ë»çÇÏ¿© ¼³Á¤ ÀÌ µÇ¾î ÀÖ´Â ºñÆ®¸¦ °Ë»çÇÏ°Ô µÈ´Ù. ¸¸¾à ÇöÀç ¾×ƼºêÇÑ Å¸À̸ÓÀÇ ¸¸·á½Ã°£ÀÌ Áö³ª¸é (¸¸ ·á½Ã°£ÀÌ ÇöÀç ½Ã½ºÅÛÀÇ jiffiesº¸´Ù ÀÛÀ¸¸é), ŸÀÌ¸Ó ·çƾÀÌ È£ÃâµÇ°í, ¾×Ƽºê ºñÆ®´Â Áö ¿öÁö°Ô µÈ´Ù. »õ·Î¿î ¹æ½ÄÀÇ Å¸À̸ӿ¡¼´Â, timer_list ÀڷᱸÁ¶ÀÇ ¿¬°á ¸®½ºÆ®¿¡ ÀÖ´Â °¢ ¿ø¼Ò¸¦ °Ë»çÇÏ¿©, ¸¸·áµÈ ¸ðµç ŸÀ̸ӵéÀº ¸®½ºÆ®¿¡¼ Á¦°ÅµÇ°í, µî·ÏµÈ ÇÔ¼ö°¡ È£ÃâµÈ´Ù. »õ·Î¿î ŸÀÌ¸Ó ¹æ½ÄÀº ŸÀÌ¸Ó ·çƾ¿¡ ÀÎÀÚ¸¦ ³Ñ±æ ¼ö ÀÖ´Ù´Â ÀåÁ¡ÀÌ ÀÖ´Ù.
¸®´ª½º Ä¿³ÎÀº ´ë±âÅ¥(±×¸² 11.4À» º¸¶ó)¶ó´Â, ÇÁ·Î¼¼½ºÀÇ task_struct¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í ´ë±âÅ¥¿¡ ÀÖ´Â ´ÙÀ½ ¿ø¼Ò¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ´Â, ¾ÆÁÖ ´Ü¼øÇÑ ÀڷᱸÁ¶¸¦ »ç¿ëÇÑ´Ù.
ÇÁ·Î¼¼½º°¡ ´ë±âÅ¥ÀÇ ³¡¿¡ Ãß°¡°¡ µÇ¸é, À̵éÀº ÀÎÅÍ·´Æ® °¡´É(interruptible), ¶Ç´Â ÀÎÅÍ·´Æ® ºÒ°¡´É(uninterruptible) »óÅ°¡ µÈ´Ù. ÀÎÅÍ·´Æ® °¡´ÉÇÑ ÇÁ·Î¼¼½º´Â ´ë±âÅ¥¿¡ ÀÖ´Â µ¿¾È ¹ß»ýÇÏ ´Â ŸÀÌ¸Ó ¸¸·á³ª ½Ã±×³Î°°Àº À̺¥Æ®µé¿¡ ÀÇÇؼ ÀÎÅÍ·´Æ®°¡ µÉ ¼ö ÀÖ´Ù. ´ë±âÁßÀÎ ÇÁ·Î¼¼ ½ºÀÇ »óÅ´ À̸¦ ¹Ý¿µÇÏ¿© INTERRUPTIBLE ¶Ç´Â UNINTERRUPTIBLE µÑ ÁßÀÇ Çϳª°¡ µÉ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â Áö±Ý ´çÀå °è¼Ó ½ÇÇàÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ½ºÄÉÁì·¯°¡ ½ÇÇàµÇ¾î, »õ·Î ½ÇÇàÇÒ ÇÁ·Î¼¼½º¸¦ ¼±ÅÃÇÏ°Ô µÇ¸é ´ë±â ÇÁ·Î¼¼½º´Â Áß´ÜÀÌ µÈ´Ù16.
´ë±âÅ¥°¡ 󸮰¡ µÉ ¶§17 ´ë±âÅ¥¿¡ ÀÖ´Â ¸ðµç ÇÁ·Î¼¼½ºµéÀÇ »óÅ´ RUNNINGÀ¸·Î ¹Ù²î°Ô µÈ´Ù. ¸¸¾à ±× ÇÁ·Î¼¼½º°¡ ½ÇÇàÅ¥¿¡¼ Á¦°ÅµÈ °ÍÀ̾ú´Ù¸é ´Ù½Ã ½ÇÇàÅ¥¿¡ ³Ö°Ô µÈ´Ù. ´ÙÀ½¿¡ ½ºÄÉÁì·¯°¡ ½ÇÇàµÉ ¶§ ´ë±âÅ¥¿¡ ÀÖ´ø ÇÁ·Î¼¼½ºµéÀº, ´õ ÀÌ»ó ±â´Ù¸®°í ÀÖ´Â °ÍÀÌ ¾Æ´Ï±â ¶§ ¹®¿¡ ½ÇÇàµÉ ¼ö ÀÖ´Â È帰¡ µÈ´Ù. ´ë±âÅ¥¿¡ ÀÖ´Â ÇÁ·Î¼¼½º°¡ ½ºÄÉÁìÀÌ µÇ¸é Á¦ÀÏ ¸ÕÀú ÇÏ ´Â ÀÏÀº ÀÚ½ÅÀ» ´ë±âÅ¥¿¡¼ Á¦°ÅÇÏ´Â °ÍÀÌ´Ù. ´ë±âÅ¥´Â ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀ» µ¿±âÈ Çϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ°í, ¸®´ª½º°¡ ¼¼¸¶Æ÷¾î¸¦ ±¸ÇöÇϴµ¥¿¡µµ »ç¿ëÇÑ´Ù. (¾Æ·¡¸¦ º¸¶ó)
¶ôÀ» ¼ÒÀ¯ÇÏ°í ÀÖ´ø ÇÁ·Î¼¼½º°¡ ÄÚµåÀÇ ÀÓ°èÁö¿ªÀ» ¹þ¾î³¯ ¶§ ¹öÀú¶ôÀÇ °ªÀ» °¨¼Ò½ÃÄÑ 0ÀÌ µÇ°Ô ÇÑ´Ù. ¶ôÀ» °Ë»çÇÏ¸ç °è¼Ó µ¹°í ÀÖ´ø ¾î¶² ÇÁ·Î¼¼½ºµçÁö ÀÌ °ªÀÌ 0ÀÎ °ÍÀ» ¾Ë ¼ö ÀÖ°Ú Áö¸¸, óÀ½ ÀÐÀº ÇÁ·Î¼¼½º°¡ À̸¦ 1·Î Áõ°¡ÇÏ°í ÀÓ°èÁö¿ªÀ¸·Î µé¾î°¡°Ô µÉ °ÍÀÌ´Ù.
¸®´ª½º semaphore ÀڷᱸÁ¶´Â ´ÙÀ½°ú °°Àº Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù20.
¼¼¸¶Æ÷¾îÀÇ Ãʱâ Ä«¿îÆ®°¡ 1À̶ó°í ÇÒ ¶§, óÀ½ »ç¿ëÇÏ´Â ÇÁ·Î¼¼½º´Â ±× °ªÀÌ ¾ç¼ö¶ó´Â °Í À» ¾Ë°í, 1À» °¨¼Ò½ÃÄÑ 0À¸·Î ¸¸µç´Ù. ÀÌ ÇÁ·Î¼¼½º´Â ÀÌÁ¦ ¼¼¸¶Æ÷¾î¿¡ ÀÇÇØ º¸È£µÇ´Â, ÄÚµå ³ª ÀÚ¿øÀÇ ÀÓ°èºÎºÐÀ» "¼ÒÀ¯"ÇÏ°Ô µÈ´Ù. ÇÁ·Î¼¼½º°¡ ÀÓ°èÁö¿ªÀ» ¹þ¾î³ª°Ô µÇ¸é ¼¼¸¶Æ÷¾îÀÇ Ä«¿îÆ®¸¦ Áõ°¡½ÃŲ´Ù. °¡Àå ÃÖ¼±ÀÎ °æ¿ì´Â ÀÓ°èÁö¿ªÀ» ¼ÒÀ¯ÇÏ°íÀÚ ÇÏ´Â ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¾ø ´Â °æ¿ìÀÌ´Ù. ¸®´ª½ºÀÇ ¼¼¸¶Æ÷¾î´Â ÀÌ °æ¿ì(°¡Àå ÈçÇÑ °æ¿ìÀ̱⵵ ÇÏ´Ù)¿¡ ´ëÇØ È¿À²ÀûÀ¸·Î µ¿ÀÛÇϵµ·Ï ±¸ÇöµÇ¾ú´Ù21.
¸¸¾à ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÀÓ°èÁö¿ª¿¡ ÇÑ ÇÁ·Î¼¼½º°¡ µé¾î°¡·Á°í ÇÒ ¶§, ÀÌ ÇÁ·Î ¼¼½ºµµ ¿ª½Ã Ä«¿îÆ®¸¦ 1 °¨¼Ò½ÃŲ´Ù. À̹ø¿£ Ä«¿îÆ®°¡ À½¼ö(-1)À̹ǷΠÇÁ·Î¼¼½º´Â ÀÓ°èÁö¿ª ¿¡ µé¾î°¡Áö ¸øÇÑ´Ù. ´ë½Å ¿µ¿ªÀ» ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÇÁ·Î¼¼½º°¡ ¿µ¿ªÀ» ºüÁ®³ª°¥ ¶§±îÁö ±â´Ù ·Á¾ß ÇÑ´Ù. ¸®´ª½º¿¡¼´Â ±â´Ù¸®´Â ÇÁ·Î¼¼½º¸¦ Àç¿ì°í, ÀÓ°èÁö¿ªÀ» ¼ÒÀ¯ÇÏ°í ÀÖ´Â ÇÁ·Î¼¼½º °¡ ÀÓ°èÁö¿ªÀ» ºüÁ®³ª°¥ ¶§ À̸¦ ±ú¿ìµµ·Ï ÇÑ´Ù. ±â´Ù¸®´Â ÇÁ·Î¼¼½º´Â ÀÚ½ÅÀ» ¼¼¸¶Æ÷¾î¿¡ ÀÖ´Â ´ë±âÅ¥¿¡ Ãß°¡ÇÏ°í, ·çÇÁ¸¦ µ¹¸é¼ waking Ç׸ñÀÇ °ªÀ» °Ë»çÇÏ°í, wakingÀÌ 0ÀÌ ¾Æ ´Ñ °ªÀÌ µÉ ¶§±îÁö ½ºÄÉÁì·¯¸¦ È£ÃâÇÏ´Â ÀÏÀ» ¹Ýº¹ÇÑ´Ù22.
ÀÓ°èÁö¿ªÀÇ ¼ÒÀ¯ÀÚ´Â ¼¼¸¶Æ÷¾îÀÇ Ä«¿îÆ®¸¦ Áõ°¡½ÃÅ°´Âµ¥, ±× °ªÀÌ 0º¸´Ù À۰ųª °°À¸¸é Àá µé¾î¼ ÀÌ ÀÚ¿øÀ» ±â´Ù¸®´Â ÇÁ·Î¼¼½º°¡ ÀÖ´Ù´Â °ÍÀÌ´Ù. °¡Àå ÃÖ¼±ÀÇ °æ¿ì´Â ¼¼¸¶Æ÷¾îÀÇ Ä« ¿îÆ®°¡ ´Ù½Ã ÃʱⰪÀÎ 1ÀÌ µÇ¾î¼, ´õÀÌ»ó ÇÊ¿äÇÑ ÀÏÀÌ ¾ø´Â °ÍÀÌ´Ù. ¼ÒÀ¯ÇÏ´Â ÇÁ·Î¼¼½º´Â waking Ä«¿îÅ͸¦ Áõ°¡½ÃÅ°°í, ¼¼¸¶Æ÷¾îÀÇ ´ë±âÅ¥¿¡¼ Àáµé¾î ÀÖ´Â ÇÁ·Î¼¼½º¸¦ ±ú¿î´Ù. ±â ´Ù¸®´Â ÇÁ·Î¼¼½º°¡ ±ú¾î³µÀ» ¶§ waking Ä«¿îÅÍ´Â ÀÌÁ¦ 1ÀÌ µÇ¾î ÀÖÀ» °ÍÀÌ°í, ÀÌ ÇÁ·Î¼¼ ½º´Â ÀÌÁ¦ ÀÓ°èÁö¿ª¿¡ µé¾î°¥ ¼ö ÀÖ°Ô µÈ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â waking Ä«¿îÅ͸¦ 0À¸·Î °¨¼Ò ½ÃÅ°°í, ÀÚ½ÅÀÇ ÀÛ¾÷À» °è¼ÓÇÏ°Ô µÈ´Ù. ¼¼¸¶Æ÷¾îÀÇ waking Ç׸ñ¿¡ ´ëÇÑ Á¢±ÙÀº ¼¼¸¶Æ÷¾îÀÇ ¶ô Ç׸ñÀ» ÀÌ¿ëÇÑ ¹öÀú¶ô¿¡ ÀÇÇØ º¸È£µÈ´Ù.
¹ø¿ª : ÀÌÈ£, ½É¸¶·Î
Á¤¸® : ÀÌÈ£
¿ªÁÖ 1) ÇϹݺÎ(bottom half)¶ó´Â ¸»Àº ÀÎÅÍ·´Æ® Çڵ鷯¸¦ »ó¹ÝºÎ(top half)¶ó°í »ý°¢ÇÏ¿© ÀÎÅÍ ·´Æ® Çڵ鷯¿¡¼ 󸮵ÇÁö ¾Ê°í ³ªÁßÀ¸·Î ¹Ì·ïÁø ÀÛ¾÷À» ´ëºñ½ÃÄÑ ºÙÀÎ À̸§ÀÌ´Ù. (flyduck)
¿ªÁÖ 2) ÀÌ´Â ÇϹݺΠ󸮿¡ °ü·ÃµÈ ÀڷᱸÁ¶°¡ 4¹ÙÀÌÆ® Å©±âÀÇ ¸¶½ºÅ©¿Í °íÁ¤µÈ Å©±âÀÇ ¹è ¿·Î µÇ¾î Àֱ⠶§¹®ÀÌ´Ù. µû¶ó¼ ÇϹݺΠ󸮸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ÇÑÁ¤µÇ¾î ÀÖÀ¸¸ç, À̰ͺ¸´Ù Á» ´õ °³¼±µÈ ±¸Á¶ÀÇ ÀÛ¾÷Å¥°¡ ³ª¿À°Ô µÈ´Ù. (flyduck)
¿ªÁÖ 3) Á¤Àû(static)À¸·Î Á¤ÀǵǾú´Ù´Â Àǹ̴Â, ÇϹݺΠÇڵ鷯¸¦ »ç¿ëÇÏ°Ú´Ù°í µ¿ÀûÀ¸·Î Àε¦ ½º¸¦ ¾ò¾î¼ »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, ¹Ì¸® °¢ À妽º¿¡´Â ¹«¾ùÀÌ ´ã±æ °ÍÀ̸ç ÀÌ À妽º ¸¦ Á¤ÀÇÇÏ´Â »ó¼ö(¾Æ·¡¿¡ ³ª¿À´Â)°¡ Á¤ÀǵǾî ÀÖ´Ù´Â °ÍÀÌ´Ù. (flyduck)
¿ªÁÖ 4) ¾Æ·¡¿¡ ³ª¿À´Â ÇϹݺΠÇڵ鷯´Â °¢°¢ TIMER_BH, CONSOLE_BH, TQUEUE_BH, NET_BH, IMMEDIATE_BH·Î Á¤ÀǵǾî ÀÖ´Ù. ÀÌµé ¿Ü¿¡µµ ´Ù¸¥ ÇϹݺΠÇڵ鷯µµ ÀÖÀ¸¸ç, include/linux/interrupt.h¿¡¼ È®ÀÎÇÒ ¼ö ÀÖ´Ù. (flyduck)
¿ªÁÖ 5) ÀÌ´Â ¿ø¹®ÀÇ ³»¿ëÀÌ Æ²¸° °ÍÀ̶ó°í »ý°¢ÇÏÁö¸¸, TQUEUE´Â °¢ ŸÀÌ¸Ó Æ½¸¶´Ù È°¼º ȵǴ ÇϹݺΠÇڵ鷯·Î, tq_timer ÀÛ¾÷Å¥¸¦ ó¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ¾ÕÀÇ TIMER ÇÏ¹Ý ºÎ Çڵ鷯 ¿ª½Ã °¢ ŸÀÌ¸Ó Æ½¸¶´Ù È°¼ºÈµÇÁö¸¸ 11.3¿¡ ³ª¿À´Â Ä¿³Î ŸÀ̸Ӹ¦ ó¸®ÇÏ´Â ¿ªÇÒÀ» ÇÑ´Ù. ÇÏÁö¸¸ µÑ ´Ù ŸÀÌ¸Ó Æ½ÀÌ ¹ß»ýÇßÀ» ¶§ È°¼ºÈµÈ´Ù´Â Á¡Àº µ¿ÀÏÇÏÁö¸¸ ¸Ã Àº ¿ªÇÒÀº ´Ù¸£´Ù. (kernel/sched.cÀÇ do_timer() ÂüÁ¶) (flyduck)
¿ªÁÖ 6) ÀÌ´Â mark_bh() ÇÔ¼ö¸¦ ÇØ´çÇÏ´Â ÇϹݺΠÇڵ鷯 »ó¼ö¿Í ÇÔ²² ºÎ¸£¸é µÈ´Ù. (flyduck)
¿ªÁÖ 7) ÀÌ·± ¿ëµµ·Î ¾Õ¿¡ ÇϹݺΠÇڵ鷯¸¦ ¼³¸íÇߴµ¥, µÑÀÇ ¿ªÇÒÀº ºñ½ÁÇÏÁö¸¸ ¸ÞÄ¿´ÏÁò °ú »ç¿ëÇÏ´Â °æ¿ì´Â ¼·Î ´Ù¸£´Ù. ÇϹݺΠÇڵ鷯´Â ÇÑÁ¤µÈ ÀÚ¿øÀÎ ¹Ý¸é¿¡, ÀÛ¾÷Å¥´Â ÀÛ¾÷ ÀÇ ¸ñ·ÏÀ» ¿¬°á ¸®½ºÆ®·Î °¡Áö°í ÀÖÀ¸¸ç, º°µµÀÇ ÀÛ¾÷Å¥¸¦ Á¤ÀÇÇÏ¿© »ç¿ëÇÒ ¼ö Àֱ⠶§ ¹®¿¡ È®ÀåÀÌ °¡´ÉÇÏ´Ù. ÀÛ¾÷Å¥´Â ŸÀ̸Ӱ°ÀÌ Å¸ÀÌ¸Ó ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» ¶§ ó¸®µÉ ÀÛ ¾÷ ¸ñ·ÏÀ» ½×¾ÆµÎ±â À§Çؼ »ç¿ëµÇ±âµµ ÇÏ°í, µð¹ÙÀ̽º µå¶óÀ̹ö¿¡¼ ÀÛ¾÷À» ¹Ì·ç±â À§ Çؼ »ç¿ëÇÑ´Ù. ¸ðµâ·Î ¸¸µé¾îÁø µð¹ÙÀ̽º µå¶óÀ̹ö´Â ÇϹݺΠÇڵ鷯¸¦ »ç¿ëÇÒ ¼ö ¾øÀ¸ ¸ç, ÀÛ¾÷Å¥ ¸ÞÄ¿´ÏÁòÀ» »ç¿ëÇØ¾ß ÇÑ´Ù. (flyduck)
¿ªÁÖ 8) ÀÛ¾÷Å¥¸¦ ó¸®ÇÏ´Â ÇÔ¼ö´Â run_task_queue()À̸ç, kernel/sched.c¿¡¼ º¸¸é schedule() ÇÔ¼ö¿¡¼ run_task_queue(&tq_scheduler)¸¦ ºÎ¸£¸ç, TQUEUE ÇϹݺΠÇڵ鷯¿¡¼ tq_timer¸¦, IMMEDIATE ÇϹݺΠÇڵ鷯¿¡¼ tq_immediate¸¦ ó¸®ÇÏ´Â °Í À» º¼ ¼ö ÀÖ´Ù. (flyduck)
¿ªÁÖ 9) ¾Æ·¡ ³ª¿À´Â ¼¼°¡Áö ÀÛ¾÷Å¥ ¿Ü¿¡ tq_disk°¡ ÀÖÁö¸¸ ÀÌ´Â ¸Þ¸ð¸® °ü¸® ¼ºê½Ã½ºÅÛ ¿¡¼ ³»ºÎÀûÀ¸·Î »ç¿ëÇÏ´Â °ÍÀ̸ç, ´Ù¸¥ ºÎºÐ¿¡¼ »ç¿ëÇÒ ¼ö ¾ø´Â °ÍÀÌ´Ù. ÀÌ ¼¼ ÀÛ¾÷Å¥ ´Â °¢°¢ tq_timer, tq_immediate, tq_schedule·Î Á¤ÀǵǾî ÀÖ´Ù. (flyduck)
¿ªÁÖ 10) ÀÌ Å¸ÀÌ¸Ó Å¥ ÇϹݺΠÇڵ鷯´Â ¾Õ¿¡¼ À̾߱âÇÑ ¹Ù¿Í °°ÀÌ TQUEUE_BHÀÌ´Ù. (flyduck)
¿ªÁÖ 11) ½Ã½ºÅÛ Å¸À̸Ӵ TIMER_BH¿¡¼ ó¸®ÇÏ´Â 11.3Àå¿¡¼ ¼³¸íÇÒ Å¸À̸Ӹ¦ ¸»ÇÑ´Ù. (flyduck)
¿ªÁÖ 12) ÀÌ jiffies ´ÜÀ§ÀÇ ½Ã°£ÀÌ Á¤È®È÷ ¾î´ÀÁ¤µµÀÇ ½Ã°£ÀÎÁö´Â ½Ã½ºÅÛ¸¶´Ù ´Ù¸£´Ù. arch/*/param.h¿¡ HZ¶ó´Â »ó¼ö°¡ Á¤ÀǵǾî Àִµ¥, Ŭ·° ƽÀº ÃÊ´ç ÀÌ HZ Ƚ¼ö¸¸Å ¹ß»ý ÇϹǷΠ1 jiffie = 1 / HZ Ãʶó°í ÇÒ ¼ö ÀÖ´Ù. ÇöÀç Ä¿³Î¿¡¼ HZ´Â ¾ËÆÄ ½Ã½ºÅÛ¿¡¼´Â 1024·Î ´Ù¸¥ ½Ã½ºÅÛ¿¡¼´Â 100À¸·Î Á¤ÀǵǾî ÀÖ´Ù. ÀÌ °ªÀ» ¹Ù²Ù¾î¼ ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Â µ¥, ÀÌ °ªÀÌ Ä¿Áö¸é ½Ã½ºÅÛÀÇ ¼Óµµ´Â ´À·ÁÁö°ÚÁö¸¸ ¹ÝÀÀ ¼Óµµ´Â ´õ ºü¸¦ °ÍÀ̸ç, °ªÀÌ ÀÛ ¾ÆÁö¸é ¼Óµµ´Â »¡¶óÁöÁö¸¸ ¹ÝÀÀ ¼Óµµ´Â ´õ ´À·ÁÁö°Ô µÈ´Ù. (flyduck)
¿ªÁÖ 13) ¿¹ÀüÀÇ Å¸À̸Ӵ run_old_timer()¿¡¼, »õ·Î¿î ŸÀ̸Ӵ run_timer_list() ¿¡¼ ó¸®Çϸç, µÑ ´Ù timer_bh()¿¡¼ ºÒ¸°´Ù. kernel/sched.c ÂüÁ¶ (flyduck)
¿ªÁÖ 14) ±¸Çö¹æ½ÄÀ¸·Î º»´Ù¸é ¿¹ÀüÀÇ Å¸À̸Ӵ Á¤ÀûÀ¸·Î Á¤ÀÇµÇ°í ºÎÆýÿ¡ Çڵ鷯°¡ µî·Ï µÇ´Â ÇϹݺΠÇڵ鷯¿Í, »õ·Î¿î ŸÀ̸Ӵ µ¿ÀûÀ¸·Î »ç¿ëÇÏ´Â ÀÛ¾÷Å¥¿Í ºñ½ÁÇÏ´Ù°í ÇÒ ¼ö ÀÖ´Ù. (flyduck)
¿ªÁÖ 15) Áï jiffies(ÇöÀç ½Ã°£À» ³ªÅ¸³»´Â Àü¿ªº¯¼ö) + ¿øÇÏ´Â °£°Ý * HZ·Î °è»êÇÑ´Ù. (flyduck)
16) REVIEW NOTE : ´ÙÀ½¹ø¿¡ ½ºÄÉÁì·¯°¡ ½ÇÇàµÉ ¶§ INTERRUPTIBLE »óÅ¿¡ Àִ ŽºÅ© °¡ ½ÇÇàµÇ´Â °ÍÀ» ¸·´Â °ÍÀº ¹«¾ùÀΰ¡? ´ë±âÅ¥ÀÇ ÇÁ·Î¼¼½º´Â ±ú¾î³¯ ¶§±îÁö Àý´ë·Î ½ÇÇà µÇÁö ¾Ê´Â´Ù.
¿ªÁÖ 17) ´ë±âÅ¥°¡ 󸮰¡ µÉ ¶§¶ó´Â °ÍÀº, ±â´Ù¸®°í ÀÖ´ø ÀÚ¿øÀ» »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾î ÀÌ ÀÚ¿øÀ» ±â´Ù¸®´Â ´ë±âÅ¥¸¦ ó¸®ÇÒ ¶§¶ó´Â °ÍÀÌ´Ù. (flyduck)
¿ªÁÖ 18) ´ÙÀ½ ¼¼¸¶Æ÷¾î¿¡¼ ÀÌ ½ºÇɶôÀ» semaphore ÀڷᱸÁ¶ÀÇ waking Ç׸ñ¿¡ ´ëÇÑ Á¢ ±ÙÀ» Á¦¾îÇÒ ¶§ »ç¿ëÇÏ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. (flyduck)
¿ªÁÖ 19) ÀÌ ¼¼¸¶Æ÷¾î´Â IPC¿¡¼ ³ª¿Â ¼¼¸¶Æ÷¾î¿Í ´Ù¸£´Ù. ÀÌ ¼¼¸¶Æ÷¾î´Â SMP¿¡¼ ÇÑ ÇÁ·Î ¼¼¼¸¸ÀÌ Ä¿³Î ¸ðµå·Î µé¾î°¥ ¼ö ÀÖµµ·Ï »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ¸®´ª½º¿¡¼ SMP´Â ÇöÀç È¿À² ÀûÀ¸·Î ¸¸µé¾îÁöÁö ¾Ê¾Ò´Ù. ¸®´ª½º Ä¿³ÎÀº, Ä¿³Î ¸ðµå¿¡¼ ÀÚ½ÅÀÌ Á¦¾î±ÇÀ» ³õÁö ¾Ê´Â ÇÑ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ÁߴܵÇÁö ¾ÊÀ¸¸ç, ÀÎÅÍ·´Æ® ó¸® ·çƾµµ Àڽź¸´Ù ³ôÀº ¿ì¼±¼øÀ§ ¸¦ °¡Áø ÀÎÅÍ·´Æ®°¡ ¾Æ´Ñ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ÁߴܵÇÁö ¾Ê´Â´Ù´Â °¡Á¤À» °¡Áö°í ÀÖ´Ù. Áï Ä¿³Î¸ðµå¿¡¼ ÀڷᱸÁ¶¸¦ ¼öÁ¤ÇÏ´Â °ÍÀÌ ´Ù¸¥ °Í¿¡ ÀÇÇØ ÁߴܵÇÁö ¾Ê´Â´Ù´Â °¡Á¤À» °¡Áö°í ÀÖ´Â °ÍÀÌ´Ù. ÀÌ´Â SMP¿¡¼ ¹®Á¦°¡ µÇ´Âµ¥, ¿Ö³ÄÇϸé ÇÑ ÇÁ·Î¼¼¼¿¡¼ Ä¿³Î ¸ðµå ·Î µé¾î°¡ ÀڷᱸÁ¶¸¦ ¼öÁ¤ÇÏ°í ÀÖÀ» ¶§, ´Ù¸¥ ÇÁ·Î¼¼¼¿¡¼ Ä¿³Î¸ðµå·Î µé¾î°¡¸é Ä¿³Î ÀÌ À¯ÁöÇÏ´Â ÀڷᱸÁ¶¸¦ µ¿½Ã¿¡ ¿©·¯ ÇÁ·Î¼¼¼°¡ ¼öÁ¤ÇÏ°Ô µÇ±â ¶§¹®ÀÌ´Ù. ÀÌÀÇ °¡Àå ¿Ã ¹Ù¸¥ ÇØ°áÃ¥Àº ´ç¿¬È÷ ÀڷᱸÁ¶¸¦ ¼öÁ¤Çϱâ Àü¿¡ ÀÓ°èÁö¿ªÀ» Ç¥½ÃÇÏ°í ´Ù¸¥ ÇÁ·Î¼¼¼°¡ Á¢±ÙÇÏÁö ¸øÇÏ°Ô ÇÏ´Â °ÍÀÌÁö¸¸, ÀÌ´Â ÇöÀç ±¸Á¶»ó ³Ê¹« ¹æ´ëÇÑ ÀÛ¾÷À» ÇÊ¿ä·Î ÇÑ´Ù. ±× ·¡¼ ÇöÀç SMP ±¸ÇöÀº ÇϳªÀÇ ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÏ¿© µ¿½Ã¿¡ ÇÑ ÇÁ·Î¼¼¼¸¸ÀÌ Ä¿³Î¸ðµå¿¡ ÀÖÀ» ¼ö ÀÖ°Ô Çϸç, ÀÌ Àå¿¡¼ ¼³¸íÇÏ´Â ¼¼¸¶Æ÷¾î´Â ÀÌ·± ¿ëµµ¸¦ À§ÇØ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ±×·¡¼ SMP¿¡¼µµ Ä¿³Î ¸ðµå¿¡¼ µ¿ÀÛÇÏ´Â ÇÁ·Î¼¼½º°¡ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ÀÇÇØ ÁߴܵÇÁö ¾Ê°ÔÇÏ´Â °ÍÀÌ´Ù. ÀÌ´Â Ä¿³Î ¸ðµå¿¡¼ Àâ¾Æ¸Ô´Â CPU ½Ã°£ÀÌ Àüü ½Ã½ºÅÛ È¿À²¼ºÀÇ º´¸ñ À¸·Î ÀÛµ¿ÇÏ°Ô µÇ¸ç, Ä¿³Î ¸ðµå¿¡ ¸¹ÀÌ ÁøÀÔÇÏ´Â I/O Áß½ÉÀÇ ½Ã½ºÅÛ¿¡¼´Â ´õ¿í º´¸ñÇö»ó ÀÌ ´õ ½ÉÇØÁö°Ô µÈ´Ù. ¾ÕÀ¸·Î È¿À²ÀûÀÎ SMP ½Ã½ºÅÛÀ» ±¸ÇöÇÏ·Á¸é ÇÊ¿äÇÑ °æ¿ì¿¡¸¸ ¶ôÀ» °É ¼ö ÀÖµµ·Ï ¼öÁ¤µÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. (flyduck)
¿ªÁÖ 20) ÀÌ Ã¥ÀÇ ¹ÙÅÁÀÎ 2.0.33 ¼Ò½º¿¡´Â lock Ç׸ñÀÌ ÀÖÁö¸¸, 2.0.2x ¹öÀüÀ̳ª 2.2.x ¹öÀü¿¡ ¼ lock Ç׸ñÀ» ãÀ» ¼ö ¾ø´Ù. (flyduck)
¿ªÁÖ 21) Áï ÇÑ ÇÁ·Î¼¼¼¸¸ÀÌ Ä¿³Î ¸ðµå¿¡ ÁøÀÔÇÒ ¶§ °¡Àå È¿À²ÀûÀ¸·Î µ¿ÀÛÇϵµ·Ï ¼³°èµÇ¾ú ´Ù´Â ¶æÀÌ´Ù. (flyduck)
¿ªÁÖ 22) Ä¿³Î ¸ðµå¿¡ ÁøÀÔÇϱâ À§ÇÏ¿© ¼¼¸¶Æ÷¾î¸¦ ¾òÀ¸·Á°í Çߴµ¥ À̸¦ ¾òÀ» ¼ö ¾ø´Ù¸é, ÀÚ½ÅÀº ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÉ ¶§±îÁö ½ºÄÉÁì·¯¸¦ È£ÃâÇϸç(ÀÌ°ÍÀº ´Ù¸¥ ÇÁ·Î¼¼ ½º°¡ ÀڽŠ´ë½Å¿¡ ½ÇÇàµÉ ¼ö ÀÖ°Ô ¸¸µç´Ù), ¼¼¸¶Æ÷¾î¸¦ ¾òÀ» ¼ö ÀÖÀ» ¶§±îÁö ±â´Ù¸°´Ù´Â °ÍÀÌ´Ù. (flyduck)