Á¦¸ñ : - EMS function ¾È³çÇϼ¼¿ä Ç㸣¹ÌÀÔ´Ï´Ù. ¿À´ÃÀº Àú¹ø °­Á¿¡¼­ ¸»Çß´ø °Í°ú °°ÀÌ EMS function ¿¡ ´ëÇؼ­ ¾Ë¾Æº¸µµ·Ï ÇÏ°ÚÀ¾´Ï´Ù. Âü°í ¼­ÀûÀº LIM 4.0 Ç¥ÁØÀ» ´Ù·é ±âÇÑÀç¿¡¼­ ³ª¿Â 'È®Àå¸Þ¸ð¸® »ç¿ë ¹ý' À̶ó´Â Ã¥ÀÔ´Ï´Ù. ±×·³ Expanded Memory ¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°Ú À¾´Ï´Ù. XMS,Extended Memory,Expanded Memory µîÀÇ ¸»À» ¿ì¸®´Â ¸¹ÀÌ µè½À´Ï´Ù. ÀÌÁß Lotus,Intel,MicroSoft ÀÇ ¼¼ ȸ»ç°¡ ¸Þ¸ð ¸® °ü¸®ÀÇ Ç¥ÁØÀ» Àâ°íÀÚ È®Àå¸Þ¸ð¸® ¸í¼¼¼­¸¦ ¹ßÇ¥ÇÏ¿´´Âµ¥ ÀÌ °ÍÀÌ ¹Ù·Î Expanded Memory ¿¡ °üÇÑ LIM ÀÔ´Ï´Ù. LIM Àº ÀÎÅÍÆä À̽º¸¦ Á¤ÀÇÇÑ °ÍÀ¸·Î½á Expanded Memory ¸¦ ´Ù·ç´Âµ¥ À־ EMM (È®Àå¸Þ¸ð¸® °ü¸®ÀÚ) °ú ÀÀ¿ë ÇÁ·Î±×·¥ »çÀÌÀÇ °ü°è¸¦ À̾î ÁÖ°í ÀÖÀ¾´Ï´Ù. EMM ÀÇ ´ëÇ¥ÀûÀÎ °ÍÀ¸·Î´Â EMM386.exe , EMS.SYS µîÀÌ ÀÖÀ¾´Ï´Ù. À̵éÀº Extended Memory ¸¦ Expanded Memory ·Î ¿¡¹Ä·¹ÀÌÆ® ÇØÁÝ´Ï´Ù. °£È¤ Extended Memory °¡ ¾Æ´Ñ ½½·Ô¿¡ ²Å °Ô µÇ¾î ÀÖ´Â 'Expanded Memory' ¸¦ º¼¼ö Àִµ¥ ÀÌ°ÍÀº º¸µå»ó ¿¡¼­ È®ÀåÀÌ ´õÀÌ»ó ºÒ°¡´ÉÇÒ¶§ ¸Þ¸ð¸®¸¦ È®ÀåÇÏ´Â ¹æ¹ýÀÌ µÉ ¼ö ÀÖÀ¾´Ï´Ù. º¸ÅëÀº Extended Memory ¸¦ È®ÀåÇÏ°Ô µÇ¹Ç·Î À̸¦ Á÷ Á¢ Áö¿øÇÒ¼öµµ ÀÖÁö¸¸ Æí¸®ÇÑ ±Ô°ÝÀÎ LIM 4.0 À» µû¸¥ Expanded Memory ¸¦ Áö¿øÇÏ°Ô µË´Ï´Ù. µû¶ó¼­ PC ¿¡¼­ Expanded Memory ¸¦ ¾²±â À§Çؼ­´Â Config.sys ¸¦ Á¶±Ý °íÃÄÁÖ¾î¾ß ÇÕ´Ï´Ù. ¿ì¼± EMM ÀÚü°¡ ¿¬¼ÓÈ®Àå¸Þ¸ð¸®¸¦ ÀÌ¿ëÇÏ´Â °ÍÀ̹ǷΠhimem.sys ¸¦ ¶ç¿ö ¾ß ÇÕ´Ï´Ù.±×´ÙÀ½Àº emm386.exe µî EMM À» ¶ç¿ó´Ï´Ù. device=himem.sys device=emm386.exe 2048 µÚÀÇ 2048 Àº BYTE ¼öÀÔ´Ï´Ù. ÀÚ½ÅÀÇ ÄÄÇ»ÅÍ¿¡ ÀûÀýÇÑ ¾çÀ» ¼±Åà ÇØ¾ß °ÚÁÒ.±×·³ ÀÌÁ¦ Expanded Memory ¸¦ »ç¿ëÇÒ ¼ö ÀÖ°Ô µÇ¾úÀ¾ ´Ï´Ù. µÎ·ç¹°ÀÇ ÇÑÀç·æ´Ô°ú Çã¼®¿ì´Ô²²¼­ ¸¸µé¾îÁֽŠdlmi.exe ³ª chkmem,mem µîÀÇ ÇÁ·Î±×·¥À¸·Î º¸¸é »ç¿ëÇÒ¼ö ÀÖ´Â Expanded Memory ÀÇ ¾çÀ» ¾Ë ¼ö ÀÖÀ¾´Ï´Ù. ±×·¯¸é Áö±ÝºÎÅÍ´Â È®Àå¸Þ¸ð¸® ÀÇ µ¿ÀÛ¿ø¸®¿¡ ´ëÇؼ­ ¾Ë¾Æº¸°ÚÀ¾´Ï´Ù. È®Àå¸Þ¸ð¸®¸¦ ¾ï¼¼½ºÇÏ´Â ´ÜÀ§´Â ÆäÀÌÁöÀÔ´Ï´Ù. 1 ÆäÀÌ Áö´Â 16 KB ·Î ÀÌ·ç¾îÁ® ÀÖÀ¾´Ï´Ù. ¹°·Ð 16 KB ¸¦ ±Øº¹ÇÒ ¼ö ÀÖ ´Â ¹æ¹ýÀÌ LIM 4.0 ¿¡ Á¤ÀǵǾî ÀÖ±â´Â ÇÕ´Ï´Ù¸¸ V.System ¿¡´Â Ç¥ÁØÀûÀÎ ¹æ¹ýÀ¸·ÎÀÇ 16 KB ¾¿ÀÇ ÆäÀÌÁö°ü¸® ¹æ¹ýÀ» äÅÃÇÏ°í ÀÖ À¾´Ï´Ù. 16 KB ¾¿ ÆäÀÌ¡ÇÑ´Ù´Â °ÍÀº ÀÛÀº Å©±âÀÇ ¹öÆÛ¸¦ ¸¹ÀÌ »ç¿ëÇÒ¶§´Â ³¶ºñ°¡ ½ÉÇÑ ¹æ¹ýÀÏ ¼öµµ ÀÖÀ¾´Ï´Ù. ÀÌ·± °æ¿ì¿¡´Â ¹öÆÛ¸¦ 16 KB ´ÜÀ§¾¿ È®º¸Ç쵂 ÀÌ ¹öÆÛÀÇ Ã³À½ºÎÅÍ Â÷·Ê·Î ÀÛÀº ¹öÆÛµéÀÇ ³í¸®ÀûÀÎ À§Ä¡¸¦ ¸í½ÃÇÏ¿© (À妽º) 16 KB ¸¦ ³Ñ¾î°¥¶§ ¸¶´Ù »õ·Î¿î ¹öÆÛ¸¦ È®º¸ÇÏ´Â ¹æ¹ýÀ» ¾²¸é µË´Ï´Ù. ½ÇÁ¦·Î hr.exe (¹°º¸¶ó ÇÑ±Û Reader) ¿¡¼­´Â ÀÌ·¯ÇÑ ¹æ¹ýÀ¸·Î ¹öÆÛ¸¦ ÃÖ ´ë·Î ¾²°í ÀÖÀ¾´Ï´Ù. ¾î¶µç Expanded Memory ¿¡¼­ ¸Þ¸ð¸®ÀÇ »ç ¿ëÀº 16 KB ´ÜÀ§ÀÇ ÆäÀÌÁö·Î ÀÌ·ç¾î Áø´Ù´Â °ÍÀ» ÀÏ´Ü ¾Ë¾ÆµÎ¼¼ ¿ä. Expanded Memory ´Â 32 MB ±îÁöÀÇ »ç¿ëÀÌ °¡´ÉÇÕ´Ï´Ù. ÀÌ ³Ð Àº ÁÖ¼Ò°ø°£À» ¾ï¼¼½º Çϱâ À§Çؼ­ ÆäÀÌÁö ÇÁ·¹ÀÓ,¹°¸®ÀûÆäÀÌÁö, ³í¸®Àû ÆäÀÌÁö¿Í °°Àº °³³äÀÌ µµÀԵ˴ϴÙ. ÀÌ·¯ÇÑ °³³äÀ» ¿Ã¹Ù·Î ÀÌÇØÇؾ߸¸ Expanded Memory ¸¦ ¿Ã¹Ù·Î »ç¿ëÇÒ ¼ö ÀÖÀ¾´Ï´Ù. Expanded Memory ¸¦ »ç¿ëÇÏ°íÀÚ ÇÏ´Â »ç¶÷Àº Expanded Memory ¸¦ Conventional Memory »ç¿ëÇϵíÀÌ Segment:Offset À¸·Î ÂüÁ¶ÇÏ´Â ´ë½Å¿¡ Mapping À̶ó´Â ¼ö´ÜÀ» ÅëÇؼ­ ºñ½ÁÇÏ°Ô ÂüÁ¶ÇÒ ¼ö ÀÖÀ¾ ´Ï´Ù. Áï ½ÇÁ¦ Expanded Memory ÁßÀÇ ÀϺθ¦ »ç¿ëÇÑ´Ù°í ÇÒ¶§ ÀÌ ºÎºÐÀ» Á÷Á¢ ¾îµå·¹½ÌÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó À̺κÐÀ» »ç¿ë°¡´ÉÇÑ ÁÖ ¸Þ¸ð¸®ÀÇ ÀϺηΠ¸ÅÇÎÇÏ¿© ±× ºÎºÐÀ» ¾ï¼¼½º ÇÔÀ¸·Î½á Expanded Memory °¡ ¾ï¼¼½º µÇµµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù. ¿©±â¼­ ¸ÅÇÎÀ̶ó´Â ¸» ÀÌ ³ª¿ÔÀ¾´Ï´Ù. ¸ÅÇÎÀ̶ó´Â °ÍÀº ³í¸®Àû ÆäÀÌÁö¸¦ ¹°¸®Àû ÆäÀÌÁö ¿¡ ÇÒ´çÇÔÀ¸·Î½á °á±¹ °°°Ô ¸¸µç´Ù´Â ÀǹÌÀÔ´Ï´Ù. ³í¸®Àû ÆäÀÌÁö ¶ó´Â °ÍÀº EMM ÀÇ ÇÔ¼ö¿¡ ÀÇÇØ ¾ò¾îÁø ÆäÀÌÁöÀÔ´Ï´Ù. Áï Expanded Memory ¿¡¼­ ¾ò¾î¿Â ÆäÀÌÁöÀÔ´Ï´Ù. 3 ÆäÀÌÁö¸¦ ¾ò¾î¿Ô ´Ù¸é ³í¸®Àû ÆäÀÌÁö¹øÈ£´Â Ç×»ó 0,1,2 °¡ µË´Ï´Ù. ¹°¸®Àû ÆäÀÌÁö ¶ó´Â °ÍÀº ÀÌ°ÍÀ» ½ÇÁ¦·Î ¾îµå·¹½ÌÇϱâ À§Çؼ­ »ç¿ëÇÏ´Â ÆäÀÌÁö ÀÔ´Ï´Ù. º¸Åë D000:0000 ºÎÅÍ Á¸ÀçÇÏÁö¸¸ ÀÌ°ÍÀº EMM function ¿¡ ÀÇÇؼ­ ¾òÀ» ¼ö ÀÖÀ¾´Ï´Ù. Á¦ÀÏ Ã³À½¿¡ Emm386.exe µîÀÌ ³ªÅ¸ ³»´Â ¸Þ¼¼Áö¸¦ º¸¸é Page Frame À̶ó°í ³ª¿À´Â °ÍÀÌ ÀÌ ÁÖ¼Ò°¡ µÇ°ÚÀ¾´Ï´Ù. ¿©±â¼­ D000:0000 µîÀ» PageFrame À̶ó°í ÇÕ´Ï´Ù. D000:0000 ÀÌ Page Frame À̶ó°í ÇÑ´Ù¸é D000:0000 ºÎÅÍ 16 KB ¸¦ ¹°¸®Àû ÆäÀÌÁö 0 À̶ó°í ¸»ÇÕ´Ï´Ù. Áï Expanded Memory 16 KB ¸¦ »ç¿ëÇÏ°í ½Í´Ù¸é EMM Function ¿¡ ÀÇÇؼ­ ÀÏ´Ü Page ¸¦ ÇÒ´ç ¹ÞÀº´ÙÀ½¿¡ ³í¸®ÆäÀÌÁö¸¦ ÀÌ ¹°¸®Àû ÆäÀÌÁö 0 µî¿¡ ¸ÅÇÎÇÏ°í ¹° ¸®Àû ÆäÀÌÁö 0 À» ¾ï¼¼½º ÇÏ¸é ½ÇÁ¦·Î´Â ³í¸®ÆäÀÌÁö¸¦ ¾ï¼¼½º ÇÏ ´Â ¼ÀÀÌ µÇ°ÚÀ¾´Ï´Ù. ÆäÀÌ¡À̶ó´Â °³³äÀ» Àß ÀÌÇØÇØ¾ß ÇÕ´Ï´Ù. º¸Åë ³í¸® ÆäÀÌÁö·Î Ç¥½ÃµÇ´Â Expanded Memory ´Â ¹°¸® ÆäÀÌÁö¿¡ ÀÇÇØ ¾îµå·¹½Ì °¡´ÉÇÑ ¿µ¿ªº¸´Ù Å®´Ï´Ù. µû¶ó¼­ ¹°¸® ÆäÀÌÁö¿¡ ¸ÅÇÎÇÏ´Ùº¸¸é ´õÀÌ»ó ¸ÅÇÎÇÒ ¼ö ÀÖ´Â ¿µ¿ªÀÌ ¾øÀ» ¼öµµ ÀÖÀ¾´Ï ´Ù. ÀÌ°æ¿ì ¾î¶² ¹°¸® ÆäÀÌÁö¸¦ ÇØÁ¦ÇÏ°í ´Ù¸¥ ÆäÀÌÁö¸¦ ¸ÅÇÎÇÒ °ÍÀΰ¡¸¦ Á¤ÇÏ´Â °ÍÀº ¹«Ã´ Áß¿äÇÑ ÀÏÀÔ´Ï´Ù. Áï ¹°¸® ÆäÀÌÁö°¡ 3 °³ÀÌ°í ³í¸® ÆäÀÌÁö°¡ 50 °³Âë µÈ´Ù°í ÇÒ¶§ ¹°¸® ÆäÀÌÁö¿¡ ³í ¸® ÆäÀÌÁö¸¦ Çѹø¿¡ ÇÒ´çÇÒ ¼ö ÀÖ´Â ¼ö´Â 3 °³»ÓÀ̹ǷΠ±× ÀÌ»ó À» °ü¸®Çϱâ À§Çؼ­´Â Àû´çÈ÷ ¸ÅÇÎÀ» ¹Ù²Ù¾î ÁÖ¾î¾ß ÇÑ´Ù´Â °ÍÀÌ ÁÒ. ¸¸ÀÏ ¹°¸® ÆäÀÌÁö 0,1,2 ¿¡ ³í¸® ÆäÀÌÁö 0,1,2 °¡ Â÷·Ê·Î ¸Å ÇεǾîÀÖ´Ù°í ÇսôÙ. À̶§ ³í¸® ÆäÀÌÁö 3 À» »ç¿ëÇÏ°íÀÚ ÇÑ´Ù¸é ¹°¸® ÆäÀÌÁö 0,1,2 Áß Çϳª¿¡ ¸ÅÇÎÀ» ÇØ¾ß ÇÒÅÙµ¥ ÇöÀç ¸ÅÇεǾî ÀÖ´Â °ÍÁß ¾î´À°ÍÀ» Æ÷±âÇÒ °ÍÀΰ¡¸¦ °áÁ¤ÇØ¾ß ÇÕ´Ï´Ù. º¸Åë ÀÌ ¿¡´Â ¿©·¯°¡Áö ¹æ¹ýÀÌ ¾²ÀÔ´Ï´Ù. ¸Å¹ø »ç¿ëȽ¼ö¸¦ üũÇؼ­ °¡Àå »ç¿ëȽ¼ö°¡ ÀûÀº °ÍÀ» Æ÷±âÇÏ´Â ¹æ¹ý,´ÜÀÏ Queue ¸¦ »ç¿ëÇؼ­ °¡ Àå ¸ÕÀú µé¾î¿Ô´ø°ÍÀ» Æ÷±âÇÏ´Â ¹æ¹ýµîÀÌ ÀÖ°ÚÀ¾´Ï´Ù. V.System À» óÀ½¿¡ ¼³°èÇÒ¶§´Â »ç¿ë°¡´ÉÇÑ ¹°¸® ÆäÀÌÁö¸¦ ¸ðµÎ ¾²±â À§ÇØ ¼­ ´ÜÀÏ Queue ¸¦ »ç¿ëÇß¾úÀ¾´Ï´Ù. ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀº ¸ÅÇÎÀ» ÀÚ À¯·Ó°Ô ÇÒ ¼ö ÀÖ´Ù´Â ÀåÁ¡À» »ì¸°°Í ±îÁö´Â ÁÁÁö¸¸ ´Ù¼Ò ¿î¿ëÀÌ ºÒ¾ÈÇÏ°í À̾߱â 5.0 µî ´Ù¸¥ Expanded Memory Áö¿ø ÇÁ·Î±×·¥°ú Ãæµ¹ÇÑ´Ù´Â ¹®Á¦°¡ »ý±â´õ±º¿ä. ±×·¡¼­ ÀÌ ¹®Á¦´Â V.System 2.0 À¸·Î ³Ñ±â±â·Î ÇßÀ¾´Ï´Ù. 1.0 ¿¡¼­´Â ¹°¸®ÆäÀÌÁö¸¦ 0 ¹ø¸¸ »ç¿ë ÇÕ´Ï´Ù. Áï º¹ÀâÇÑ ¸ÅÇÎÀ» ÇÒ ÇÊ¿ä°¡ ¾øÀ¾´Ï´Ù. ÆäÀÌÁö ÇÁ·¹ÀÓÀÇ ¼¼±×¸ÕÆ®¸¦ Segment ¶ó°í ÇÒ¶§ Segment:0000 ÀÌ ¹°¸®ÆäÀÌÁö 0 ¹ø ÀÌ µË´Ï´Ù. Swapping In ÇÒ¶§´Â »ç¿ëÇÒ ³í¸®ÆäÀÌÁö¸¦ Â÷·Ê·Î ¹° ¸® ÆäÀÌÁö 0 ¹øÀ¸·Î ÆäÀÌ¡ÇÑÈÄ vgbuff (Àü¿ª¹öÆÛ) ·Î ¿Å°ÜÁÖ¸é µÇ°í,Swapping Out ÇÒ¶§´Â vgbuff ¸¦ 16 KB ´ÜÀ§·Î ¹°¸®ÆäÀÌÁö 0 ¹ø¿¡ ¿Å±â°í,³í¸®ÆäÀÌÁö¿¡ ¸ÅÇÎÇÏ´Â °úÁ¤À» ¹Ýº¹ÇÏ¸é µÇ´Â °ÍÀÌ ÁÒ. ±×·³ EMM À» »ç¿ëÇÒ¶§ Byte ·Î Ç¥½ÃµÇ´Â Å©±âÀÇ ¹öÆÛ¸¦ È®º¸ Çϱâ À§Çؼ­´Â ¾î¶² ¹æ¹ýÀ» »ç¿ëÇÏ´ÂÁö¸¦ º¸°ÚÀ¾´Ï´Ù. 1. ÆäÀÌÁö ¼ö ȹµæ size/16/1024+1 ÀÌ ¿øÇÏ´Â ÆäÀÌÁö¼öÀÔ´Ï´Ù. ´Ü size ´Â Byte ´ÜÀ§ÀÔ´Ï´Ù. 2. ÆäÀÌÁö ÇÒ´çÀÌ °¡´ÉÇÑÁö È®ÀÎ EMM function ¿¡´Â ÇöÀç ÇÒ´ç °¡´ÉÇÑ ÆäÀÌÁö°¡ ÀÖ´ÂÁö °Ë»çÇÒ ¼ö ÀÖ´Â °ÍÀÌ ÀÖÀ¾´Ï´Ù. À̸¦ ÀÌ¿ëÇؼ­ 1 ¿¡¼­ ±¸ÇÑ ÆäÀÌ Áö¼ö¸¸Å­ÀÇ ÆäÀÌÁö ȹµæÀÌ °¡´ÉÇÑÁö¸¦ Á¶»çÇÕ´Ï´Ù. 3. °¡´ÉÇÏ´Ù¸é ÇÒ´ç 2 ¿¡¼­ °¡´ÉÇÏ´Ù°í ÆÇÁ¤ÀÌ ³ª¸é ÇÒ´çÀ» ÇÏ°í emm_handle À» µ¹·ÁÁÝ´Ï´Ù. ÀÌ emm_handle ¿¡´Â 1 ¿¡¼­ °è»êÇß´ø page ¸¸Å­ ÀÌ ±Í¼ÓµÇ´Â ¼ÀÀ̸ç ÀÌ °ÍÀº 0 ºÎÅÍ ¹øÈ£¸¦ ¸Å°Ü³õÀ¸¸é µË´Ï´Ù. Áï ÀÌ°ÍÀÌ ³í¸®Àû ÆäÀÌÁöÀε¥ 3 ÆäÀÌÁö¸¦ ÇÒ´ç¿äûÇß´Ù¸é emm_handle ¿¡´Â ³í¸®Àû ÆäÀÌÁö 0,1,2 °¡ ±Í¼ÓµÇ¾î ÀÖ´Â ¼ÀÀÔ´Ï ´Ù. ÁÖÀÇÇÒ °ÍÀº emm_handle ÀÇ ¼ö´Â ÇÑÁ¤µÇ¾î ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ¹øÈ£°ªÀº 0~255 »çÀ̶ó°í µÇ¾î ÀÖÁö¸¸ 256 °³°¡ Ç×»ó °¡´ÉÇÑ°ÍÀº ¾Æ´Ï¹Ç·Î ÀÌ¿¡´ëÇÑ °Íµµ Á¶»ç¸¦ Çغ¸¾Æ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô Çϸé ÀÌÁ¦ emm_handle ¿¡ ÀÇÇؼ­ Expanded Memory ¸¦ ´Ù ·ê¼ö ÀÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¾î ³í¸®Àû ÆäÀÌÁö 0 À» ¾ï¼¼½º ÇÏ°í ½Í´Ù¸é ¹°¸®Àû ÆäÀÌÁö 0 °ú ³í¸®Àû ÆäÀÌÁö 0 À» ¸ÅÇνÃÅ°´Â Emm Function À» »ç¿ëÇÏ¸é µË´Ï´Ù. ´Ù¸¥ ³í¸®Àû ÆäÀÌÁöµµ ¸¶Âù°¡ ÁöÀÔ´Ï´Ù. ÀÏ´Ü ¸ÅÇÎÇÏ°í ³ª¸é ¹°¸®Àû ÆäÀÌÁö´Â Á÷Á¢ ¼¼±×¸ÕÆ®, ¿É¼Â°ªÀ¸·Î ÂüÁ¶/º¯°æÀÌ °¡´ÉÇϹǷΠÁ÷Á¢ ¹öÆÛ¸¦ ´Ù·çµíÀÌ Ã³¸® ÇÏ¸é µË´Ï´Ù. ´Ü ÇÁ·Î±×·¥ÀÌ ³¡³ª±â Àü¿¡ ÇÒ´çÇß´ø emm_handle Àº ¹Ýµå½Ã ¹Ýȯ ÇØ¾ß ÇÕ´Ï´Ù. ÆäÀÌÁö ÀÚü¸¦ ¹ÝȯÇÏ´Â °ÍÀº ¾Æ´Ï°í emm_handle ¸¸À» ¹ÝȯÇÏ¸é µË´Ï´Ù. ±×·¯¸é ÀÌ¿¡ ±Í¼ÓµÈ ³í¸®ÆäÀÌÁöµéÀÌ ¸ðµÎ ¹ÝȯµÇ°Ô µË´Ï´Ù. ¸¸ÀÏ ¹ÝȯÇÏÁö ¾Ê°í ÇÁ·Î±×·¥À» ³¡³»¸é ±× ºÎ ºÐÀº »ç¿ëÀÌ ºÒ°¡´ÉÇÏ°Ô µÇ¹Ç·Î Expanded Memory ÀÇ »ç¿ë°¡´É Å© ±â´Â ÁÙ¾îµé°Ô µÇ°í emm_handle ÀÇ Active ÇÏ°Ô ³²¾ÆÀÖÀ¾´Ï´Ù. emskill °ú °°Àº ÇÁ·Î±×·¥À» »ç¿ëÇϸé ÀÌ·¯ÇÑ »óÅÂÀÇ emm_handle À» ÇØÁ¦ÇÒ ¼ö ÀÖÀ¾´Ï´Ù. ±×·¯¸é ÀÌÁ¦ ¾Õ¿¡¼­ ¾ð±ÞÇß´ø Âü°í¼­Àû¿¡ ³ª¿ÍÀÖ´Â EMM Function ¿¡ ´ëÇؼ­ Áß¿äÇÑ °ÍµéÀ» ¾Ë¾Æº¸°ÚÀ¾´Ï´Ù. ÇÑ±Û ¶óÀ̺귯¸®¿¡ ³Ö ±â À§ÇÑ ¸ðµâ¿ëÀ̹ǷΠÀÌ Ã¥¿¡¼­ »ç¿ëÇÑ ÇÔ¼öÀ̸§À» º¯°æÇÏ¿´½À ´Ï´Ù. ¼³¸íÀº °£´ÜÇÏ°Ô ÇßÀ¾´Ï´Ù. Turbo-C ¿¡¼­ Á¦°øÇÏ´Â int86 ÇÔ¼ö¿Í intdosx ÇÔ¼öµîÀ» »ç¿ëÇϹǷΠÀÌÇØ¿¡´Â º° ÁöÀåÀÌ ¾øÀ» µí ÇÕ´Ï´Ù. ¿ì¼± int86,intdosx ¸¦ »ç¿ëÇϱâ À§ÇÑ Register Type À» ¼±¾ðÇÕ´Ï´Ù. /* global register define */ union REGS inr,outr; struct SREGS segr; /* some definition */ #define hgSUCCESS 1 #define hgFAIL 0 #define MAX_EMM_HANDLE 255 int86 ÇÔ¼ö´Â ¼¼±×¸ÕÆ® ·¹Áö½ºÅ͸¦ ´Ù·çÁö ¾ÊÀ»¶§ »ç¿ëÇÕ´Ï´Ù. ¹Ý¸é¿¡ intdosx ÇÔ¼ö´Â ¼¼±×¸ÕÆ® ·¹Áö½ºÅ͸¦ »ç¿ëÇÒ¶§ »ç¿ëÇÕ´Ï ´Ù. ¿ì¼± EMM µå¶óÀ̹ö°¡ Á¸ÀçÇÏ´ÂÁö¸¦ ¾Ë¾Æ³»´Â ÇÔ¼öÀÔ´Ï´Ù. ¼º °øÇϸé hgSUCCESS,½ÇÆÐÇϸé hgFAIL À» ¸®ÅÏÇÕ´Ï´Ù. char hgEMM_IsInstalled() { char *device="EMMXXXX0"; char far *int67name; char temp[8]; int i; inr.h.ah=0x35; inr.h.al=0x67; intdosx(&inr,&outr,&segr); int67name=MK_FP(segr.es,0x0a); for (i=0;i<8;i++) temp[i]=int67name[i]; if (memcmp(device,temp,8)==0) return (hgSUCCESS); else return (hgFAIL); } º¸Åë EMM function Àº int 67h ¸¦ ÀÌ¿ëÇϴµ¥ hgEMM_IsInstalled ÇÔ¼ö´Â EMM function ÀÌ ¾Æ´Ï¶ó EMM À» Check ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÌ ¸¦ ±¸ÇöÇϱâ À§Çؼ­´Â DOS function Call 35h,Áï Get Vector ¸¦ »ç¿ëÇÏ¿© 0x67 (Emm function) ¿¡ ´ëÇÑ °ÍÀ» ¾Ë¾Æ³À´Ï´Ù. À̶§ ES ·¹Áö½ºÅÍ´Â Emm ÀÇ ¾ÕºÎºÐÀÇ ¼¼±×¸ÕÆ®¸¦ °¡¸®Å°°Ô µÇ¾î ÀÖÀ¾ ´Ï´Ù. ¸Þ¸ð¸® ¸Å´ÏÀú´Â ÀÏÁ¾ÀÇ Character Device Driver À̹ǷΠÇÁ·Î±×·¥ÀÇ Ãʱâ¹øÁö´Â 0000h ÀÌ°í,ÃʱâºÎºÐ¿¡ Device Header ¸¦ °®½À´Ï´Ù. ÀÌÁß Device name field ´Â 000a ºÎÅÍ 8 ¹ÙÀÌÆ®¸¦ Â÷ ÁöÇÕ´Ï´Ù. Áï ES:000A ºÎÅÍÀÇ 8 ¹ÙÀÌÆ®¸¦ EMMXXXX0 °ú ºñ±³ÇÔÀ¸ ·Î½á EMM ÀÌ Á¸ÀçÇÏ´ÂÁö¸¦ Check ÇÒ ¼ö°¡ ÀÖÀ¾´Ï´Ù. ±× ´ÙÀ½ ÇÔ ¼ö´Â pages ¸¸Å­ÀÇ ³í¸®ÆäÀÌÁö¸¦ ÇÒ´çÇÒ ¼ö ÀÖ´ÂÁö¸¦ ¾Ë¾Æº¸´Â ÇÔ¼öÀÔ´Ï´Ù. int 67h ÀÇ ±â´É¹øÈ£ 0x42 ¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ÀÚ¼¼ÇÑ ¼³¸íÀº ÇÊ¿ä¾øÀ»µí ÇÕ´Ï´Ù. ÀÌ Æã¼ÇÀº bx ·¹Áö½ºÅÍ¿¡ »ç¿ë°¡´ÉÇÑ ÆäÀÌÁö¸¦ ¸®ÅÏÇÕ´Ï´Ù. ´Ü È£ÃâÈÄÀÇ ah ·¹Áö½ºÅÍ°¡ 0 ÀÌ ¾Æ´Ï¸é ¿¡·¯°¡ ¹ß»ýÇÑ °ÍÀÔ´Ï´Ù. char hgEMM_IsEnoughPages(int pages) { inr.h.ah=0x42; int86(0x67,&inr,&outr); if (outr.h.ah!=0 || pages>outr.x.bx) return (hgFAIL); else return (hgSUCCESS); } ±×´ÙÀ½Àº »ç¿ë°¡´ÉÇÑ ÆäÀÌÁö¸¦ Á÷Á¢ ¾ò¾î³»´Â ÇÔ¼öÀÔ´Ï´Ù. ¿ª½Ã int 67h ÀÇ ±â´É¹øÈ£ 0x42 ¸¦ ÀÌ¿ëÇÕ´Ï´Ù. bx ·¹Áö½ºÅÍÀÇ °ªÀ» Á÷Á¢ ¸®ÅÏÇØÁÖ°í ÀÖÀ¾´Ï´Ù. À§ÀÇ ÇÔ¼ö¿Í ±Ùº»ÀûÀ¸·Î °°Àº °ÍÀÔ´Ï ´Ù. int hgEMM_GetFreePages() { inr.h.ah=0x42; int86(0x67,&inr,&outr); if (outr.h.ah!=0) return hgFAIL; /* 0 is fail */ return (outr.x.bx); } hgEMM_GetTotalPages ÇÔ¼ö´Â ÃÑÆäÀÌÁö¼ö¸¦ ¾ò¾î³»´Â ÇÔ¼ö·Î½á ±â ´É 0x42 ¸¦ »ç¿ëÇÕ´Ï´Ù. À̶§ dx ·¹Áö½ºÅÍ´Â ÃÑÆäÀÌÁö¼ö¸¦ °¡Áö °í ÀÖÀ¾´Ï´Ù. int hgEMM_GetTotalPages() { inr.h.ah=0x42; int86(0x67,&inr,&outr); if (outr.h.ah!=0) return hgFAIL; /* 0 is fail */ return (outr.x.dx); } ÀÌ ÇÔ¼ö´Â pages ¸¸Å­ÀÇ ³í¸®Àû ÆäÀÌÁö¸¦ emm_handle ¿¡ ÇÒ´çÇØ ÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù. Áï ½ÇÁúÀûÀÎ ÇÒ´çÀ» ÇØÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù. ±â´É 43 ¹øÀ» ÀÌ¿ëÇϸç bx ·¹Áö½ºÅÍ¿¡ pages ¸¦ ³Ö°í È£ÃâÇϸé dx ·¹ Áö½ºÅÍ¿¡ emm_handle ÀÇ °ªÀÌ ¸®ÅÏµÇ¾î ¿É´Ï´Ù. char hgEMM_AllocatePages(int pages,unsigned int *emm_handle) { inr.h.ah=0x43; inr.x.bx=pages; int86(0x67,&inr,&outr); if (outr.h.ah==0) { *emm_handle=outr.x.dx; return (hgSUCCESS); } else return (hgFAIL); } ÀÌ ÇÔ¼ö´Â ¸ÅÇÎÀ» ÇØÁÖ´Â ÇÔ¼öÀκñ´Ù. Áï handle ÀÇ ³í¸® ÆäÀÌÁö lpage ¸¦ ¹°¸® ÆäÀÌÁö ppage ¿¡ ¸ÅÇÎÇØÁÝ´Ï´Ù. ¸ÅÇÎÀÌ ¸Å¿ì ¸¹ÀÌ ¾²À̹ǷΠ¹«Ã´ Áß¿äÇÑ ÇÔ¼ö¶ó°í ÇÒ ¼ö ÀÖ°ÚÀ¾´Ï´Ù. ±â´É 0x44 ¸¦ ÀÌ¿ëÇÕ´Ï´Ù. char hgEMM_MapPages(unsigned int handle,int ppage,int lpage) { inr.h.ah=0x44; inr.h.al=ppage; inr.x.bx=lpage; inr.x.dx=handle; int86(0x67,&inr,&outr); if (outr.h.ah==0) return (hgSUCCESS); else return (hgFAIL); } ÀÌ ÇÔ¼ö´Â Page Frame À» ¾ò¾î³À´Ï´Ù. Á¤È®È÷ ¸»ÇÏ¸é ¹°¸®Àû Æä ÀÌÁö 0 ¹øÀÇ Segment:0000 ÀÇ °ªÀ» ¾ò¾î³À´Ï´Ù. ¹°¸®Àû ÆäÀÌÁö´Â Ç×»ó Offset ÀÌ 0 ºÎÅÍ ½ÃÀÛÇϹǷΠSegment ÀÇ °ª¸¸ ¾Ë¸é ÁÖ¼Ò¸¦ ¾Ë ¼ö ÀÖ°í Á÷Á¢ ¾îµå·¹½ÌÀÌ °¡´ÉÇÕ´Ï´Ù. ±â´É 0x41 À̸ç bx ·¹ Áö½ºÅÍ°¡ Segment °ªÀÔ´Ï´Ù. char hgEMM_GetAddress(char **pf_ptr) { inr.h.ah=0x41; int86(0x67,&inr,&outr); if (outr.h.ah!=0) return (hgFAIL); else *pf_ptr=MK_FP(outr.x.bx,0); return (hgSUCCESS); } ÀÌ ÇÔ¼ö´Â À§ÀÇ °Í°ú °°Áö¸¸ Segment °ªÀ» unsigned ·Î ¸®ÅÏÇÏ°í ÀÖÀ¾´Ï´Ù. V.System ¿¡¼­ ÃʱâÈ­ ÇÒ¶§ ¾²ÀÌ´Â ÇÔ¼öÀÔ´Ï´Ù. unsigned hgEMM_GetSeg() { inr.h.ah=0x41; int86(0x67,&inr,&outr); if (outr.h.ah!=0) return (hgFAIL); else return (unsigned)outr.x.bx; } ÇÁ·Î±×·¥À» ³¡³¾¶§ emm_handle Àº ¹Ýµå½Ã ÇØÁ¦µÇ¾î¾ß ÇÕ´Ï´Ù. ±â ´É 0x45 ÀÔ´Ï´Ù. dx ·¹Áö½ºÅÍ¿¡ handle À» ³Ö°í È£ÃâÇÕ´Ï´Ù. char hgEMM_FreeHandle(unsigned int emm_handle) { inr.h.ah=0x45; inr.x.dx=emm_handle; int86(0x67,&inr,&outr); if (outr.h.ah==0) return (hgSUCCESS); else return (hgFAIL); } EMM ÀÇ ¹öÁ¯À» ¾ò¾î³À´Ï´Ù. String ¿¡ __.__ ÀÇ Çü½ÄÀ¸·Î ¸®ÅÏÇØ ¿É´Ï´Ù. LIM 4.0 ÀÏ °æ¿ì¿¡´Â ¾È½ÉÇÏ°í »ç¿ëÇÒ ¼ö ÀÖÁö¸¸ ±× ÀÌ Àü ¹öÁ¯Àº »ç½Ç Á» µ¿ÀÛÀÌ ºÒ¾ÈÇÑ °ÍÀº »ç½ÇÀÔ´Ï´Ù. ±×·¯³ª V.System Àº EMM ±âº» ÇÔ¼ö¸¸À» »ç¿ëÇßÀ¸¹Ç·Î º° ¹®Á¦´Â ¾øÀ» °Í À¸·Î »ý°¢ÇÕ´Ï´Ù. ±â´É 0x46 ÀÔ´Ï´Ù. char hgEMM_GetVersion(char *s) { inr.h.ah=0x46; int86(0x67,&inr,&outr); if (outr.h.ah!=0) return hgFAIL; sprintf(s,"%d.%d\0",(outr.h.al&0xf0)>>4,outr.h.al&0x0f); return hgSUCCESS; } ÇöÀçÀÇ ÇÒ´çµÈ ÃÑ Handle ¼ö¸¦ ¾ò¾î³À´Ï´Ù. ±â´É 0x4b ÀÔ´Ï´Ù. int hgEMM_GetHandleCount() { inr.h.ah=0x4b; int86(0x67,&inr,&outr); if (!outr.h.ah) return outr.x.bx; return hgFAIL; } handle ¿¡ ÇÒ´çµÈ ³í¸®Àû ÆäÀÌÁöÀÇ ¼ö¸¦ ¾Ë¾Æ³À´Ï´Ù. ±â´É 0x4c ÀÔ´Ï´Ù. ³í¸®Àû ÆäÀÌÁö´Â 0~ ÀÌ ÇÔ¼öÀÇ ¸®ÅÏ°ª-1 ±îÁöÀÇ ¹øÈ£¸¦ ºÎ¿©¹Þ½À´Ï´Ù. int hgEMM_GetHandlePages(unsigned int handle) { inr.h.ah=0x4c; inr.x.dx=handle; int86(0x67,&inr,&outr); if (!outr.h.ah) return outr.x.bx; return hgFAIL; } ´ÙÀ½ÀÇ µÎ ÇÔ¼ö´Â ¸Å¿ì Ư¼öÇÑ °ÍÀÔ´Ï´Ù. ÀÏ´Ü ´ÙÀ½ÀÇ ±¸Á¶Ã¼Á¤ ÀǸ¦ º¸½Ã°ÚÀ¾´Ï´Ù. typedef struct phy { unsigned int segment; unsigned int pnum; } PHYSICAL_PAGE; ÇÑ ·¹Äڵ尡 ÀÌó·³ ±¸¼ºµÈ PHYSICAL_PAGE ÇüÀÇ ¹è¿­¿¡ ¹°¸®ÆäÀÌ Áö¹øÈ£-¼¼±×¸ÕÆ®À§Ä¡ ·Î ±¸¼ºµÈ Å×À̺íÀ» ±¸ÇÒ¶§ ¾¹´Ï´Ù. hgEMM_GetPhysicalNumber ÇÔ¼ö´Â ÃÑ °¡´ÉÇÑ ¹°¸®Àû ÆäÀÌÁöÀÇ ¼ö ¸¦ ¸®ÅÏÇÕ´Ï´Ù. ax ·¹Áö½ºÅÍ¿¡ 0x5801 À» ³Ö°í È£ÃâÇÑ´Ù´Â °ÍÀÌ Æ¯ÀÌÇÕ´Ï´Ù. cx ·¹Áö½ºÅÍ°¡ ÃÑ ¼ö°¡ µÇ°ÚÀ¾´Ï´Ù. int hgEMM_GetPhysicalNumber() { inr.x.ax=0x5801; int86x(0x67,&inr,&outr,&segr); if (!outr.h.ah) return outr.x.cx; return hgFAIL; } ÀÏ´Ü ¼ö¸¦ ¾ò°í ³ª¸é PHYSICAL_PAGE *p; ÇüÀÇ Æ÷ÀÎÅ͸¦ ±× ¼ö¸¸ Å­ È®º¸ÇÏ°í ´ÙÀ½ ÇÔ¼ö¿¡ ÀÇÇؼ­ ½ÇÁ¦·Î Å×À̺íÀ» ¾òÀ»¼ö°¡ ÀÖÀ¾ ´Ï´Ù. ax ´Â 0x5800 ÀÔ´Ï´Ù. int hgEMM_GetPhysicalTable(PHYSICAL_PAGE *p) { inr.x.ax=0x5800; segr.es=FP_SEG(p); inr.x.di=FP_OFF(p); int86x(0x67,&inr,&outr,&segr); if (!outr.h.ah) return outr.x.cx; return hgFAIL; } ÀÌ Å×À̺íÀº ¹°¸®Àû ÆäÀÌÁö¸¦ ¿©·¯°³ »ç¿ëÇÒ °æ¿ì¿¡ À¯¿ëÇÕ´Ï´Ù. óÀ½ÀÇ ¼³°è¿¡´Â Queue ¸¦ »ç¿ëÇÑ ¹°¸®Àû ÆäÀÌÁöÀÇ º¹¼ö°ü¸®Ã¼Á¦ ·Î¼­ ÀÌ Å×À̺íÀ» »ç¿ëÇß¾úÁö¸¸ Áö±ÝÀº ¹°¸®Àû ÆäÀÌÁö 0 ¹ø¸¸À» »ç¿ëÇϹǷΠÀÌ Å×À̺íÀ» »ç¿ëÇÒ ÇÊ¿ä´Â ¾øÀ¾´Ï´Ù. ´ÜÁö FramePointer,Áï ¹°¸®Àû ÆäÀÌÁö 0 ¹øÀÇ Segment ¸¸À» ±¸ÇÏ¸é µÇ ´Â °ÍÀÔ´Ï´Ù. ±×·³ ÀÌÁ¦ EMM ¿¡ ´ëÇؼ­ ÇÊ¿äÇÑ ¶óÀ̺귯¸®·çƾÀº ´ëÃæ ¼³¸íÀÌ µÈ ¼ÀÀÔ´Ï´Ù. ÀÌ ºÎºÐµµ Ç㸣¹Ì 2.0 ÀÇ ÀϺκÐÀÌ µÉ °ÍÀÔ´Ï´Ù. ±×·³ ´ÙÀ½ °­Á´ ÀÌ EMM Function À» Àß ÀÌ¿ëÇÏ¿© ½ÇÁ¦·Î V.System ÀÇ Swapping ¿µ¿ªÀ¸·Î½á EMS ¸¦ ÀÌ¿ëÇÏ´Â Function µé À» Á¦ÀÛÇØ º¸°ÚÀ¾´Ï´Ù. ±×·³...Ç㸣¹Ì!