11Àå. Ä¿³Î ¸ÞÄ¿´ÏÁò (Kernel Mechanism)

ÀÌ Àå¿¡¼­´Â Ä¿³ÎÀÇ ¿©·¯ ºÎºÐµéÀÌ ÇÔ²² È¿°úÀûÀ¸·Î µ¿ÀÛÇÒ ¼ö ÀÖµµ·Ï ¸®´ª½º Ä¿³ÎÀÌ Á¦°ø ÇÏ´Â ¸î°¡Áö ÀϹÝÀûÀÎ ÀÛ¾÷°ú ¸ÞÄ¿´ÏÁò¿¡ ´ëÇؼ­ ¼³¸íÇÑ´Ù.


±×¸² 11.1 : ÇϹݺΠó¸® ÀڷᱸÁ¶

11.1 ÇϹݺΠó¸®(Bottom Half Handling)

Ä¿³Î¿¡¼­´Â Á¾Á¾ ²À ±× ½ÃÁ¡¿¡¼­ ÀÏÀ» ó¸®ÇÏ±æ ¹Ù¶óÁö ¾Ê´Â °æ¿ì°¡ ÀÖ´Ù. ÀÌÀÇ ´ëÇ¥ÀûÀÎ ¿¹·Î ÀÎÅÍ·´Æ®¸¦ ó¸®ÇÏ´Â µµÁßÀÌ´Ù. ÀÎÅÍ·´Æ®°¡ ¹ß»ýÇßÀ» ¶§ ÇÁ·Î¼¼¼­´Â ÀÚ½ÅÀÌ ÇÏ´ø ÀÏÀ» ÁßÁöÇÏ°í ¿î¿µÃ¼Á¦´Â ÀÎÅÍ·´Æ®¸¦ ÇØ´çÇÏ´Â µð¹ÙÀ̽º µå¶óÀ̹ö¿¡°Ô Àü´ÞÇÑ´Ù. ÀÎÅÍ·´Æ®¸¦ ó ¸®ÇÏ´Â µ¿¾È¿¡´Â ½Ã½ºÅÛÀÇ ´Ù¸¥ ºÎºÐÀ» ½ÇÇàÇÒ ¼ö ¾øÀ¸¹Ç·Î, µð¹ÙÀ̽º µå¶óÀ̹ö´Â ÀÎÅÍ·´Æ® 󸮿¡ ³Ê¹« ¸¹Àº ½Ã°£À» º¸³»¸é ¾ÈµÈ´Ù. ¿©±â¿¡´Â ´çÀåÀÌ ¾Æ´Ï¶ó ³ªÁß¿¡ ó¸®Çصµ µÇ´Â ÀÏ µéÀÌ Á¾Á¾ ÀÖ´Ù. ¸®´ª½ºÀÇ ÇϹݺΠÇڵ鷯(bottom half handler)1´Â µð¹ÙÀ̽º µå¶óÀ̹ö³ª ¸®´ª½º Ä¿³ÎÀÇ ´Ù¸¥ ºÎºÐµéÀÌ, ÇÒ ÀÏÀ» ³ªÁß¿¡ ½ÇÇàµÇ´Â Å¥¿¡ ³ÖÀ» ¼ö ÀÖµµ·Ï Çϱâ À§ÇØ °³¹ßµÇ¾ú ´Ù. ±×¸² 11.1Àº ÇϹݺΠó¸®¿Í °ü·ÃµÈ Ä¿³ÎÀÇ ÀڷᱸÁ¶¸¦ º¸¿©ÁØ´Ù. ¸ðµÎ 32°³±îÁöÀÇ ¼­·Î ´Ù¸¥ ÇϹݺΠÇڵ鷯°¡ ÀÖÀ» ¼ö ÀÖ´Ù2. bh_base´Â Ä¿³ÎÀÇ ÇϹݺΠÇڵ鷯 ·çƾÀ» °¡¸®Å°°í ÀÖ´Â Æ÷ÀÎÅ͵éÀÇ º¤ÅÍÀÌ´Ù. bh_mask¿Í bh_active´Â ¾î¶² Çڵ鷯°¡ ¼³Ä¡µÇ¾î ÀÖ°í ¾×Ƽ ºê ÇÑ Áö ³ªÅ¸³»´Â ºñÆ®µéÀÇ ÁýÇÕÀÌ´Ù. bh_maskÀÇ ºñÆ® NÀÌ ¼³Á¤µÇ¾î ÀÖ´Ù¸é bh_baseÀÇ N¹ø°¿¡ ÇϹݺΠ·çƾÀÌ ´ã°Ü ÀÖ´Â °ÍÀÌ´Ù. bh_activeÀÇ N¹ø° ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÀ¸¸é, ½ºÄÉÁì·¯°¡ °¡´ÉÇÏ´Ù°í ÆÇ´ÜÇÒ ¶§ N¹ø° ÇϹݺΠÇڵ鷯 ·çƾÀ» µÇµµ·Ï »¡¸® ºÒ·¯ÁÖ¾î¾ß ÇÑ ´Ù´Â °ÍÀÌ´Ù. À̵é À妽ºµéÀº Á¤ÀûÀ¸·Î Á¤ÀÇµÈ °ÍÀÌ´Ù3. ŸÀÌ¸Ó ÇϹݺΠÇڵ鷯´Â °¡Àå ³ôÀº ¿ì¼±¼øÀ§¸¦ °¡Áö¸ç(À妽º 0), ÄÜ¼Ö ÇϹݺΠÇڵ鷯´Â ´ÙÀ½ ¿ì¼±¼øÀ§(À妽º 1)¸¦ °¡Áø´Ù. ÀÏ ¹ÝÀûÀ¸·Î ÇϹݺΠÇڵ鷯 ·çƾµéÀº ÀڽŰú ¿¬°áµÈ ÀÛ¾÷µéÀÇ ¸ñ·ÏÀ» °¡Áö°í ÀÖ´Ù. ¿¹¸¦ µé¾î, Áï½Ã½ÇÇà(immediate) ÇϹݺΠÇڵ鷯´Â ¹Ù·Î ¼öÇàÇØ¾ß ÇÏ´Â ÀÛ¾÷µéÀÇ ¸ñ·ÏÀÎ Áï½Ã½ÇÇà ÀÛ¾÷ Å¥(tq_immediate)¸¦ °¡Áö°í µ¿ÀÛÇÑ´Ù.

Ä¿³ÎÀÇ ÇϹݺΠÇڵ鷯 Áß¿¡ ¾î¶² °ÍµéÀº ÀåÄ¡¿¡ °íÁ¤µÇ¾î ÀÖÁö¸¸ ´Ù¸¥ °ÍµéÀº º¸´Ù ÀϹÝÀû À¸·Î ¾µ ¼ö ÀÖ´Ù4 :

µð¹ÙÀ̽º µå¶óÀ̹ö³ª Ä¿³ÎÀÇ ¾î¶² ºÎºÐÀÌ ³ªÁß¿¡ ¼öÇàµÉ ÀÛ¾÷À» ½ºÄÉÁìÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§, À̵éÀº ÀÛ¾÷À» Àû´çÇÑ ½Ã½ºÅÛ Å¥¿¡ - ¿¹¸¦ µé¾î ŸÀÌ¸Ó Å¥°°Àº - ³Ö°í, Ä¿³Î¿¡ ÇϹݺΠÇÚµé ·¯°¡ ¼öÇàµÉ ÇÊ¿ä°¡ ÀÖ´Ù°í ½ÅÈ£¸¦ º¸³½´Ù. ÀÌ´Â bh_activeÀÇ ÇØ´çÇÏ´Â ºñÆ®¸¦ ¼³Á¤ÇÏ°Ô µÈ´Ù6. ¸¸¾à µå¶óÀ̹ö°¡ ¾î¶² ÀÏÀ» Áï½Ã½ÇÇà Å¥¿¡ ³Ö°í ÀÌ Áï½Ã½ÇÇà ÇϹݺΠÇڵ鷯°¡ ½ÇÇà µÇ¾î À̸¦ ó¸®ÇÏ±æ ¹Ù¶õ´Ù¸é 8¹ø ºñÆ®¸¦ ¼³Á¤ÇÒ °ÍÀÌ´Ù. °¢ ½Ã½ºÅÛ ÄÝÀÌ ³¡³ª¼­ Á¦¾î±ÇÀÌ À̸¦ ºÎ¸¥ ÇÁ·Î¼¼½º·Î µ¹¾Æ°¡±â ¹Ù·ÎÀü¿¡ bh_active ºñÆ®¸¶½ºÅ©¸¦ °Ë»çÇϸç, ¸¸¾à ¾î¶² ºñÆ®°¡ ¼³Á¤µÇ¾î ÀÖÀ¸¸é, ¾×Ƽºê·Î Ç¥½ÃµÈ ÇϹݺΠÇڵ鷯 ·çƾµéÀÌ ºÒ¸°´Ù. ºñÆ® 0À» ¸ÕÀú °Ë»çÇÏ°í, 1¹øÀ» ´ÙÀ½¿¡, ÀÌ·± ½ÄÀ¸·Î 31¹ø ºñÆ®±îÁö °Ë»çÇÑ´Ù. °¢ ÇϹݺΠÇڵ鷯 ·çƾÀ» ºÎ ¸£°í ³­ ÈÄ¿¡ bh_activeÀÇ ÇØ´ç ºñÆ®´Â 0À¸·Î ¼³Á¤µÈ´Ù. bh_active´Â ÀϽÃÀûÀÎ °ÍÀÌ´Ù. ÀÌ´Â ´Ü½Ã ½ºÄÉÁì·¯ È£Ãâ »çÀÌ¿¡¸¸ Àǹ̰¡ ÀÖÀ¸¸ç, ÇϹݺΠÇڵ鷯¿¡¼­ ´õÀÌ»ó ÇÒ ÀÏÀÌ ¾øÀ» ¶§ À̵éÀ» ºÎ¸£Áö ¾Ê°Ô ÇÏ´Â ¹æ¹ýÀÌ´Ù.


±×¸² 11.2 : ÀÛ¾÷Å¥

11.2 ÀÛ¾÷Å¥(Task Queue)

ÀÛ¾÷Å¥´Â Ä¿³ÎÀÌ ÀÛ¾÷À» ³ªÁßÀ¸·Î ¹Ì·ç´Âµ¥ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ´Ù. ¸®´ª½º´Â ÀÛ¾÷À» Å¥¿¡ ½×¾Æ µÎ°í À̸¦ ³ªÁß¿¡ ó¸®ÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â ÀϹÝÀûÀÎ ¸ÞÄ¿´ÏÁòÀ» °¡Áö°í ÀÖ´Ù7. ÀÛ¾÷Å¥´Â Á¾ Á¾ ÇϹݺΠÇڵ鷯¿Í ¿¬°áµÇ¾î ¾²À̱⵵ ÇÑ´Ù. ŸÀÌ¸Ó ÀÛ¾÷Å¥´Â ŸÀÌ¸Ó ÇϹݺΠÇڵ鷯°¡ ½Ç ÇàµÉ ¶§ 󸮵ȴÙ8. ÀÛ¾÷Å¥´Â ±×¸² 11.2¿¡¼­ º¸´Â °Í°ú °°ÀÌ, ÇÔ¼öÀÇ ÁÖ¼Ò¿Í ´Ù¸¥ µ¥ÀÌÅ͸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͸¦ °¡Áø tq_struct ÀڷᱸÁ¶ÀÇ ´ÜÀÏ ¿¬°á ¸®½ºÆ®·Î ÀÌ·ç¾îÁø ¾ÆÁÖ °£´ÜÇÑ ÀڷᱸÁ¶ÀÌ´Ù. ÀÛ¾÷Å¥¿¡ ÀÖ´Â ÇÑ ¿ø¼Ò°¡ 󸮰¡ µÉ ¶§ µ¥ÀÌÅÍ Æ÷ÀÎÅÍ¿Í ÇÔ²² ¿©±â¿¡ ÁöÁ¤µÈ ÇÔ¼ö°¡ ºÒ¸°´Ù.

Ä¿³Î¿¡ ÀÖ´Â ¾î¶² °ÍÀ̵ç (¿¹¸¦ µé¾î µð¹ÙÀ̽º µå¶óÀ̹ö°°Àº) ÀÛ¾÷Å¥¸¦ ¸¸µé°í »ç¿ëÇÒ ¼ö ÀÖÁö¸¸, ½ÇÁ¦·Î Ä¿³ÎÀÌ ¸¸µé°í °ü¸®ÇÏ´Â ÀÛ¾÷Å¥·Î´Â ´ÙÀ½ ¼¼°¡Áö°¡ ÀÖ´Ù9.

ÀÛ¾÷Å¥°¡ 󸮵Ǹé Å¥¿¡ Àִ ù¹ø° ¿ø¼Ò¿¡ ´ëÇÑ Æ÷ÀÎÅʹ ť¿¡¼­ Á¦°ÅµÇ¾î null Æ÷ÀÎÅÍ·Î ¹Ù²ï´Ù. »ç½Ç, ÀÌ Á¦°ÅÇÏ´Â °úÁ¤Àº ÇϳªÀÇ ÂÉ°³Áú ¼ö ¾ø´Â ¿¬»êÀ¸·Î 󸮵Ǹç, Áß´ÜµÉ ¼ö ¾ø ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô Å¥¿¡ ÀÖ´Â °¢°¢ÀÇ ¿ø¼Òµé¿¡ µî·ÏµÈ ó¸® ·çƾµéÀÌ Â÷·Ê·Î È£ÃâÀÌ µÈ´Ù. Å¥¿¡ ÀÖ´Â °¢ ¿ø¼Ò´Â Á¾Á¾ Á¤ÀûÀ¸·Î µ¥ÀÌÅ͸¦ ÇÒ´ç¹Þ±âµµ ÇÑ´Ù. ±×·±µ¥ ¿©±â¿¡´Â ÇÒ´çµÈ ¸Þ ¸ð¸®¸¦ ¾Ë¾Æ¼­ ÇØÁ¦ÇÏ´Â ¸ÞÄ¿´ÏÁòÀÌ º»·¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê´Ù. ÀÛ¾÷Å¥¸¦ ó¸®ÇÏ´Â ·çƾÀº ´ÜÁö ¸®½ºÆ®ÀÇ ´ÙÀ½ ¿ø¼Ò·Î À̵¿ÇÒ »ÓÀÌ´Ù. ÇÒ´ç¹ÞÀº Ä¿³Î ¸Þ¸ð¸®¸¦ Á¦´ë·Î ÇØÁ¦ÇÏ´Â °ÍÀº Å¥¿¡ ÀÖ´ø ÀÛ¾÷ÀÌ ÇØ¾ß ÇÒ ÀÏÀÌ´Ù.


±×¸² 11.3 : ½Ã½ºÅÛ Å¸À̸Ó

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 : ´ë±âÅ¥

11.4 ´ë±âÅ¥(Wait Queue)

ÇÁ·Î¼¼½º°¡ ½Ã½ºÅÛ ÀÚ¿øÀ» ±â´Ù·Á¾ß ÇÏ´Â °æ¿ì°¡ ¸¹ÀÌ ÀÖ´Ù. ¿¹¸¦ µé¾î, ÇÁ·Î¼¼½º°¡ ÆÄÀÏ ½Ã ½ºÅÛ¿¡ ÀÖ´Â ÇÑ µð·ºÅ丮¸¦ ³ªÅ¸³»´Â VFS inode¸¦ ÇÊ¿ä·Î Çϴµ¥ ÀÌ inode°¡ ¹öÆÛ Ä³½¬¿¡ ÀÖÁö ¾ÊÀº °æ¿ì, ÇÁ·Î¼¼½º´Â ÆÄÀÏ ½Ã½ºÅÛÀ» °¡Áö°í ÀÖ´Â ¹°¸®ÀûÀÎ ÀåÄ¡¿¡¼­ ±× inode¸¦ °¡ Á®¿À´Â °ÍÀ» ±â´Ù·Á¾ß ÇÑ´Ù.

¸®´ª½º Ä¿³ÎÀº ´ë±âÅ¥(±×¸² 11.4À» º¸¶ó)¶ó´Â, ÇÁ·Î¼¼½ºÀÇ task_struct¿¡ ´ëÇÑ Æ÷ÀÎÅÍ¿Í ´ë±âÅ¥¿¡ ÀÖ´Â ´ÙÀ½ ¿ø¼Ò¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °¡Áö°í ÀÖ´Â, ¾ÆÁÖ ´Ü¼øÇÑ ÀڷᱸÁ¶¸¦ »ç¿ëÇÑ´Ù.

ÇÁ·Î¼¼½º°¡ ´ë±âÅ¥ÀÇ ³¡¿¡ Ãß°¡°¡ µÇ¸é, À̵éÀº ÀÎÅÍ·´Æ® °¡´É(interruptible), ¶Ç´Â ÀÎÅÍ·´Æ® ºÒ°¡´É(uninterruptible) »óÅ°¡ µÈ´Ù. ÀÎÅÍ·´Æ® °¡´ÉÇÑ ÇÁ·Î¼¼½º´Â ´ë±âÅ¥¿¡ ÀÖ´Â µ¿¾È ¹ß»ýÇÏ ´Â ŸÀÌ¸Ó ¸¸·á³ª ½Ã±×³Î°°Àº À̺¥Æ®µé¿¡ ÀÇÇؼ­ ÀÎÅÍ·´Æ®°¡ µÉ ¼ö ÀÖ´Ù. ´ë±âÁßÀÎ ÇÁ·Î¼¼ ½ºÀÇ »óÅ´ À̸¦ ¹Ý¿µÇÏ¿© INTERRUPTIBLE ¶Ç´Â UNINTERRUPTIBLE µÑ ÁßÀÇ Çϳª°¡ µÉ °ÍÀÌ´Ù. ÀÌ ÇÁ·Î¼¼½º´Â Áö±Ý ´çÀå °è¼Ó ½ÇÇàÇÒ ¼ö ¾ø±â ¶§¹®¿¡ ½ºÄÉÁì·¯°¡ ½ÇÇàµÇ¾î, »õ·Î ½ÇÇàÇÒ ÇÁ·Î¼¼½º¸¦ ¼±ÅÃÇÏ°Ô µÇ¸é ´ë±â ÇÁ·Î¼¼½º´Â Áß´ÜÀÌ µÈ´Ù16.

´ë±âÅ¥°¡ 󸮰¡ µÉ ¶§17 ´ë±âÅ¥¿¡ ÀÖ´Â ¸ðµç ÇÁ·Î¼¼½ºµéÀÇ »óÅ´ RUNNINGÀ¸·Î ¹Ù²î°Ô µÈ´Ù. ¸¸¾à ±× ÇÁ·Î¼¼½º°¡ ½ÇÇàÅ¥¿¡¼­ Á¦°ÅµÈ °ÍÀ̾ú´Ù¸é ´Ù½Ã ½ÇÇàÅ¥¿¡ ³Ö°Ô µÈ´Ù. ´ÙÀ½¿¡ ½ºÄÉÁì·¯°¡ ½ÇÇàµÉ ¶§ ´ë±âÅ¥¿¡ ÀÖ´ø ÇÁ·Î¼¼½ºµéÀº, ´õ ÀÌ»ó ±â´Ù¸®°í ÀÖ´Â °ÍÀÌ ¾Æ´Ï±â ¶§ ¹®¿¡ ½ÇÇàµÉ ¼ö ÀÖ´Â È帰¡ µÈ´Ù. ´ë±âÅ¥¿¡ ÀÖ´Â ÇÁ·Î¼¼½º°¡ ½ºÄÉÁìÀÌ µÇ¸é Á¦ÀÏ ¸ÕÀú ÇÏ ´Â ÀÏÀº ÀÚ½ÅÀ» ´ë±âÅ¥¿¡¼­ Á¦°ÅÇÏ´Â °ÍÀÌ´Ù. ´ë±âÅ¥´Â ½Ã½ºÅÛ ÀÚ¿ø¿¡ ´ëÇÑ Á¢±ÙÀ» µ¿±âÈ­ Çϴµ¥ »ç¿ëÇÒ ¼ö ÀÖ°í, ¸®´ª½º°¡ ¼¼¸¶Æ÷¾î¸¦ ±¸ÇöÇϴµ¥¿¡µµ »ç¿ëÇÑ´Ù. (¾Æ·¡¸¦ º¸¶ó)


11.5 ¹öÀú¶ô(Buzz Lock)

ÀÌ°ÍÀº ½ºÇɶô(spin lock)À̶ó°í ´õ Àß ¾Ë·ÁÁ® Àִµ¥, ÀڷᱸÁ¶³ª ÄÚµåÀÇ ÇÑ ºÎºÐÀ» º¸È£ÇÏ ´Â °¡Àå ±âº»ÀûÀÎ ¹æ¹ýÀÌ´Ù. ÀÌ°ÍÀº ÄÚµåÀÇ ÀÓ°èÁö¿ª ¾È¿¡¼­ µ¿½Ã¿¡ ÇϳªÀÇ ÇÁ·Î¼¼½º¸¸ ÀÖ µµ·Ï Çã¿ëÇÑ´Ù. ¸®´ª½º¿¡¼­´Â ÇϳªÀÇ Á¤¼ö Ç׸ñÀ» ¶ôÀ¸·Î »ç¿ëÇÏ¿© ÀڷᱸÁ¶¿¡ ÀÖ´Â Ç׸ñ¿¡ ´ëÇÑ Á¢±ÙÀ» Á¦ÇÑÇÏ´Â ¸ñÀûÀ¸·Î »ç¿ëÇÑ´Ù18. ÀÓ°èÁö¿ªÀ¸·Î µé¾î°¡°íÀÚ ÇÏ´Â °¢ ÇÁ·Î¼¼½ºµéÀº ¶ôÀÇ ÃʱⰪÀ» 0¿¡¼­ 1·Î ¹Ù²Ù·Á°í ÇÑ´Ù. ¸¸¾à ÇöÀç °ªÀÌ 1À̶ó¸é ÇÁ·Î¼¼½º´Â, ÄÚµåÀÇ ·ç ÇÁ ¾È¿¡¼­ °è¼Ó ºù±Ûºù±Û µ¹¸é¼­ ´Ù½Ã ½ÃµµÇÏ°Ô µÈ´Ù. ¶ôÀ» °¡Áö°í ÀÖ´Â ¸Þ¸ð¸® À§Ä¡¿¡ ´ë ÇÑ Á¢±ÙÀº ¹Ýµå½Ã Çѹø¿¡ ÀÌ·ç¾îÁ®¾ß ÇÑ´Ù(atmoic). °ªÀ» ÀÐ°í ±× °ªÀÌ 0ÀÎÁö È®ÀÎÇÏ°í, 0ÀÌ ¸é °ªÀ» 1·Î ¹Ù²Ù´Â °ÍÀº ´Ù¸¥ ¾î¶² ÇÁ·Î¼¼½º¿¡ ÀÇÇؼ­ ÁߴܵǾ ¾ÈµÈ´Ù. ´ëºÎºÐÀÇ CPU ±¸Á¶µéÀº À̸¦ Ưº°ÇÑ ¸í·É¾î·Î Áö¿øÇÏÁö¸¸, ij½ÃµÇÁö ¾ÊÀº ¸ÞÀÎ ¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÏ¿© ¹öÀú¶ô À» ±¸ÇöÇÒ ¼öµµ ÀÖ´Ù.

¶ôÀ» ¼ÒÀ¯ÇÏ°í ÀÖ´ø ÇÁ·Î¼¼½º°¡ ÄÚµåÀÇ ÀÓ°èÁö¿ªÀ» ¹þ¾î³¯ ¶§ ¹öÀú¶ôÀÇ °ªÀ» °¨¼Ò½ÃÄÑ 0ÀÌ µÇ°Ô ÇÑ´Ù. ¶ôÀ» °Ë»çÇÏ¸ç °è¼Ó µ¹°í ÀÖ´ø ¾î¶² ÇÁ·Î¼¼½ºµçÁö ÀÌ °ªÀÌ 0ÀÎ °ÍÀ» ¾Ë ¼ö ÀÖ°Ú Áö¸¸, óÀ½ ÀÐÀº ÇÁ·Î¼¼½º°¡ À̸¦ 1·Î Áõ°¡ÇÏ°í ÀÓ°èÁö¿ªÀ¸·Î µé¾î°¡°Ô µÉ °ÍÀÌ´Ù.


11.6 ¼¼¸¶Æ÷¾î(Semaphore)19

¼¼¸¶Æ÷¾î´Â Äڵ峪 ÀڷᱸÁ¶ÀÇ ÀӰ豸¿ªÀ» º¸È£Çϴµ¥ »ç¿ëµÈ´Ù. µð·ºÅ丮¸¦ ³ªÅ¸³»´Â VFS inode °°Àº ÀÓ°è ÀÚ·á¿¡ Á¢±ÙÇÏ´Â °ÍÀº, ÇÁ·Î¼¼½ºÀÇ ´Ù¸¥ ÇÑ Æí¿¡¼­ µ¹¾Æ°¡´Â Ä¿³Î Äڵ忡 ÀÇÇؼ­ ÀÌ·ç¾îÁø´Ù. ÇÑ ÇÁ·Î¼¼½º°¡ »ç¿ëÇÏ°í ÀÖ´Â ÀÌ·± Áß¿äÇÑ ÀڷᱸÁ¶¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¿¡ ¼­ °íÄ¥ ¼ö ÀÖ°Ô ÇÏ´Â °ÍÀº ¸Å¿ì À§ÇèÇÏ´Ù. ÀÌ·± ¸ñÀûÀ» ´Þ¼ºÇÒ ¼ö ÀÖ´Â ÇÑ ¹æ¹ýÀº ÀÓ°èÀÚ ·á¿¡ Á¢±ÙÇÏ´Â °÷ ÁÖÀ§¿¡ ¹öÀú¶ôÀ» »ç¿ëÇÏ´Â °ÍÀÌÁö¸¸, ÀÌ´Â ±×´ÙÁö ½Ã½ºÅÛ È¿À²¼ºÀÌ ÁÁÁö ¾ÊÀº ´Ü¼øÇÑ Á¢±Ù ¹æ¹ýÀÌ´Ù. ´ë½Å ¸®´ª½º´Â µ¿½Ã¿¡ ÇÑ ÇÁ·Î¼¼½º¸¸ÀÌ Äڵ峪 µ¥ÀÌÅÍÀÇ ÀÓ°è ±¸¿ª¿¡ Á¢±ÙÇÒ ¼ö ÀÖµµ·Ï ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇÑ´Ù. ÀÌ ±¸¿ª¿¡ Á¢±ÙÇÏ·Á´Â ´Ù¸¥ ¸ðµç ÇÁ·Î¼¼½º ´Â ÀÌ ¼¼¸¶Æ÷¾î°¡ ÇØÁ¦µÉ ¶§±îÁö ±â´Ù¸®°Ô µÉ °ÍÀÌ´Ù. ´ë±âÇÏ°Ô µÇ´Â ÇÁ·Î¼¼½º´Â ÁߴܵÇÁö ¸¸, ½Ã½ºÅÛÀÇ ´Ù¸¥ ÇÁ·Î¼¼µåµéÀº Á¤»óÀûÀ¸·Î °è¼Ó µ¿ÀÛÇÒ ¼ö ÀÖ´Ù.

¸®´ª½º 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)