½Ã½ºÅÛ°ü¸®ÀÚÀÇ ½°ÅÍ Ä¿ÇǴнº Ä¿ÇÇÇâÀÌ ³ª´Â *NIX
Ä¿ÇǴнº
½Ã½ºÅÛ/³×Æ®¿÷/º¸¾ÈÀ» ´Ù·ç´Â °÷
 FAQFAQ   °Ë»ö°Ë»ö   ¸â¹ö¸®½ºÆ®¸â¹ö¸®½ºÆ®   »ç¿ëÀÚ ±×·ì»ç¿ëÀÚ ±×·ì   »ç¿ëÀÚ µî·ÏÇϱâ»ç¿ëÀÚ µî·ÏÇϱâ 
 °³ÀÎ Á¤º¸°³ÀÎ Á¤º¸   ºñ°ø°³ ¸Þ½ÃÁö¸¦ È®ÀÎÇÏ·Á¸é ·Î±×ÀÎÇϽʽÿÀºñ°ø°³ ¸Þ½ÃÁö¸¦ È®ÀÎÇÏ·Á¸é ·Î±×ÀÎÇϽʽÿÀ   ·Î±×Àηα×ÀΠ

°¡ÀÔ¾øÀÌ ´©±¸³ª ±ÛÀ» ¾µ ¼ö ÀÖ½À´Ï´Ù. °øÁö»çÇ׿¡ ´ëÇÑ ´ñ±Û±îÁöµµ..




BBS >> ¼³Ä¡, ¿î¿µ Q&A | ³×Æ®¿÷, º¸¾È Q&A | ÀÏ¹Ý Q&A || Á¤º¸¸¶´ç | AWS || ÀÚÀ¯°Ô½ÃÆÇ | ±¸Àα¸Á÷ || °øÁö»çÇ× | ÀÇ°ßÁ¦½Ã
ºí·Ï µð¹ÙÀ̽º µå¶óÀ̹ö¿Í sys_call¿¡¼­¿ä..

 
±Û ¾²±â   ´äº¯ ´Þ±â    Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ °Ô½ÃÆÇ À妽º -> *NIX ÀϹÝ
ÀÌÀü ÁÖÁ¦ º¸±â :: ´ÙÀ½ ÁÖÁ¦ º¸±â  
±Û¾´ÀÌ ¸Þ½ÃÁö
dukedrum
¼Õ´Ô





¿Ã¸®±â¿Ã·ÁÁü: 2007.10.09 È­, 1:20 pm    ÁÖÁ¦: ºí·Ï µð¹ÙÀ̽º µå¶óÀ̹ö¿Í sys_call¿¡¼­¿ä.. Àοë°ú ÇÔ²² ´äº¯

¾Æ..¿äÁò ·¥µð½ºÅ© ¿¹Á¦¸¦ º¯ÇüÇؼ­ ÇÁ·Î±×·¥ Â¥º¸·Á´Âµ¥... Á¦°¡ Ä¿³Î¿¡ ´ëÇØ
Àß ¸ô¶ó¼­ ±×·±°ÇÁö ¿øÀÎ ¸ð¸¦ ¿¡·¯°¡ ¹ß»ýÇϳ׿ä...

IT EXPERT Ã¥Áß¿¡ ¸®´ª½º Ä¿³Î ÇÁ·Î±×·¡¹ÖÀ̳ª µð¹ÙÀ̽º µå¶óÀ̹ö Ã¥¿¡ ³ª¿À´Â
·¥µð½ºÅ© ¿¹Á¦¸¦ º¯Çü ÇÏ·Á°í ÇÕ´Ï´Ù.

·¥µð½ºÅ©´Â ¸Þ¸ð¸®¿¡ vmallocÀ¸·Î °ø°£À» ÇÒ´çÇØÁÖ°í make_request¸¦ ÅëÇÏ¿©
ÇØ´ç ÀÛ¾÷(read,write µî..)À» ¼öÇà ÇØÁִµ¥¿ä..

Àú´Â ¸Þ¸ð¸® °ø°£ÀÌ ¾Æ´Ñ User¿µ¿ªÀÇ ÆÄÀÏÀ» OpenÇÏ¿© ¸Þ¸ð¸® ´ë½Å ±×°÷¿¡ ÀúÀåÀ» ÇÏ·Á ÇÕ´Ï´Ù.

ÇöÀç sys_call_tableÀ» ã¾Æ¼­ ÆÄÀÏ¿¡ open,read,write,close,lseek±îÁö ÀüºÎ ´Ù
µÇ°íÀÖ´Â »óÅÂÀÔ´Ï´Ù.

¼Ò½º¸¦ Á¦°¡ »ý°¢ Çѵ¥·Î º¯°æ ÇÏ¿© ½ÇÇàÇß´õ´Ï mke2fs·Î Æ÷¸äÇÏ¿©
ÆÄÀÏÀÇ ¿ë·®ÀÌ 4MB·Î ¹Ù²î°í mount±îÁö ¼º°øÀ» Çß½À´Ï´Ù.

±×·±µ¥ mountÀÌÈÄ¿¡ ls³ª mv, cp µîµî ¹º°¡ ÀÛ¾÷À» ¼öÇàÇÏ·Á°í Çϸé ÇØ´ç Å͹̳ÎÀÌ »¸´Â Çö»óÀÌ ³ª³×¿ä..¤Ð¤Ð

ºÐ¸í memory¿µ¿ª¿¡ ÀߵǴø ¼Ò½º...
ÃßÃøÀº make_request¿Í syscall(»ç¿ëÀÚ¿µ¿ª)°£ÀÇ ¹®Á¦°¡ ¾Æ´Ò±î ÇÏ´Â »ý°¢ÀÌ
µé±ä ÇÏÁö¸¸... ¶Ñ·ÈÇÑ ¿øÀÎÀ» ¸øã°í ÀÖ½À´Ï´Ù..

¹Ø¿¡ Áß¿ä ºÎºÐ(make_request)ÀÇ ¼Ò½º¸¦ ¿Ã¸³´Ï´Ù.
°í¼ö´ÔµéÀÇ Á¶¾ð ºÎŹÇÕ´Ï´Ù...¤Ð¤Ð(¹ú½á ÀÌ°É·Î 3ÁÖ° °í»ý..)

///////////ÆĶõ»ö ºÎºÐÀº ±âÁ¸ÀÇ ¼Ò½º,³ì»öÀº Á¦°¡ º¯°æÇÑ ¼Ò½º///////////

static int vrd_make_request(request_queue_t * q, int rw, struct buffer_head *sbh)
{
unsigned int minor;
// char *pData; // ¸Þ¸ð¸®ÀÇ À§Ä¡¸¦ ÀúÀåÇÒ Æ÷ÀÎÅͺ¯¼ö /**/
int nFileDesc = 0; //OpenµÈ ÆÄÀÏÀÇ µð½ºÅ©¸³ÅÍ ÀúÀå
int nFilePointer = 0; // lseek·Î À̵¿ ½Ãų ÆÄÀÏÀÇ Æ÷ÀÎÅÍ À̵¿°ª ÀúÀå
mm_segment_t old_fs; //

old_fs = get_fs(); // ÇöÀçÀÇ ¹üÀ§ ÀúÀå
set_fs(KERNEL_DS); // Ä¿³Î ¿µ¿ªÀ¸·Î ¹üÀ§ ¼ÂÆÃ

nFileDesc = fn("disk.dsk",O_RDWR);
// disk.dsk ÆÄÀÏÀ» ÀÐ°í ¾²±â ±ÇÇÑÀ¸·Î Open(sys_call)


minor = MINOR(sbh->b_rdev); // ºÎ¹øÈ£ ¾ò±â

if( minor >= VRD_MAX_DEVICES ) goto fail; // ºÎ¹øÈ£ÀÇ °ªÀÌ ÃÖ´ë ÀåÄ¡ ¼öº¸´Ù Å©¸é ¿¡·¯ Ç¥½Ã
if( ( (sbh->b_rsector*VRD_SECTOR_SIZE) + sbh->b_size ) >= VRD_SIZE ) goto fail;
// ó¸®ÇÏ´Â µð¹ÙÀ̽º¿¡ ´ëÇÑ Á¤º¸°¡ ÁöÁ¤µÈ Å©±â¸¦ ÃÊ°úÇÏ¸é ¿¡·¯

/* Memory Pointer */
//pData = vdisk[minor] + (sbh->b_rsector*VRD_SECTOR_SIZE);
// ÀúÀå½Ãų ¸Þ¸ð¸®ÀÇ À§Ä¡¸¦ ¹Þ¾Æ¿È

nFilePointer = sbh->b_rsector*VRD_SECTOR_SIZE;
// µ¥ÀÌÅ͸¦ ó¸®ÇÒ ÆÄÀÏÀÇ À§Ä¡ ¹Þ¾Æ¿È


switch(rw)
{
case READA :
case READ : printk("Read lsk is %d\t",lsk(nFileDesc,nFilePointer, 0));
// disk.dsk ÆÄÀÏ ³»¿¡¼­ µ¥ÀÌÅ͸¦ ó¸®ÇÒ À§Ä¡·Î nFilePointer¸¸Å­ À̵¿
printk("<< Read file Num is %d >>\n",rn(nFileDesc,sbh->b_data , sbh->b_size));
// lseek·Î À̵¿ÇÑ À§Ä¡¿¡¼­ b_size ¸¸Å­ ÀÐ¾î ¿È

//memcpy(sbh->b_data, pData, sbh->b_size); // ¸Þ¸ð¸® ¿µ¿ª¿¡¼­ Àоî¿È

break;

case WRITE :
refile_buffer(sbh); // ÇØ´ç ¹öÆÛÀÇ »óŸ¦ È®ÀÎÇؼ­ LRU¸®½ºÆ®¿¡¼­ ¹öÆÛ Çì´õÀÇ Ãß°¡/Á¦°Å ¿©ºÎ¸¦ °áÁ¤

//memcpy(pData, sbh->b_data, sbh->b_size);

printk("Write lsk is %d\t",lsk(nFileDesc,nFilePointer, 0));
printk("<< write file Num is %d >>\n",wn(nFileDesc, sbh->b_data, sbh->b_size));


mark_buffer_uptodate(sbh, 1); // ÇØ´ç ¹öÆÛ°¡ º¯°æ µÇ¾úÀ¸¹Ç·Î ¾÷µ¥ÀÌÆ® Çؾߵȴٰí Ä¿³Î¿¡ ¾Ë¸²
break;
default : goto fail;
}
sbh->b_end_io(sbh,1); //Ä¿³Î¿¡ Á¤»óÀûÀ¸·Î Á¾·á µÇ¾úÀ½À» Å뺸

cls(nFileDesc); // ÆÄÀÏ ´Ý±â
set_fs(old_fs); // ¿ø·¡ »óÅ·Π¼ÂÆÃ


return 0;
fail:

cls(nFileDesc); // ÆÄÀÏ ´Ý±â
set_fs(old_fs); // ¿ø·¡ »óÅ·Π¼ÂÆÃ


buffer_IO_error(sbh); // Ä¿³Î¿¡ ¿äûÀÌ Á¤»óÀûÀ¸·Î 󸮵ÇÁö ¸øÇßÀ½À» Å뺸
return 0;
}

[/code]
À§·Î
ÀÌÀü ±Û Ç¥½Ã:   
±Û ¾²±â   ´äº¯ ´Þ±â    Ä¿ÇǴнº, ½Ã½ºÅÛ ¿£Áö´Ï¾îÀÇ ½°ÅÍ °Ô½ÃÆÇ À妽º -> *NIX ÀÏ¹Ý ½Ã°£´ë: GMT + 9 ½Ã°£(Çѱ¹)
ÆäÀÌÁö 1 Áß 1

 
°Ç³Ê¶Ù±â:  
»õ·Î¿î ÁÖÁ¦¸¦ ¿Ã¸± ¼ö ÀÖ½À´Ï´Ù
´ä±ÛÀ» ¿Ã¸± ¼ö ÀÖ½À´Ï´Ù
ÁÖÁ¦¸¦ ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù
¿Ã¸° ±ÛÀ» »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù
ÅõÇ¥¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù


Powered by phpBB © 2001, 2005 phpBB Group