Á¦¸ñ : - Expanded M. °ü¸® ¾È³çÇϼ¼¿ä Ç㸣¹ÌÀÔ´Ï´Ù. ¿À´ÃÀº Àú¹ø °­Á¿¡¼­ ¼³¸íÇß ¾ú´ø EMS Function À» ÀÌ¿ëÇؼ­ V.System ÀÇ ÀϺκÐÀÎ EMM Swapping °ü¸®±â¸¦ ¸¸µé¾î º¸°ÚÀ¾´Ï´Ù. Áö±Ý±îÁö HardDisk, Conventional Memory ¿¡ ´ëÇؼ­ ÇØ¿Â °Í°ú ¸¶Âù°¡Áö·Î hgVMalloc ·ùÀÇ ÇÔ¼ö¿Í hgVFree ·ù,hgVSetBuff,hgVSaveBuff ·ùÀÇ ÇÔ¼öµéÀ» ¸¸µé¾î¾ß ÇÕ´Ï´Ù. ¾Æ¸¶ ¿¹»óÇϽŠ°Íº¸´Ù´Â ÈξÀ °£´ÜÇÒ°Ì´Ï´Ù. Swapping ÀÛ¾÷À» ÇÁ·Î±×·¡¸Ó°¡ Á÷Á¢ ÇØÁÖ´Â °ÍÀ̹ǷΠ±×ÀÇ ¿î¿ë À» À§Çؼ­´Â º°ÀÛ¾÷ÀÌ µû·Î ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï±â ¶§¹®ÀÌÁÒ. ±×·³ Â÷·Ê·Î »ìÆ캸°ÚÀ¾´Ï´Ù. Âü.. À̹ø °­Á¿¡¼­´Â Àú¹ø EMS funcion ¿¡ ´ëÇÑ °­Á¸¦ Àоú´Ù´Â °¡Á¤ÇÏ¿¡¼­ ¼³¸íÀ» ÁøÇàÇÏ°ÚÀ¾´Ï´Ù. Ȥ ¾È ÀÐÀ¸½Å ºÐÀº Àú¹ø °­Á¸¦ ¸ÕÀú ÀÐ¾î º¸¼¼¿ä. À½..¿ì¼± LogicHandle °ú emmhandle À» ±â·ÏÇϱâ À§Çؼ­ Å×À̺íÀ» ¸¸µé¾î ³õ½À´Ï´Ù. ÃÖ´ë 255 °³±îÁö Å×À̺íÀ» È®º¸ÇØ ³õ½À´Ï´Ù. ¾Æ·¡¸¦ º¸½Ã¸é ¼¼°¡Áö ±¸¼º¿ä¼Ò¸¦ °¡Áö´Âµ¥ ù¹ø°´Â logichandle,µÎ¹ø °´Â logicalpage,¼¼¹ø°°¡ emmhandle ÀÔ´Ï´Ù. logichandle, emmhandle Àº Àú¹ø °­Á¸¦ º¸½Ã¸é µÇ°í,logicalpage ´Â ¸»±×´ë·Î ½ÇÁ¦ EMS ÀÇ logicalpage ¹øÈ£ÀÔ´Ï´Ù. ¸¸ÀÏ emmhandle ¿¡ 5 °³ÀÇ ÆäÀÌÁö°¡ ÇÒ´çµÇ¾î ÀÖ´Ù¸é 0,1,2,3,4 ±îÁöÀÇ logical page ¹øÈ£ °¡ °¡´ÉÇϹǷΠ¿©±â¿¡¼­´Â ÀÌ°æ¿ì logicalpage = 4 ·Î Çϵµ·Ï ÇÏ ¿´À¾´Ï´Ù. Áï ÇÒ´çÆäÀÌÁö¼ö - 1 ÀÌ logicalpage ÀÇ °ªÀÌ µÇ°ÚÀ¾ ´Ï´Ù. #define MAX_EMM_HANDLE 255 /* emm structure */ struct emm { int logichandle; int logicalpage; unsigned int emmhandle; } emm_table[MAX_EMM_HANDLE] = { {0,0,0}, }; int emmpos=0; ±×¸®°í logichandle À» ÀÔ·ÂÀ¸·ÎÇؼ­ Çö Å×ÀÌºí¿¡ ±×¿¡ ¸Â´Â emmhandle ÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇØ ÁÖ´Â ÇÔ¼ö¸¦ ¸¸µé¾î ³õ½À´Ï´Ù. ÀÌ °ÍÀÌ findemmhandle ÇÔ¼öÀÔ´Ï´Ù. int findemmhandle(int logichandle) { int i; for (i=0;ilogichandle); hgEMM_MapPages(emm_table[j].emmhandle,0,logic); } ÀÌ ÇÔ¼ö°¡ ªÁö¸¸ ½ÇÁ¦ ·çƾÀÇ ÁßÃßÀûÀÎ ¿ªÇÒÀ» ÇسÀ´Ï´Ù. Áï VMEM * ÇüÀÇ p ·Î ¾Ë¾Æ³»´Â logichandle °ªÀ¸·Î emmhandle ÀÇ °ª À» ¾Ë¾Æ³»°í,ÀÔ·ÂÀ¸·Î ÁÖ¾îÁø logic page ÀÇ ¹øÈ£¸¦ Physical Page 0 À¸·Î Mapping ½ÃÅ°´Â °ÍÀÔ´Ï´Ù. ¸»ÇÏÀÚ¸é logic À̶ó´Â Logical Page ¸¦ Physical Page 0 ¿¡ ¸ÅÇÎÇÏ´Â °ÍÀÌÁÒ. ±×·¯¸é ÀÌÁ¦ ½ÇÁ¦ hgVMallocEMM ÇÔ¼ö¸¦ »ìÆ캾½Ã´Ù. hgVMallocEMM ÇÔ¼ö ÀÇ È帧À» ´ëÃæ »ìÆ캸°ÚÀ¾´Ï´Ù. 1. ÀÔ·ÂÀº unsigned size ,, Áï 64 KB ±îÁöÀÇ ¹öÆÛ°¡´É 2. pages = (size/16/1024)+1, Áï size ¸¸Å­ÀÇ ¹öÆÛ¸¦ À§ÇØ ÇÊ¿äÇÑ ÆäÀÌÁö¼ö 3. 2 ¿¡¼­ ±¸ÇÑ page ¸¸Å­ÀÇ Logical Page °¡ ÀÖ´ÂÁö¸¦ È®ÀÎ ÇÑ´Ù. 4. logichandle À» ÇÒ´ç¹Þ´Â´Ù. 5. emm_table ¿¡ µî·ÏÇÑ´Ù. 6. emmhandle ¿¡ pages ¸¸Å­À» ÇÒ´çÇÑ´Ù. 7. VMEM ÇüÀÇ p ÀÇ type,logichandle À» ÇÒ´çÇÑ´Ù. 8. emm_table ÀÇ ¿ä¼ÒµéÀ» ä¿î´Ù.(logicalpage µî) 9. VMEM pointer ¹Ýȯ °¢°¢ÀÇ ±¸ÇöÀº ÀÌ¹Ì Àú¹ø °­Á¿¡¼­ Çسõ¾Ò´ø ÇÔ¼ö,±×¸®°í HardDisk,Conventional Memory °ü¸®ºÎºÐ¿¡¼­ ÇÑ ºÎºÐ°ú °ÅÀÇ °° À¸¹Ç·Î º° ¹®Á¦´Â ¾øÀ¸¸®¶ó°í º¾´Ï´Ù. ÇÏÁö¸¸ ÀÌÁ¦ °ÅÀÇ V.System ÀÇ °­Áµµ ³¡³ª°¡´Ï±î hgVMallocEMM ÀÇ ¼Ò½º¸¦ º¸°ÚÀ¾ ´Ï´Ù. VMEM *hgVMallocEMM(unsigned size) { int i,l; unsigned pages; unsigned emmhandle; VMEM *p; if (!emmflag) return NULL; pages=(size/16/1024)+1; if (!hgEMM_IsEnoughPages(pages)) return NULL; l=findlogichandle(); if (l==0) return NULL; for (i=0;itype=EMM; p->logichandle=l; emm_table[emmpos].logichandle=l; emm_table[emmpos].logicalpage=pages-1; emm_table[emmpos].emmhandle =emmhandle; return (VMEM *)p; } È帧µµ¿Í ÇÔ²² »ìÆ캸½Ã¸é º° ¾î·Á¿î Á¡Àº ¾øÀ» °É·Î º¾´Ï´Ù. ±× ·¯¸é ÇØÁ¦ ÇÔ¼ö¸¦ º¸°ÚÀ¾´Ï´Ù. void hgVFreeEMM(VMEM **p) { int i; i=findemmhandle((*p)->logichandle); hgEMM_FreeHandle(emm_table[i].emmhandle); deletelogichandle((*p)->logichandle); emm_table[i].logichandle=0; free(*p); } ÀÏ´Ü logichandle ·Î emmtable ÀÇ ¹øÈ£¸¦ ±¸ÇÑ´ÙÀ½¿¡ hgEMM_FreeHandle ÇÔ¼ö·Î emmhandle ¿¡ ÇÒ´çµÇ¾ú´ø ÆäÀÌÁöµéÀ» ÇØÁ¦ÇÕ´Ï´Ù.±×¸®°í emm_table ÀÇ ¿ø¼Ò¿Í logichandle À» ÇØÁ¦ÇÕ ´Ï´Ù. ¸¶Áö¸·À¸·Î VMEM ÇüÀÇ p ¸¦ ÇØÁ¦ÇÏ¸é µÇÁÒ. ±×·¯¸é Swapping ÇÔ¼öµéÀ» »ìÆ캸°ÚÀ¾´Ï´Ù. ¿ì¼± Swapping In À» º¸°ÚÀ¾ ´Ï´Ù. EMS ÀÇ Logical Page ¿¡ ±â·ÏµÇ¾î ÀÖ´Â µ¥ÀÌÅ͸¦ Àü¿ª¹öÆÛ ÀÎ vgbuff ·Î ¿Å°ÜÁÖ¾î¾ß ÇÕ´Ï´Ù. Àú´Â movedata ÇÔ¼ö¸¦ »ç¿ëÇÏ ¿´À¾´Ï´Ù. ÀÌ ÇÔ¼öÀÇ Çü½ÄÀº movedata(srcseg,srcoff,destseg,destoff,bytes); ÀÔ´Ï´Ù. Áï destseg,destoff ´Â vgbuff ÀÇ ¼¼±×¸ÕÆ®,¿É¼ÂÀÌ µÇ´Â ¼ÀÀÌÁÒ. ÀÌ´Â ÁÖ °ü¸®ºÎºÐ¿¡¼­ ¹Ì¸® ±¸Çسõ½À´Ï´Ù. ¿¡ ÀÖ´Â ¸ÅÅ©·ÎÀÎ FP_OFF,FP_SEG ¸¦ ÀÌ¿ëÇßÀ¾´Ï´Ù. vgseg=FP_SEG(vgbuff); vgoff=FP_OFF(vgbuff); ±×·¸´Ù¸é srcseg,srcoff ´Â ¹«¾ùÀϱî¿ä ? ¹Ù·Î Physical Page 0 ÀÇ ¼¼±×¸ÕÆ®¿Í ¿É¼ÂÀÌ µÉ °ÍÀÔ´Ï´Ù. ¹°·Ð ¸ÕÀú ¸ÅÇÎÀÌ ÀÌ·ç¾î Á® ¾ß ÇÕ´Ï´Ù. Áï Logical Page 0~n ±îÁö¸¦ (n<=3,ÇÑ ¹öÆÛ´Â 64 KB ¸¦ ³ÑÀ»¼ö ¾ø°í,ÇÑ ÆäÀÌÁö´Â 16 KB À̹ǷÎ) vgbuff ¿¡ ¿Å°Ü ÁÖ±â À§Çؼ­´Â 1. k<-0 2. logical page k °ú physical page 0 ¸ÅÇÎ 3. physical page 0 -> vgbuff 4. k++ 5. ¸¸¾à k<=n À̸é 2 ·Î °¨ À̶§ 3 ¹øÀÇ Ã³¸®¸¦ º¸¸é physical page 0 ÀÇ ¼¼±×¸ÕÆ®¿Í ¿É¼ÂÀ» ¾Ë¾Æ¾ß ÇÕ´Ï´Ù. ÀÌ°ÍÀº EMS function Áß Çϳª¸¦ »ç¿ëÇÏ¸é µË´Ï ´Ù. Áï ftbuff=hgEMM_GetSeg(); ÀÌ·¸°Ô µË´Ï´Ù. hgEMM_GetSeg ÇÔ¼ö¿¡ ´ëÇؼ­´Â Àú¹ø °­Á¸¦ Âü°í Çϼ¼¿ä. ±×·³ ÀÌÁ¦ hgVSetBuffEMM ÇÔ¼ö¸¦ º¸°ÚÀ¾´Ï´Ù. ÀÌ ÇÔ¼ö°¡ Swapping In ÇØÁÖ´Â ÇÔ¼öÀÔ´Ï´Ù. void hgVSetBuffEMM(VMEM *p) { int i,j; unsigned offset=vgoff; i=findemmhandle(p->logichandle); for (j=0;j<=emm_table[i].logicalpage;j++) { mappingpages(p,j); movedata(ftbuff,0,vgseg,offset,0x4000); offset+=0x4000; } } Physical Page 0 ÀÇ ¿É¼ÂÀº Ç×»ó 0 À̶ó´Â °ÍÀ» ±â¾ïÇϼ¼¿ä. 0x4000 Àº 16 KB ¶ó´Â ¶æÀÌ°í vgbuff ¿¡ 16 KB ¾¿ ´©ÀûÇϸ鼭 ±â ·ÏÇÏ°í ÀÖÀ¾´Ï´Ù.¿©±â¿¡¼­ logicalpage ¶ó´Â °ÍÀÌ ¾²ÀÔ´Ï´Ù. mappingpages ÇÔ¼ö¿¡ ÀÇÇؼ­ Â÷·Ê·Î ¸ÅÇΰú º¹»ç¸¦ Â÷·Ê·Î ¹Ýº¹ ÇÏ´Â °ÍÀÌÁÒ. ±×·¯¸é Swapping Out ÇÔ¼ö¸¦ º¸°ÚÀ¾´Ï´Ù. void hgVSaveBuffEMM(VMEM *p) { int i,j; unsigned offset=vgoff; i=findemmhandle(p->logichandle); for (j=0;j<=emm_table[i].logicalpage;j++) { mappingpages(p,j); movedata(vgseg,offset,ftbuff,0,0x4000); offset+=0x4000; } } °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù. movedata ÀÇ ÀÎÀÚ°¡ ¹Ù²î¾úÀ» »ÓÀ̶ö±î¿ä. ¿ª ½Ã ¸ÅÇΰú º¹»ç¸¦ ¹Ýº¹ÇÏ¸é µË´Ï´Ù. vgset,vgoff ¸¦ »ç¿ëÇÏ°í ÀÖ À½À» ÁÖÀÇÇؼ­ º¸½Ã¸é µÇ°ÚÀ¾´Ï´Ù. ±×·³ ÀÌÁ¦ À§ÀÇ EMM À» ±¸ÇöÇÔ¿¡ À־ÀÇ ´ÜÁ¡À» ¸î°¡Áö ¤°í ³Ñ¾î°¡°ÚÀ¾´Ï´Ù. À§¿¡¼­ º¸½Ã¸é ¾Ë¼ö ÀÖµíÀÌ À§ÀÇ EMM °ü¸®ºÎºÐ Àº °£´ÜÇÑ ±¸Á¶·Î µÇ¾î ÀÖÀ¾´Ï´Ù. ÀÌÇØÇϱâ´Â ÆíÇÏÁö¸¸ ¸ÅÇÎÀ̶ó ´Â Ư¡À» »ì¸®Áö ¸øÇÏ¿´±â ¶§¹®¿¡ ¸Å¹ø Àü¿ª¹öÆÛ·Î º¹»çÇØ¾ß ÇÏ ´Â ºÒÆíÀ» °Þ¾î¾ß ÇÕ´Ï´Ù. ÀÌ´Â Physical Page ¸¦ 0 ¸¸ÀÌ ¾Æ´Ñ º¹¼ö°³¸¦ »ç¿ëÇÏ°í,Àü¿ª¹öÆÛÀÇ °³³äÀÌ ¾Æ´Ñ Àü¿ªÆ÷ÀÎÅÍÀÇ °³³äÀ» µµÀÔÇؼ­ V.System À» ¼³°èÇØ¾ß ÇÕ´Ï´Ù. V.System Àº ÇöÀç ¹öÀü 1.0 ÀÌ°í,HardDisk ¸¦ °°Àº ¹æ¹ýÀ¸·Î Áö¿øÇϱâ À§Çؼ­ Àü¿ª¹öÆÛ ÀÇ °³³äÀ» µµÀÔÇÏ¿´À¾´Ï´Ù. ´öºÐ¿¡ ÇÁ·Î±×·¥Àº ¹«Ã´ °£´ÜÇØ Á³Áö ¸¸ ÇÁ·Î±×·¡¸Ó°¡ ÀÚ½ÅÀÇ ÇÁ·Î±×·¥¿¡ ¹«Ã´ ½Å°æÀ» ½á ÁÖ¾î¾ß ÇÕ´Ï ´Ù. V.System 2.0 Àº º¸´Ù Áøº¸µÈ ¹æ½ÄÀ» µµÀÔÇÏ¿© °¢ Resource ÀÇ Æ¯¼ºÀ» »ì¸° ÇÁ·Î±×·¡¹ÖÀ» Çغ¸·Á°í ÇÕ´Ï´Ù. Àüü ¸Þ¸ð¸® Space °ø°£ÀÇ °³³äÀ» µµÀÔÇÏ¿© 64 KB ¶ó´Â ÇÑ ¹öÆÛÀÇ Á¦Çѵµ ³Ñ ¾îº¸·Á°í ÇÕ´Ï´Ù. »ç¿ëÀÚ´Â ¾ÆÁÖ Æ¯¼öÇÑ ¹æ¹ýÀ¸·Î ÇÁ·Î±×·¡¹ÖÀ» ÇØ¾ß °ÚÁö¸¸ V.System Àº Ư¼öÇÑ ¿ëµµ·Î¸¸ ÀÌ¿ëµÉ °ÍÀ̹ǷΠ±âÁ¸ ÀÇ malloc ·ùÀÇ ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº º° ¹®Á¦¾øÀÌ µ¿ÀÛÇÒ °ÍÀÔ ´Ï´Ù. ±×·³..Ç㸣¹Ì. ´ÙÀ½ °­Á´ V.System ÀÇ ¸¶¹«¸®ÀÔ´Ï´Ù.