BBSˮľÇ廪վ¡Ã¾«»ªÇø

·¢ÐÅÈË: coolzhang (coolzhang), ÐÅÇø: Linux        
±ê  Ìâ: linux bible µÚ°ËÕ É豸Çý¶¯ 
·¢ÐÅÕ¾: BBS Ë®Ä¾Ç廪վ (Mon Oct 25 17:53:54 1999) 
 
·¢ÐÅÈË: coolzhang (coolzhang), ÐÅÇø: UNIX 
±ê  Ìâ: linux bible µÚ°ËÕ É豸Çý¶¯ 
·¢ÐÅÕ¾: Î人°×ÔÆ»Æº×Õ¾ (Mon Oct 25 16:10:33 1999), Õ¾ÄÚÐżþ 
µÚ°ËÕ É豸Çý¶¯ 
²Ù×÷ϵͳµÄÄ¿µÄÖ®Ò»¾ÍÊǽ«ÏµÍ³Ó²¼þÉ豸ϸ½Ú´ÓÓû§ÊÓÏßÖÐÒþ²ØÆðÀ´¡£ÀýÈç 
ÐéÄâÎļþϵͳ¶Ô¸÷ÖÖÀàÐÍÒѰ²×°µÄÎļþϵͳÌṩÁËͳһµÄÊÓͼ¶øÆÁ±ÎÁ˾ßÌå 
µ×²ãϸ½Ú¡£±¾Õ½«ÃèÐðLinuxºËÐĶÔϵͳÖÐÎïÀíÉ豸µÄ¹ÜÀí¡£ 
CPU²¢²»ÊÇϵͳÖÐΨһµÄÖÇÄÜÉ豸£¬Ã¿¸öÎïÀíÉ豸¶¼ÓµÓÐ×Ô¼ºµÄ¿ØÖÆÆ÷¡£¼ü 
ÅÌ¡¢Êó±êºÍ´®ÐпÚÓÉÒ»¸ö¸ß¼¶I/OоƬͳһ¹ÜÀí£¬IDE¿ØÖÆÆ÷¿ØÖÆIDEÓ²Å̶ø 
SCSI¿ØÖÆÆ÷¿ØÖÆSCSIÓ²Å̵ȵȡ£Ã¿¸öÓ²¼þ¿ØÖÆÆ÷¶¼Óи÷×ԵĿØÖƺÍ״̬¼Ä´æ 
Æ÷£¨CSR£©²¢ÇÒ¸÷²»Ïàͬ¡£ÀýÈçAdaptec 2940 SCSI¿ØÖÆÆ÷µÄCSRÓëNCR 810 
SCSI¿ØÖÆÆ÷ÍêÈ«²»Ò»Ñù¡£ÕâЩCSR±»ÓÃÀ´Æô¶¯ºÍÍ£Ö¹£¬³õʼ»¯É豸¼°¶ÔÉ豸 
½øÐÐÕï¶Ï¡£ÔÚLinuxÖйÜÀíÓ²¼þÉ豸¿ØÖÆÆ÷µÄ´úÂ벢ûÓзÅÖÃÔÚÿ¸öÓ¦Óó̠
ÐòÖжøÊÇÓÉÄÚºËͳһ¹ÜÀí¡£ÕâЩ´¦ÀíºÍ¹ÜÀíÓ²¼þ¿ØÖÆÆ÷µÄÈí¼þ¾ÍÊÇÉ豸Çý¶¯¡£ 
LinuxºËÐÄÉ豸Çý¶¯ÊÇÒ»×éÔËÐÐÔÚÌØÈ¨¼¶ÉϵÄÄÚ´æ×¤Áôµ×²ãÓ²¼þ´¦Àí¹²Ïí¿â¡£ 
ÕýÊÇËüÃǸºÔð¹ÜÀí¸÷¸öÉ豸¡£ 
É豸Çý¶¯µÄÒ»¸ö»ù±¾ÌØÕ÷ÊÇÉ豸´¦ÀíµÄ³éÏó¸ÅÄî¡£ËùÓÐÓ²¼þÉ豸¶¼±»¿´³ÉÆÕ 
ͨÎļþ£»¿ÉÒÔͨ¹ýºÍ²Ù×ÝÆÕͨÎļþÏàͬµÄ±ê׼ϵͳµ÷ÓÃÀ´´ò¿ª¡¢¹Ø±Õ¡¢¶ÁÈ¡ 
ºÍдÈëÉ豸¡£ÏµÍ³ÖÐÿ¸öÉ豸¶¼ÓÃÒ»ÖÖÌØÊâµÄÉ豸Ïà¹ØÎļþÀ´±íʾ(device 
special file)£¬ÀýÈçϵͳÖеÚÒ»¸öIDEÓ²Å̱»±íʾ³É/dev/hda¡£¿é£¨´ÅÅÌ£© 
É豸ºÍ×Ö·ûÉ豸µÄÉ豸Ïà¹ØÎļþ¿ÉÒÔͨ¹ýmknodÃüÁîÀ´´´½¨£¬²¢Ê¹ÓÃÖ÷´ÓÉ豸 
ºÅÀ´ÃèÐð´ËÉ豸¡£ÍøÂçÉ豸ҲÓÃÉ豸Ïà¹ØÎļþÀ´±íʾ£¬µ«LinuxѰÕҺͳõʼ»¯ 
ÍøÂçÉ豸ʱ²Å½¨Á¢ÕâÖÖÎļþ¡£ÓÉͬһ¸öÉ豸Çý¶¯¿ØÖƵÄËùÓÐÉ豸¾ßÓÐÏàͬµÄ 
Ö÷É豸ºÅ¡£´ÓÉ豸ºÅÔò±»ÓÃÀ´Çø·Ö¾ßÓÐÏàͬÖ÷É豸ºÅÇÒÓÉÏàͬÉ豸Çý¶¯¿ØÖÆ 
µÄ²»Í¬É豸¡£ÀýÈçÖ÷IDEÓ²Å̵Äÿ¸ö·ÖÇøµÄ´ÓÉ豸ºÅ¶¼²»Ïàͬ¡£Èç/dev/hda2±í 
ʾÖ÷IDEÓ²Å̵ÄÖ÷É豸ºÅΪ3¶ø´ÓÉ豸ºÅΪ2¡£Linuxͨ¹ýʹÓÃÖ÷´ÓÉ豸ºÅ½«°üº¬ 
ÔÚϵͳµ÷ÓÃÖеģ¨È罫һ¸öÎļþϵͳmountµ½Ò»¸ö¿éÉ豸£©É豸Ïà¹ØÎļþÓ³Éä 
µ½É豸µÄÉ豸Çý¶¯ÒÔ¼°´óÁ¿ÏµÍ³±í¸ñÖУ¬Èç×Ö·ûÉ豸±í£¬chrdevs¡£ 
LinuxÖ§³ÖÈýÀàÓ²¼þÉ豸£º×Ö·û¡¢¿é¼°ÍøÂçÉ豸¡£×Ö·ûÉ豸ָÄÇЩÎÞÐ軺³åÖ± 
½Ó¶ÁдµÄÉ豸£¬ÈçϵͳµÄ´®¿ÚÉ豸/dev/cua0ºÍ/dev/cua1¡£¿éÉ豸Ôò½öÄÜÒÔ¿é 
Ϊµ¥Î»¶Áд£¬µäÐ͵Ŀé´óСΪ512»ò1024×Ö½Ú¡£¿éÉ豸µÄ´æÈ¡ÊÇͨ¹ýbuffer 
cacheÀ´½øÐв¢ÇÒ¿ÉÒÔ½øÐÐËæ»ú·ÃÎÊ£¬¼´²»¹Ü¿éλÓÚÉ豸Öк䦶¼¿ÉÒÔ¶ÔÆä½ø 
ÐжÁд¡£¿éÉ豸¿ÉÒÔͨ¹ýÆäÉ豸Ïà¹ØÎļþ½øÐзÃÎÊ£¬µ«¸üΪƽ³£µÄ·ÃÎÊ·½·¨ÊÇ 
ͨ¹ýÎļþϵͳ¡£Ö»ÓпéÉ豸²ÅÄÜÖ§³Ö¿É°²×°Îļþϵͳ¡£ÍøÂçÉ豸¿ÉÒÔͨ¹ýBSD 
Ì×½Ó¿Ú·ÃÎÊ£¬ÎÒÃǽ«ÔÚÍøÂçÒ»ÕÂÖÐÌÖÂÛÍøÂç×Óϵͳ¡£ 
LinuxºËÐÄÖÐËä´æÔÚÐí¶à²»Í¬µÄÉ豸Çý¶¯µ«ËüÃǾßÓÐһЩ¹²ÐÔ£º 
ºËÐÄ´úÂë 
     É豸Çý¶¯ÊǺËÐĵÄÒ»²¿·Ö£¬ÏóºËÐÄÖÐÆäËü´úÂëÒ»Ñù£¬³ö´í½«µ¼ÖÂϵͳµÄÑÏ 
     ÖØËðÉË¡£Ò»¸ö±àÐ´Ææ²îµÄÉ豸Çý¶¯ÉõÖÁÄÜʹϵͳ±ÀÀ£²¢µ¼ÖÂÎļþϵͳµÄÆÆ 
     »µºÍÊý¾Ý¶ªÊ§¡£ 
ºËÐĽӿڠ
     É豸Çý¶¯±ØÐëΪLinuxºËÐÄ»òÕ߯ä´ÓÊô×ÓϵͳÌṩһ¸ö±ê×¼½Ó¿Ú¡£ÀýÈçÖÕ 
     ¶ËÇý¶¯ÎªLinuxºËÐÄÌṩÁËÒ»¸öÎļþI/O½Ó¿Ú¶øSCSIÉ豸Çý¶¯ÎªSCSI×Óϵͳ 
     ÌṩÁËÒ»¸öSCSIÉ豸½Ó¿Ú£¬Í¬Ê±´Ë×ÓϵͳΪºËÐÄÌṩÁËÎļþI/OºÍbuffer 
     cache½Ó¿Ú¡£ 
ºËÐÄ»úÖÆÓë·þÎñ 
     É豸Çý¶¯¿ÉÒÔʹÓñê×¼µÄºËÐÄ·þÎñÈçÄÚ´æ·ÖÅä¡¢ÖжϷ¢Ëͺ͵ȴý¶ÓÁеȵȡ£ 
¶¯Ì¬¿É¼ÓÔØ 
     ¶àÊýLinuxÉ豸Çý¶¯¿ÉÒÔÔÚºËÐÄÄ£¿é·¢³ö¼ÓÔØÇëÇóʱ¼ÓÔØ£¬Í¬Ê±ÔÚ²»ÔÙʹÓà
     Ê±Ð¶ÔØ¡£ÕâÑùºËÐÄÄÜÓÐЧµØÀûÓÃϵͳ×ÊÔ´¡£ 
¿ÉÅäÖà
     LinuxÉ豸Çý¶¯¿ÉÒÔÁ¬½Óµ½ºËÐÄÖС£µ±ºËÐı»±àÒëʱ£¬ÄÄЩºËÐı»Á¬ÈëºËÐÄ 
     ÊÇ¿ÉÅäÖõġ£ 
¶¯Ì¬ÐÔ 
     µ±ÏµÍ³Æô¶¯¼°É豸Çý¶¯³õʼ»¯Ê±½«²éÕÒËüËù¿ØÖƵÄÓ²¼þÉ豸¡£Èç¹ûij¸öÉè 
     ±¸µÄÇý¶¯ÎªÒ»¸ö¿Õ¹ý³Ì²¢²»»áÓÐʲôÎÊÌâ¡£´Ëʱ´ËÉ豸Çý¶¯½ö½öÊÇÒ»¸öÈßÓà 
     µÄ³ÌÐò£¬Ëü³ýÁË»áÕ¼ÓÃÉÙÁ¿ÏµÍ³ÄÚ´æÍâ²»»á¶ÔϵͳÔì³ÉʲôΣº¦¡£ 
8.1  ÂÖѯÓëÖжϠ
É豸±»Ö´ÐÐij¸öÃüÁîʱ£¬Èç¡°½«¶ÁÈ¡´ÅÍ·ÒÆ¶¯µ½ÈíÅ̵ĵÚ42ÉÈÇøÉÏ¡±£¬É豸Çý 
¶¯¿ÉÒÔ´ÓÂÖѯ·½Ê½ºÍÖжϷ½Ê½ÖÐÑ¡ÔñÒ»ÖÖÒÔÅжÏÉ豸ÊÇ·ñÒѾ­Íê³É´ËÃüÁî¡£ 
ÂÖѯ·½Ê½Òâζ×ÅÐèÒª¾­³£¶ÁÈ¡É豸µÄ״̬£¬Ò»Ö±µ½É豸״̬±íÃ÷ÇëÇóÒѾ­Íê³É 
Ϊֹ¡£Èç¹ûÉ豸Çý¶¯±»Á¬½Ó½øÈëºËÐÄ£¬ÕâʱʹÓÃÂÖѯ·½Ê½½«»á´øÀ´ÔÖÄÑÐÔºó¹û£º 
ºËÐĽ«Ôڴ˹ý³ÌÖÐÎÞËùÊÂÊ£¬Ö±µ½É豸Íê³É´ËÇëÇó¡£µ«ÊÇÂÖѯÉ豸Çý¶¯¿ÉÒÔͨ 
¹ýʹÓÃϵͳ¶¨Ê±Æ÷£¬Ê¹ºËÐÄÖÜÆÚÐÔµ÷ÓÃÉ豸Çý¶¯ÖеÄij¸öÀý³ÌÀ´¼ì²éÉ豸״̬¡£ 
¶¨Ê±Æ÷¹ý³Ì¿ÉÒÔ¼ì²éÃüÁî״̬¼°LinuxÈíÅÌÇý¶¯µÄ¹¤×÷Çé¿ö¡£Ê¹Óö¨Ê±Æ÷ÊÇÂÖѯ 
·½Ê½ÖÐ×îºÃµÄÒ»ÖÖ£¬µ«¸üÓÐЧµÄ·½·¨ÊÇʹÓÃÖжϡ£ 
»ùÓÚÖжϵÄÉ豸Çý¶¯»áÔÚËüËù¿ØÖƵÄÓ²¼þÉ豸ÐèÒª·þÎñʱÒý·¢Ò»¸öÓ²¼þÖжϡ£ 
ÈçÒÔÌ«ÍøÉ豸Çý¶¯´ÓÍøÂçÉϽÓÊÕµ½Ò»¸öÒÔÌ«Êý¾Ý±¨Ê±¶¼½«ÒýÆðÖжϡ£LinuxºË 
ÐÄÐèÒª½«À´×ÔÓ²¼þÉ豸µÄÖжϴ«µÝµ½ÏàÓ¦µÄÉ豸Çý¶¯¡£Õâ¸ö¹ý³ÌÓÉÉ豸Çý¶¯Ïò 
ºËÐÄ×¢²áÆäʹÓõÄÖжÏÀ´Ð­ÖúÍê³É¡£´ËÖжϴ¦ÀíÀý³ÌµÄµØÖ·ºÍÖжϺŶ¼½«±»¼Ç 
¼ÏÂÀ´¡£ÔÚ/proc/interruptsÎļþÖÐÄã¿ÉÒÔ¿´µ½É豸Çý¶¯Ëù¶ÔÓ¦µÄÖжϺż°Àà 
ÐÍ£º 
 0:     727432   timer 
 1:      20534   keyboard 
 2:          0   cascade 
 3:      79691 + serial 
 4:      28258 + serial 
 5:          1   sound blaster 
11:      20868 + aic7xxx 
13:          1   math error 
14:        247 + ide0 
15:        170 + ide1 
¶ÔÖжÏ×ÊÔ´µÄÇëÇóÔÚÇý¶¯³õʼ»¯Ê±¾ÍÒѾ­Íê³É¡£×÷ΪIBM 
PCÌåϵ½á¹¹µÄÒŲú£¬ÏµÍ³ÖÐÓÐЩÖжÏÒѾ­¹Ì¶¨¡£ÀýÈçÈíÅÌ¿ØÖÆÆ÷×ÜÊÇʹÓÃÖжÏ6¡£ 
ÆäËüÖжϣ¬ÈçPCIÉ豸Öжϣ¬ÔÚÆô¶¯Ê±½øÐж¯Ì¬·ÖÅä¡£É豸Çý¶¯±ØÐëÔÚÈ¡µÃ¶Ô´Ë 
ÖжϵÄËùÓÐȨ֮ǰÕÒµ½ËüËù¿ØÖÆÉ豸µÄÖжϺţ¨IRQ£©¡£Linuxͨ¹ýÖ§³Ö±ê×¼µÄPCI 
BIOS»Øµ÷º¯ÊýÀ´È·¶¨ÏµÍ³ÖÐPCIÉ豸µÄÖжÏÐÅÏ¢£¬°üÀ¨ÆäIRQºÅ¡£ 
ÈçºÎ½«ÖжϷ¢Ë͸øCPU±¾ÉíÈ¡¾öÓÚÌåϵ½á¹¹£¬µ«ÊÇÔÚ¶àÊýÌåϵ½á¹¹ÖУ¬ÖжÏÒÔ 
Ò»ÖÖÌØÊâģʽ·¢ËÍͬʱ»¹½«×èֹϵͳÖÐÆäËüÖжϵIJúÉú¡£É豸Çý¶¯ÔÚÆäÖжϴ¦ 
Àí¹ý³ÌÖÐ×÷µÄÔ½ÉÙÔ½ºÃ£¬ÕâÑùLinuxºËÐĽ«ÄܺܿìµÄ´¦ÀíÍêÖжϲ¢·µ»ØÖжÏǰµÄ 
״̬ÖС£ÎªÁËÔÚ½ÓÊÕÖжÏʱÍê³É´óÁ¿¹¤×÷£¬É豸Çý¶¯±ØÐëÄܹ»Ê¹ÓúËÐĵĵײ㴦 
ÀíÀý³Ì»òÕßÈÎÎñ¶ÓÁÐÀ´¶ÔÒÔºóÐèÒªµ÷ÓõÄÄÇЩÀý³Ì½øÐÐÅŶӡ£ 
8.2  Ö±½ÓÄÚ´æ·ÃÎÊ (DMA) 
Êý¾ÝÁ¿±È½ÏÉÙʱ£¬Ê¹ÓÃÖжÏÇý¶¯É豸Çý¶¯³ÌÐòÄÜ˳ÀûµØÔÚÓ²¼þÉ豸ºÍÄÚ´æÖ® 
¼ä½»»»Êý¾Ý¡£ÀýÈç²¨ÌØÂÊΪ9600µÄmodem¿ÉÒÔÿºÁÃë´«ÊäÒ»¸ö×Ö·û¡£Èç¹ûÓ²¼þ 
É豸ÒýÆðÖжϺ͵÷ÓÃÉ豸Çý¶¯ÖжÏËùÏûºÄµÄÖжÏʱÑӱȽϴó£¨Èç2ºÁÃ룩Ôò 
ϵͳµÄ×ÛºÏÊý¾Ý´«ÊäÂÊ»áºÜµÍ¡£Ôò9600²¨ÌØÂÊmodemµÄÊý¾Ý´«ÊäÖ»ÄÜÀûÓÃ0.002% 
µÄCPU´¦Àíʱ¼ä¡£¸ßËÙÉ豸ÈçÓ²ÅÌ¿ØÖÆÆ÷»òÕßÒÔÌ«ÍøÉ豸Êý¾Ý´«ÊäÂʽ«¸ü¸ß¡£ 
SCSIÉ豸µÄÊý¾Ý´«ÊäÂʿɴﵽÿÃë40M×Ö½Ú¡£ 
Ö±½ÓÄÚ´æ´æÈ¡£¨DMA£©Êǽâ¾ö´ËÀàÎÊÌâµÄÓÐЧ·½·¨¡£DMA¿ØÖÆÆ÷¿ÉÒÔÔÚ²»ÊÜ´¦ 
ÀíÆ÷¸ÉÔ¤µÄÇé¿öÏÂÔÚÉ豸ºÍϵͳÄÚ´æÖ®¼ä¸ßËÙ´«ÊäÊý¾Ý¡£PC»úµÄISA DMA¿Ø 
ÖÆÆ÷ÓÐ8¸öDMAͨµÀ£¬ÆäÖÐÆß¸ö¿ÉÒÔÓÉÉ豸Çý¶¯Ê¹Óá£Ã¿¸öDMAͨµÀ¾ßÓÐÒ»¸ö 
16λµÄµØÖ·¼Ä´æÆ÷ºÍÒ»¸ö16λµÄ¼ÇÊý¼Ä´æÆ÷¡£ÎªÁ˳õʼ»¯Êý¾Ý´«Ê䣬É豸Çý 
¶¯½«ÉèÖÃDMAͨµÀµØÖ·ºÍ¼ÇÊý¼Ä´æÆ÷ÒÔÃèÐðÊý¾Ý´«Êä·½ÏòÒÔ¼°¶ÁдÀàÐÍ¡£È» 
ºó֪ͨÉ豸¿ÉÒÔÔÚÈκÎʱºòÆô¶¯DMA²Ù×÷¡£´«Êä½áÊøÊ±É豸½«ÖжÏPC¡£ÔÚ´« 
Êä¹ý³ÌÖÐCPU¿ÉÒÔתȥִÐÐÆäËûÈÎÎñ¡£ 
É豸Çý¶¯Ê¹ÓÃDMAʱ±ØÐëÊ®·ÖСÐÄ¡£Ê×ÏÈDMA¿ØÖÆÆ÷ûÓÐÈκÎÐéÄâÄÚ´æµÄ¸ÅÄ 
ËüÖ»´æÈ¡ÏµÍ³ÖеÄÎïÀíÄڴ档ͬʱÓÃ×÷DMA´«Ê仺³åµÄÄÚ´æ¿Õ¼ä±ØÐëÊÇÁ¬ÐøÎï 
ÀíÄÚ´æ¿é¡£ÕâÒâζ×Ų»ÄÜÔÚ½ø³ÌÐéÄâµØÖ·¿Õ¼äÄÚÖ±½ÓʹÓÃDMA¡£µ«ÊÇÄã¿ÉÒÔ½« 
½ø³ÌµÄÎïÀíÒ³Ãæ¼ÓËøÒÔ·ÀÖ¹ÔÚDMA²Ù×÷¹ý³ÌÖб»½»»»µ½½»»»É豸ÉÏÈ¥¡£ÁíÍâDMA 
¿ØÖÆÆ÷Ëù´æÈ¡ÎïÀíÄÚ´æÓÐÏÞ¡£DMAͨµÀµØÖ·¼Ä´æÆ÷´ú±íDMAµØÖ·µÄ¸ß16λ¶øÒ³Ãæ 
¼Ä´æÆ÷¼Ç¼µÄÊÇÆäÓà8λ¡£ËùÒÔDMAÇëÇó±»ÏÞÖÆµ½ÄÚ´æ×îµÍ16M×Ö½ÚÖС£ 
DMAͨµÀÊǷdz£Õä¹óµÄ×ÊÔ´£¬Ò»¹²²ÅÓÐ7¸ö²¢ÇÒ»¹²»Äܹ»ÔÚÉ豸Çý¶¯¼ä¹²Ïí¡£ 
ÓëÖжÏÒ»Ñù£¬É豸Çý¶¯±ØÐëÕÒµ½ËüÓ¦¸ÃʹÓÃÄǸöDMAͨµÀ¡£ÓÐЩÉ豸ʹÓù̠
¶¨µÄDMAͨµÀ¡£ÀýÈçÈíÅÌÉ豸×ÜʹÓÃDMAͨµÀ2¡£ÓÐʱÉ豸µÄDMAͨµÀ¿ÉÒÔÓÉÌø 
ÏßÀ´ÉèÖã¬Ðí¶àÒÔÌ«ÍøÉ豸ʹÓÃÕâÖÖ¼¼Êõ¡£Éè¼ÆÁé»îµÄÉ豸½«¸æËßϵͳËü½« 
ʹÓÃÄĸöDMAͨµÀ£¬´ËʱÉ豸Çý¶¯½öÐèÒª´ÓDMAͨµÀÖÐѡȡ¼´¿É¡£ 
Linuxͨ¹ýdma_chan£¨Ã¿¸öDMAͨµÀÒ»¸ö£©Êý×éÀ´¸ú×ÙDMAͨµÀµÄʹÓÃÇé¿ö¡£ 
dma_chan½á¹¹Öаüº¬ÓÐÁ½¸öÓò£¬Ò»¸öÊÇÖ¸Ïò´ËDMAͨµÀÓµÓÐÕßµÄÖ¸Õ룬ÁíÒ» 
¸öָʾDMAͨµÀÊÇ·ñÒѾ­±»·ÖÅä³öÈ¥¡£µ±ÇÃÈëcat/proc/dma´òÓ¡³öÀ´µÄ½á¹û 
¾ÍÊÇdma_chan½á¹¹Êý×é¡£ 
8.3  ÄÚ´æ 
É豸Çý¶¯±ØÐë½÷É÷ʹÓÃÄÚ´æ¡£ÓÉÓÚËüÊôÓÚºËÐÄ,ËùÒÔ²»ÄÜʹÓÃÐéÄâÄڴ档ϵ 
ͳ½ÓÊÕµ½ÖжÏÐźÅʱ»òµ÷¶Èµ×²ãÈÎÎñ¶ÓÁд¦Àí¹ý³Ìʱ£¬É豸Çý¶¯½«¿ªÊ¼ÔËÐУ¬ 
¶øµ±Ç°½ø³Ì»á·¢Éú¸Ä±ä¡£É豸Çý¶¯²»ÄÜÒÀÀµÓÚÈκÎÔËÐеÄÌØ¶¨½ø³Ì£¬¼´Ê¹µ± 
ǰÊÇΪ¸Ã½ø³Ì¹¤×÷¡£ÓëºËÐĵįäËü²¿·ÖÒ»Ñù£¬É豸Çý¶¯Ê¹ÓÃÊý¾Ý½á¹¹À´ÃèÐð 
ËüËù¿ØÖƵÄÉ豸¡£ÕâЩ½á¹¹±»É豸Çý¶¯´úÂëÒÔ¾²Ì¬·½Ê½·ÖÅ䣬µ«»áÔö´óºËÐÄ 
¶øÒýÆð¿Õ¼äµÄÀË·Ñ¡£¶àÊýÉ豸Çý¶¯Ê¹ÓúËÐÄÖзÇÒ³ÃæÄÚ´æÀ´´æ´¢Êý¾Ý¡£ 
LinuxΪÉ豸Çý¶¯ÌṩÁËÒ»×éºËÐÄÄÚ´æ·ÖÅäÓë»ØÊÕ¹ý³Ì¡£ºËÐÄÄÚ´æÒÔ2µÄ´ÎÃÝ 
´óСµÄ¿éÀ´·ÖÅä¡£Èç512»ò128×Ö½Ú£¬´Ëʱ¼´Ê¹É豸Çý¶¯µÄÐèÇóСÓÚÕâ¸öÊýÁ¿ 
Ò²»á·ÖÅäÕâô¶à¡£ËùÒÔÉ豸Çý¶¯µÄÄÚ´æ·ÖÅäÇëÇó¿ÉµÃµ½ÒÔ¿é´óСΪ±ß½çµÄÄÚ 
´æ¡£ÕâÑùºËÐĽøÐпÕÏпé×éºÏ¸ü¼ÓÈÝÒס£ 
ÇëÇó·ÖÅäºËÐÄÄÚ´æÊ±LinuxÐèÒªÍê³ÉÐí¶à¶îÍâµÄ¹¤×÷¡£Èç¹ûϵͳÖпÕÏÐÄÚ´æÊý 
Á¿½ÏÉÙ£¬Ôò¿ÉÄÜÐèÒª¶ªÆúЩÎïÀíÒ³Ãæ»ò½«ÆäдÈë½»»»É豸¡£Ò»°ãÇé¿öÏÂLinux 
½«¹ÒÆðÇëÇóÕß²¢½«´Ë½ø³Ì·ÅÖõ½µÈ´ý¶ÓÁÐÖÐÖ±µ½ÏµÍ³ÖÐÓÐ×ã¹»µÄÎïÀíÄÚ´æÎªÖ¹¡£ 
²»ÊÇËùÓеÄÉ豸Çý¶¯£¨»òÕßÕæÕýµÄLinuxºËÐÄ´úÂ룩¶¼»á¾­ÀúÕâ¸ö¹ý³Ì£¬ËùÒÔ 
Èç·ÖÅäºËÐÄÄÚ´æµÄÇëÇó²»ÄÜÁ¢¿ÌµÃµ½Âú×ã,Ôò´ËÇëÇó¿ÉÄÜ»áʧ°Ü¡£Èç¹ûÉ豸Çý 
¶¯Ï£ÍûÔÚ´ËÄÚ´æÖнøÐÐDMA£¬ÄÇôËü±ØÐ뽫´ËÄÚ´æÉèÖÃΪDMAʹÄܵġ£ÕâÒ²ÊÇΪ 
ʲôÊÇLinuxºËÐĶø²»ÊÇÉ豸Çý¶¯ÐèÒªÁ˽âϵͳÖеÄDMAʹÄÜÄÚ´æµÄÔ­Òò¡£ 
8.4  É豸Çý¶¯ÓëºËÐĵĽӿڠ
LinuxºËÐÄÓëÉ豸Çý¶¯Ö®¼ä±ØÐëÓÐÒ»¸öÒÔ±ê×¼·½Ê½½øÐл¥²Ù×÷µÄ½Ó¿Ú¡£Ã¿Ò»Àà 
É豸Çý¶¯£º×Ö·ûÉ豸¡¢¿éÉ豸¼°ÍøÂçÉ豸¶¼ÌṩÁËͨÓýӿÚÒÔ±ãÔÚÐèҪʱΪºË 
ÐÄÌṩ·þÎñ¡£ÕâÖÖͨÓýӿÚʹµÃºËÐÄ¿ÉÒÔÒÔÏàͬµÄ·½Ê½À´¶Ô´ý²»Í¬µÄÉ豸¼°Éè 
±¸Çý¶¯¡£ÈçSCSIºÍIDEÓ²Å̵ÄÇø±ðºÜ´óµ«Linux¶ÔËüÃÇʹÓÃÏàͬµÄ½Ó¿Ú¡£ 
Linux¶¯Ì¬ÐÔºÜÇ¿¡£Ã¿´ÎLinuxºËÐÄÆô¶¯Ê±ÈçÓöµ½²»Í¬µÄÎïÀíÉ豸½«ÐèÒª²»Í¬µÄ 
ÎïÀíÉ豸Çý¶¯¡£LinuxÔÊÐíͨ¹ýÅäÖýű¾ÔÚºËÐÄÖØ½¨Ê±½«É豸Çý¶¯°üº¬ÔÚÄÚ¡£Éè 
±¸Çý¶¯ÔÚÆô¶¯³õʼ»¯Ê±¿ÉÄܻᷢÏÖϵͳÖиù±¾Ã»ÓÐÈκÎÓ²¼þÐèÒª¿ØÖÆ¡£ÆäËüÉè 
±¸Çý¶¯¿ÉÒÔÔÚ±ØÒªÊ±×÷ΪºËÐÄÄ£¿é¶¯Ì¬¼ÓÔØµ½¡£ÎªÁË´¦ÀíÉ豸Çý¶¯µÄ¶¯Ì¬ÊôÐÔ£¬ 
É豸Çý¶¯ÔÚ³õʼ»¯Ê±½«Æä×¢²áµ½ºËÐÄÖÐÈ¥¡£Linuxά»¤×ÅÒÑ×¢²áÉ豸Çý¶¯±í×÷Ϊ 
ºÍÉ豸Çý¶¯µÄ½Ó¿Ú¡£ÕâЩ±íÖаüº¬Ö§³Ö´ËÀàÉ豸Àý³ÌµÄÖ¸ÕëºÍÏà¹ØÐÅÏ¢¡£ 
8.4.1  ×Ö·ûÉ豸 
×Ö·ûÉ豸ÊÇLinuxÉ豸ÖÐ×î¼òµ¥µÄÒ»ÖÖ¡£Ó¦ÓóÌÐò¿ÉÒԺʹæÈ¡ÎļþÏàͬµÄ 
ϵͳµ÷ÓÃÀ´´ò¿ª¡¢¶Áд¼°¹Ø±ÕËü¡£¼´Ê¹´ËÉ豸Êǽ«LinuxϵͳÁ¬½Óµ½ÍøÂç 
ÖеÄPPPºǫ́½ø³ÌµÄmodemÒ²ÊÇÈç´Ë¡£×Ö·ûÉ豸³õʼ»¯Ê±£¬ËüµÄÉ豸Çý¶¯Í¨ 
¹ýÔÚdevice_struct½á¹¹µÄchrdevsÊý×éÖÐÌí¼ÓÒ»¸öÈë¿ÚÀ´½«Æä×¢²áµ½Linux 
ºËÐÄÉÏ¡£É豸µÄÖ÷É豸±êÖ¾·ûÓÃÀ´¶Ô´ËÊý×é½øÐÐË÷Òý£¨Èç¶ÔttyÉ豸µÄË÷Òý 
4£©¡£É豸µÄÖ÷É豸±êÖ¾·ûÊǹ̶¨µÄ¡£ 
chrdevsÊý×éÿ¸öÈë¿ÚÖеÄdevice_structÊý¾Ý½á¹¹°üº¬Á½¸öÔªËØ£»Ò»¸öÖ¸ 
ÏòÒÑ×¢²áµÄÉ豸Çý¶¯Ãû³Æ£¬ÁíÒ»¸öÔòÊÇÖ¸ÏòÒ»×éÎļþ²Ù×÷Ö¸Õë¡£ËüÃÇÊÇλ 
ÓÚ´Ë×Ö·ûÉ豸Çý¶¯ÄÚ²¿µÄÎļþ²Ù×÷Àý³ÌµÄµØÖ·Ö¸Õ룬ÓÃÀ´´¦ÀíÏà¹ØµÄÎļþ 
²Ù×÷Èç´ò¿ª¡¢¶ÁдÓë¹Ø±Õ¡£/proc/devicesÖÐ×Ö·ûÉ豸µÄÄÚÈÝÀ´×Ôchrdevs 
Êý×é¡£ 
µ±´ò¿ª´ú±í×Ö·ûÉ豸µÄ×Ö·ûÌØÊâÎļþʱ£¨Èç/dev/cua0£©£¬ºËÐıØÐë×÷ºÃ×¼ 
±¸ÒÔ±ãµ÷ÓÃÏàÓ¦×Ö·ûÉ豸Çý¶¯µÄÎļþ²Ù×÷Àý³Ì¡£ÓëÆÕͨµÄĿ¼ºÍÎļþÒ»Ñù£¬ 
ÿ¸ö×Ö·ûÌØÊâÎļþÓÃÒ»¸öVFS½Úµã±íʾ¡£Ã¿¸ö×Ö·ûÌØÊâÎļþʹÓõÄVFS inode 
ºÍËùÓÐÉè±¸ÌØÊâÎļþÒ»Ñù£¬°üº¬×ÅÉ豸µÄÖ÷´Ó±êÖ¾·û¡£Õâ¸öVFS inodeÓɵנ
²ãµÄÎļþϵͳÀ´½¨Á¢£¨±ÈÈçEXT2£©£¬ÆäÐÅÏ¢À´Ô´ÓÚÉ豸Ïà¹ØÎļþÃû³ÆËùÔÚÎÄ 
¼þϵͳ¡£ 
ÿ¸öVFS inodeºÍÒ»×éÎļþ²Ù×÷Ïà¹ØÁª,ËüÃǸù¾Ýinode´ú±íµÄÎļþϵͳ¶Ô 
Ïó±ä»¯¶ø²»Í¬¡£µ±´´½¨Ò»¸ö´ú±í×Ö·ûÏà¹ØÎļþµÄVFS inodeʱ£¬ÆäÎļþ²Ù 
×÷±»ÉèÖÃΪȱʡµÄ×Ö·ûÉ豸²Ù×÷¡£ 
×Ö·ûÉ豸ֻÓÐÒ»¸öÎļþ²Ù×÷:´ò¿ªÎļþ²Ù×÷¡£µ±Ó¦Óôò¿ª×Ö·ûÌØÊâÎļþʱ£¬ 
ͨÓÃÎļþ´ò¿ª²Ù×÷ʹÓÃÉ豸µÄÖ÷±êÖ¾·ûÀ´Ë÷Òý´ËchrdevsÊý×飬ÒÔ±ãµÃµ½ÄÇ 
ЩÎļþ²Ù×÷º¯ÊýÖ¸Õ롣ͬʱ½¨Á¢ÆðÃèÐð´Ë×Ö·ûÌØÊâÎļþµÄfile½á¹¹,ʹÆäÎÄ 
¼þ²Ù×÷Ö¸ÕëÖ¸Ïò´ËÉ豸Çý¶¯ÖеÄÎļþ²Ù×÷Ö¸Õ뼯ºÏ¡£ÕâÑùËùÓÐÓ¦ÓöÔËü½øÐР
µÄÎļþ²Ù×÷¶¼±»Ó³Éäµ½´Ë×Ö·ûÉ豸µÄÎļþ²Ù×÷¼¯ºÏÉÏ¡£ 
8.4.2  ¿éÉ豸 
¿éÉ豸Ҳ֧³ÖÒÔÎļþ·½Ê½·ÃÎÊ¡£ÏµÍ³¶Ô¿éÉè±¸ÌØÊâÎļþÌṩÁ˷dz£ÀàËÆÓÚ 
×Ö·ûÌØÊâÎļþµÄÎļþ²Ù×÷»úÖÆ¡£LinuxÔÚblkdevsÊý×éÖÐά»¤ËùÓÐÒÑ×¢²áµÄ 
¿éÉ豸¡£ÏóchrdevsÊý×éÒ»Ñù£¬blkdevsҲʹÓÃÉ豸µÄÖ÷É豸ºÅ½øÐÐË÷Òý¡£ 
ÆäÈë¿ÚÒ²ÊÇdevice_struct½á¹¹¡£ºÍ×Ö·ûÉ豸²»Í¬µÄÊÇϵͳÓм¸Àà¿éÉ豸¡£ 
SCSIÉ豸ÊÇÒ»Àà¶øIDEÉ豸ÔòÊÇÁíÍâÒ»Àà¡£ËüÃǽ«ÒÔ¸÷×ÔÀà±ðµÇ¼Çµ½Linux 
ºËÐÄÖв¢ÎªºËÐÄÌṩÎļþ²Ù×÷¹¦ÄÜ¡£Ä³Àà¿éÉ豸µÄÉ豸Çý¶¯Îª´ËÀàÐÍÉ豸 
ÌṩÁËÀà±ðÏà¹ØµÄ½Ó¿Ú¡£ÈçSCSIÉ豸Çý¶¯±ØÐëΪSCSI×ÓϵͳÌṩ½Ó¿ÚÒÔ±ã 
SCSI×ÓϵͳÄÜÓÃËüÀ´ÎªºËÐÄÌṩ¶Ô´ËÉ豸µÄÎļþ²Ù×÷¡£ 
ºÍÆÕͨÎļþ²Ù×÷½Ó¿ÚÒ»Ñù, Ã¿¸ö¿éÉ豸Çý¶¯±ØÐëΪbuffer 
cacheÌṩ½Ó¿Ú¡£Ã¿¸ö¿éÉ豸Çý¶¯½«Ìî³äÆäÔÚblk_devÊý×éÖеÄblk_dev_struct 
½á¹¹Èë¿Ú¡£Êý×éµÄË÷ÒýÖµ»¹ÊÇ´ËÉ豸µÄÖ÷É豸ºÅ¡£Õâ¸öblk_dev_struct½á 
¹¹°üº¬ÇëÇó¹ý³ÌµÄµØÖ·ÒÔ¼°Ö¸ÏòÇëÇóÊý¾Ý½á¹¹Á´±íµÄÖ¸Õ룬ÿ¸ö´ú±íÒ»¸ö 
´ÓbuffercacheÖÐÀ´ÈÃÉ豸½øÐÐÊý¾Ý¶ÁдµÄÇëÇó¡£ 
ÿµ±buffer cacheÏ£Íû´ÓÒ»¸öÒÑ×¢²áÉ豸ÖжÁдÊý¾Ý¿éʱ,Ëü»á½«request 
½á¹¹Ìí¼Óµ½Æäblk_dev_structÖС£Í¼8.2±íʾÿ¸öÇëÇóÓÐÖ¸ÏòÒ»¸ö»ò¶à¸ö 
buffer_hear½á¹¹µÄÖ¸Õ룬ÿ¸öÇëÇó¶Áдһ¿éÊý¾Ý¡£Èçbuffer cache¶Ô 
buffer_head½á¹¹ÉÏËø,Ôò½ø³Ì»áµÈ´ýµ½¶Ô´Ë»º³åµÄ¿é²Ù×÷Íê³É¡£Ã¿¸ö 
request½á¹¹¶¼´Ó¾²Ì¬Á´±íall_requestsÖзÖÅä¡£Èç¹û´ËÇëÇó±»¼ÓÈëµ½¿Õ 
ÇëÇóÁ´±íÖÐ,Ôò½«µ÷ÓÃÇý¶¯ÇëÇóº¯ÊýÒÔÆô¶¯´ËÇëÇó¶ÓÁеĴ¦Àí,·ñÔò¸ÃÉ豸 
Çý¶¯½«¼òµ¥µØ´¦ÀíÇëÇóÁ´±íÉϵÄrequest¡£ 
Ò»µ©É豸Çý¶¯Íê³ÉÁËÇëÇóÔòËü±ØÐ뽫ÿ¸öbuffer_heard½á¹¹´Órequest½á 
¹¹ÖÐÇå³ý£¬½«ËüÃDZê¼Ç³ÉÒѸüÐÂ״̬²¢½âËøÖ®¡£¶Ôbuffer_headµÄ½âËø½« 
»½ÐÑËùÓеȴý´Ë¿é²Ù×÷Íê³ÉµÄ˯Ãß½ø³Ì¡£Èç½âÎöÎļþÃû³ÆÊ±,EXT2Îļþϵ 
ͳ±ØÐë´Ó°üº¬´ËÎļþϵͳµÄÉ豸ÖжÁÈ¡°üº¬Ï¸öEXT2Ŀ¼Èë¿ÚµÄÊý¾Ý¿é¡£ 
ÔÚbuffer_headÉÏ˯ÃߵĽø³ÌÔÚÉ豸Çý¶¯±»»½ÐѺ󽫰üº¬´ËĿ¼Èë¿Ú¡£ 
requestÊý¾Ý½á¹¹±»±ê¼Ç³É¿ÕÏÐÒԱ㱻ÆäËü¿éÇëÇóʹÓᣠ
8.5  Ó²ÅÌ 
´ÅÅÌÇý¶¯Æ÷ÌṩÁËÒ»¸öÓÀ¾ÃÐÔ´æ´¢Êý¾ÝµÄ·½Ê½£¬½«Êý¾Ý±£´æÔÚÐýתµÄÅÌÆ¬ 
ÉÏ¡£Ð´ÈëÊý¾Ýʱ´ÅÍ·½«´Å»¯ÅÌÆ¬ÉϵÄÒ»¸öС΢Á£¡£ÕâЩÅÌÆ¬±»Á¬½Óµ½Ò»¸ö 
ÖÐÖáÉϲ¢ÒÔ3000µ½10£¬000RPM£¨Ã¿·ÖÖÓ¶àÉÙת£©µÄºã¶¨ËÙ¶ÈÐýת¡£¶øÈíÅÌ 
µÄתËÙ½öΪ360RPM¡£´ÅÅ̵ĶÁ/д´ÅÍ·¸ºÔð¶ÁдÊý¾Ý£¬Ã¿¸öÅÌÆ¬µÄÁ½²à¸÷ 
ÓÐÒ»¸ö´ÅÍ·¡£´ÅÍ·¶Áдʱ²¢²»½Ó´¥ÅÌÆ¬±íÃæ¶øÊǸ¡ÔÚ¾à±íÃæ·Ç³£½üµÄ¿ÕÆø 
µæÖУ¨°ÙÍò·ÖÖ®Ò»Ó¢´ç£©¡£´ÅÍ·ÓÉÒ»¸öÂí´ïÇý¶¯ÔÚÅÌÆ¬±íÃæÒÆ¶¯¡£ËùÓеĠ
´ÅÍ·±»Á¬ÔÚÒ»Æð£¬ËüÃÇͬʱ´©¹ýÅÌÆ¬µÄ±íÃæ¡£ 
ÅÌÆ¬µÄÿ¸ö±íÃæ¶¼±»»®·Ö³ÉΪ½Ð×ö´ÅµÀµÄÏÁխͬÐÄÔ²¡£0´ÅµÀλÓÚ×îÍâÃæ 
¶ø×î´ó´ÅµÀλÓÚ×î¿¿½üÖÐÑëÖ÷Öá¡£ÖùÃæÖ¸Ò»×éÏàͬ´ÅµÀºÅµÄ´ÅµÀ¡£ËùÒÔÿ 
¸öÅÌÆ¬ÉϵĵÚÎå´ÅµÀ×é³ÉÁË´ÅÅ̵ĵÚÎåÖùÃæ¡£ÓÉÓÚÖùÃæºÅÓë´ÅµÀºÅÏàµÈËù 
ÒÔÎÒÃǾ­³£¿ÉÒÔ¿´µ½ÒÔÖùÃæÃèÐðµÄ´ÅÅ̲¼¾Ö¡£Ã¿¸ö´ÅµÀ¿É½øÒ»²½»®·Ö³ÉÉÈ 
Çø¡£ËüÊÇÓ²ÅÌÊý¾Ý¶ÁдµÄ×îСµ¥ÔªÍ¬Ê±Ò²ÊÇ´ÅÅ̵Ŀé´óС¡£Ò»°ãµÄÉÈÇø´ó 
СΪ512×Ö½Ú²¢ÇÒÕâ¸ö´óС¿ÉÒÔ´ÅÅÌÖÆÔì³öÀ´ºó¸ñʽ»¯Ê±ÉèÖᣠ
Ò»¸ö´ÅÅ̾­³£±»Ãè»æ³ÉÓжàÉÙ¸÷ÖùÃæ¡¢´ÅÍ·ÒÔ¼°ÉÈÇø¡£ÀýÈçϵͳÆô¶¯Ê± 
Linux½«ÕâÑùÃèÐðÒ»¸öIDEÓ²ÅÌ£º 
hdb: Conner Peripherals 540MB - CFS540A, 516MB w/64kB Cache, 
CHS=1050/16/63 
Õâ±íʾ´Ë´ÅÅÌÓÐ1050¸÷ÖùÃæ£¨´ÅµÀ£©£¬16¸ö´ÅÍ·£¨8¸öÅÌÆ¬£©ÇÒÿ´ÅµÀ°ü 
º¬63¸öÉÈÇø¡£ÕâÑùÎÒÃÇ¿ÉÒÔͨ¹ýÉÈÇøÊý¡¢¿éÊýÒÔ¼°512×Ö½ÚÉÈÇø´óС¼ÆËã 
³ö´ÅÅ̵Ĵ洢ÈÝÁ¿Îª529200×Ö½Ú¡£Õâ¸öÈÝÁ¿ºÍ´ÅÅÌ×ÔÉíÉù³ÆµÄ516M×Ö½Ú²¢ 
²»Ïàͬ£¬ÕâÊÇÒòΪÓÐЩÉÈÇø±»ÓÃÀ´´æ·Å´ÅÅÌ·ÖÇøÐÅÏ¢¡£ÓÐЩ´ÅÅÌ»¹ÄÜ×Ô¶¯ 
ѰÕÒ»µÉÈÇø²¢ÖØÐÂË÷Òý´ÅÅÌÒÔÕý³£Ê¹Óᣠ
ÎïÀíÓ²Å̿ɽøÒ»²½»®·Ö³É·ÖÇø¡£Ò»¸ö·ÖÇøÊÇÒ»´ó×éÎªÌØÊâÄ¿µÄ¶ø·ÖÅäµÄÉÈ 
Çø¡£¶Ô´ÅÅ̽øÐзÖÇøÊ¹µÃ´ÅÅÌ¿ÉÒÔͬʱ±»¼¸¸ö²Ù×÷ϵͳ»ò²»Í¬Ä¿µÄʹÓᣠ
Ðí¶àLinuxϵͳ¾ßÓÐÈý¸ö·ÖÇø£ºDOSÎļþϵͳ·ÖÇø£¬EXT2Îļþϵͳ·ÖÇøºÍ½» 
»»·ÖÇø¡£Ó²ÅÌ·ÖÇøÓ÷ÖÇø±íÀ´ÃèÐ𣻱íÖÐÿ¸öÈë¿ÚÓôÅÍ·¡¢ÉÈÇø¼°ÖùÃæºÅ 
À´±íʾ·ÖÇøµÄÆðʼÓë½áÊø¡£¶ÔÓÚÓÃDOS¸ñʽ»¯µÄÓ²ÅÌÓÐ4¸öÖ÷·ÖÇø±í¡£µ«²» 
Ò»¶¨ËùÓеÄËĸöÈë¿Ú¶¼±»Ê¹Óá£fdiskÖ§³Ö3ÖзÖÇøÀàÐÍ£ºÖ÷·ÖÇø¡¢À©Õ¹·Ö 
Çø¼°Âß¼­·ÖÇø¡£À©Õ¹·ÖÇø²¢²»ÊÇÕæÕýµÄ·ÖÇø£¬ËüÖ»²»¹ý°üº¬Á˼¸¸öÂß¼­·Ö 
Çø¡£À©Õ¹ºÍÂß¼­·ÖÇøÓÃÀ´´òÆÆËĸöÖ÷·ÖÇøµÄÏÞÖÆ¡£ÒÔÏÂÊÇÒ»¸ö°üº¬Á½¸öÖ÷ 
·ÖÇøµÄfdiskÃüÁîµÄÊä³ö£º 
Disk /dev/sda: 64 heads, 32 sectors, 510 cylinders 
Units = cylinders of 2048 * 512 bytes 
   Device Boot   Begin    Start      End   Blocks   Id  System 
/dev/sda1            1        1      478   489456   83  Linux native 
/dev/sda2          479      479      510    32768   82  Linux swap 
Expert command (m for help): p 
Disk /dev/sda: 64 heads, 32 sectors, 510 cylinders 
Nr AF  Hd Sec  Cyl  Hd Sec  Cyl   Start    Size ID 
 1 00   1   1    0  63  32  477      32  978912 83 
 2 00   0   1  478  63  32  509  978944   65536 82 
 3 00   0   0    0   0   0    0       0       0 00 
 4 00   0   0    0   0   0    0       0       0 00 
ÕâЩÄÚÈݱíÃ÷µÚÒ»¸ö·ÖÇø´ÓÖùÃæ£¨»òÕߴŵÀ£©0£¬Í·1ºÍÉÈÇø1¿ªÊ¼Ò»Ö± 
µ½ÖùÃæ477£¬ÉÈÇø22ºÍÍ·63½áÊø¡£ÓÉÓÚÿ´ÅµÀÓÐ32¸öÉÈÇøÇÒÓÐ64¸ö¶Áд 
´ÅÍ·Ôò´Ë·ÖÇøÔÚ´óСÉϵÈÓÚÖùÃæÊý¡£fdiskʹ·ÖÇøÔÚÖùÃæ±ß½çÉÏ¶ÔÆë¡£ 
Ëü´Ó×îÍâÃæµÄÖùÃæ0¿ªÊ¼²¢ÏòÖмäÀ©Õ¹478¸öÖùÃæ¡£µÚ¶þ¸ö·ÖÇø£º½»»»·Ö 
Çø´Ó478ºÅÖùÃæ¿ªÊ¼²¢À©Õ¹µ½´ÅÅ̵Ä×îÄÚȦ¡£ 
ÔÚ³õʼ»¯¹ý³ÌÖÐLinuxÈ¡µÃϵͳÖÐÓ²Å̵ÄÍØÆË½á¹¹Ó³Éä¡£ËüÕÒ³öÓжàÉÙ 
ÖÐÓ²ÅÌÒÔ¼°ÊÇʲôÀàÐÍ¡£ÁíÍâLinux»¹ÒªÕÒµ½Ã¿¸öÓ²Å̵ķÖÇø·½Ê½¡£Ëù 
ÓÐÕâЩ¶¼ÓÃÓÉgendisk_headÁ´Ö¸ÕëÖ¸ÏòµÄgendisk½á¹¹Á´±íÀ´±íʾ¡£Ã¿ 
¸ö´ÅÅÌ×ÓϵͳÈçIDEÔÚ³õʼ»¯Ê±²úÉú±íʾ´ÅÅ̽ṹµÄgendisk½á¹¹¡£Í¬ 
ʱËü½«×¢²áÆäÎļþ²Ù×÷Àý³Ì²¢½«´ËÈë¿ÚÌí¼Óµ½blk_devÊý¾Ý½á¹¹ÖС£Ã¿ 
¸ögendisk½á¹¹°üº¬Î¨Ò»µÄÖ÷É豸ºÅ£¬ËüÓë¿éÏà¹ØÉ豸µÄÖ÷É豸ºÅÏàͬ¡£ 
ÀýÈçSCSI´ÅÅÌ×Óϵͳ´´½¨ÁËÒ»¸öÖ÷É豸ºÅΪ8µÄgendiskÈë¿Ú£¨"sd"£©£¬ 
ÕâÒ²ÊÇËùÓÐSCSIÓ²ÅÌÉ豸µÄÖ÷É豸ºÅ¡£Í¼8.3¸ø³öÁËÁ½¸ögendiskÈë¿Ú£¬ 
Ò»¸ö±íʾSCSI´ÅÅÌ×Óϵͳ¶øÁíÒ»¸ö±íʾIDE´ÅÅÌ¿ØÖÆÆ÷¡£ide0±íʾÖ÷IDE 
¿ØÖÆÆ÷¡£ 
¾¡¹Ü´ÅÅÌ×ÓϵͳÔÚÆä³õʼ»¯¹ý³ÌÖоͽ¨Á¢ÁËgendiskÈë¿Ú,µ«ÊÇÖ»ÓÐLinux 
×÷·ÖÇø¼ì²éʱ²ÅʹÓá£Ã¿¸ö´ÅÅÌ×Óϵͳͨ¹ýά»¤Ò»×éÊý¾Ý½á¹¹½«ÎïÀí 
Ó²ÅÌÉϵķÖÇøÓëij¸öÌØÊâÖ÷´ÓÌØÊâÉ豸»¥ÏàÓ³Éä¡£ÎÞÂÛºÎʱͨ¹ýbuffer 
cache»òÎļþ²Ù×÷¶Ô¿éÉ豸µÄ¶Áд¶¼½«±»ºËÐ͍Ïòµ½¶Ô¾ßÓÐij¸öÌØ¶¨Ö÷ 
É豸ºÅµÄÉ豸ÎļþÉÏ£¨Èç/dev/sda2£©¡£¶ø´ÓÉ豸ºÅµÄ¶¨Î»Óɸ÷×ÔÉ豸 
Çý¶¯»ò×ÓϵͳÀ´Ó³Éä¡£ 
8.5.1  IDE Ó²ÅÌ 
LinuxϵͳÉÏʹÓõÃ×î¹ã·ºµÄÓ²ÅÌÊǼ¯³Éµç×Ó´ÅÅÌ»òÕßIDEÓ²ÅÌ¡£IDEÊÇ 
Ò»¸öÓ²Å̽ӿڶø²»ÊÇÀàËÆSCSIµÄI/O×ÜÏß½Ó¿Ú¡£Ã¿¸öIDE¿ØÖÆÆ÷Ö§³ÖÁ½ 
¸öÓ²ÅÌ£¬Ò»¸öΪÖ÷ÁíÒ»¸öΪ´Ó¡£Ö÷´ÓÓ²ÅÌ¿ÉÒÔͨ¹ýÅÌÉϵÄÌøÏßÀ´ÉèÖᣠ
ϵͳÖеĵÚÒ»¸öIDE¿ØÖÆÆ÷³ÉΪÖ÷IDE¿ØÖÆÆ÷¶øÁíÒ»¸öΪ´ÓÊô¿ØÖÆÆ÷¡£ 
IDE¿ÉÒÔÒÔÿÃë3.3M×ֽڵĴ«ÊäÂÊ´«ÊäÊý¾ÝÇÒ×î´óÈÝÁ¿Îª538M×Ö½Ú¡£EIDE 
»òÔöǿʽIDE¿ÉÒÔ½«´ÅÅÌÈÝÁ¿À©Õ¹µ½8.6G×Ö½Ú¶øÊý¾Ý´«ÊäÂÊΪ16.6M×Ö½Ú/Ãë¡£ 
ÓÉÓÚIDEºÍEIDE¶¼±ÈSCSIÓ²Å̱ãÒË,ËùÒÔ´ó¶àÏÖ´úPC»úÔÚ°üº¬Ò»¸ö»ò¼¸¸ö 
°åÉÏIDE¿ØÖÆÆ÷¡£ 
LinuxÒÔÆä·¢ÏÖ¿ØÖÆÆ÷µÄ˳ÐòÀ´¶ÔIDEÓ²Å̽øÐÐÃüÃû¡£ÔÚÖ÷¿ØÖÆÆ÷ÖеÄÖ÷ 
ÅÌΪ/dev/hda¶ø´ÓÅÌΪ/dev/hdb¡£/dev/hdcÓÃÀ´±íʾ´ÓÊôIDE¿ØÖÆÆ÷ÖеĠ
Ö÷ÅÌ¡£IDE×Óϵͳ½«ÏòLinuxºËÐÄ×¢²áIDE¿ØÖÆÆ÷¶ø²»ÊÇIDEÓ²ÅÌ¡£Ö÷IDE¿Ø 
ÖÆÆ÷µÄÖ÷±êÖ¾·ûΪ3¶ø´ÓÊôIDE¿ØÖÆÆ÷µÄÖ÷±êÖ¾·ûΪ22¡£Èç¹ûϵͳÖаüº¬Á½ 
¸öIDE¿ØÖÆÆ÷ÔòIDE×ÓϵͳµÄÈë¿ÚÔÚblk_devºÍblkdevsÊý×éµÄµÚ2ºÍµÚ22´¦¡£ 
IDEµÄ¿éÉ豸Îļþ·´Ó¦ÁËÕâÖÖ±àºÅ·½Ê½£¬Ó²ÅÌ/dev/hdaºÍ/dev/hdb¶¼Á¬½Ó 
µ½Ö÷IDE¿ØÖÆÆ÷ÉÏ£¬ÆäÖ÷±êÖ¾·ûΪ3¡£¶ÔIDE×ÓϵͳÉÏÕâЩ¿éÏà¹ØÎļþµÄÎÄ 
¼þ»òÕßbuffercacheµÄ²Ù×÷¶¼Í¨¹ýºËÐÄʹÓÃÖ÷É豸±êÖ¾·û×÷ΪË÷Òý¶¨Ïòµ½ 
IDE×ÓϵͳÉÏ¡£µ±·¢³öÇëÇóʱ£¬´ËÇëÇóÓÉÄĸöIDEÓ²ÅÌÀ´Íê³ÉÈ¡¾öÓÚIDE×Ó 
ϵͳ¡£ÎªÁË×÷µ½ÕâÒ»µãIDE×ÓϵͳʹÓôÓÉ豸±àºÅ¶ÔÓ¦µÄÉè±¸ÌØÊâ±êÖ¾·û£¬ 
ÓÉËü°üº¬µÄÐÅÏ¢À´½«ÇëÇó·¢Ë͵½ÕýÈ·µÄÓ²ÅÌÉÏ¡£Î»ÓÚÖ÷IDE¿ØÖÆÆ÷ÉϵÄIDE 
´ÓÅÌ/dev/hdbµÄÉ豸±êÖ¾·ûΪ£¨3£¬64£©¡£¶ø´ËÅÌÖеÚÒ»¸ö·ÖÇø£¨/dev/hdb1£© 
µÄÉ豸±êÖ¾·ûΪ(3£¬65)¡£ 
8.5.2  ³õʼ»¯IDE×Óϵͳ 
IDE´ÅÅÌÓëIBM 
PC¹ØÏµ·Ç³£ÃÜÇС£ÔÚÕâô¶àÄêÖÐÕâЩÉ豸µÄ½Ó¿Ú·¢ÉúÁ˱仯¡£ÕâʹµÃIDE 
×ÓϵͳµÄ³õʼ»¯¹ý³Ì±È¿´ÉÏÈ¥Òª¸´Ôӵöࡣ 
Linux¿ÉÒÔÖ§³ÖµÄ×î¶àIDE¿ØÖÆÆ÷¸öÊýΪ4¡£Ã¿¸ö¿ØÖÆÆ÷ÓÃide_hwifsÊý×é 
ÖеÄide_hwif_t½á¹¹À´±íʾ¡£Ã¿¸öide_hwif_t½á¹¹°üº¬Á½¸öide_drive_t 
½á¹¹ÒÔÖ§³ÖÖ÷´ÓIDEÇý¶¯Æ÷¡£ÔÚIDE×ÓϵͳµÄ³õʼ»¯¹ý³ÌÖÐLinuxͨ¹ý·ÃÎÊ 
ϵͳCMOSÀ´ÅжÏÊÇ·ñÓйØÓÚÓ²Å̵ÄÐÅÏ¢¡£ÕâÖÖCMOSÓÉµç³Ø¹©µçËùÒÔϵͳ¶Ï 
µçʱҲ²»»áÒÅʧÆäÖеÄÄÚÈÝ¡£ËüλÓÚÓÀ²»Í£Ö¹µÄϵͳʵʱʱÖÓÉ豸ÖС£ 
´ËCMOSÄÚ´æµÄλÖÃÓÉϵͳBIOSÀ´ÉèÖã¬Ëü½«Í¨ÖªLinuxϵͳÖÐÓжàÉÙ¸öIDE 
¿ØÖÆÆ÷ÓëÇý¶¯Æ÷¡£LinuxʹÓÃÕâЩ´ÓBIOSÖз¢ÏֵĴÅÅÌÊý¾ÝÀ´½¨Á¢¶ÔÓ¦´Ë 
Çý¶¯Æ÷µÄide_hwif_t½á¹¹¡£ 
Ðí¶àÏÖ´úPCϵͳʹÓÃPCIоƬ×éÈçIntel 82430 VXоƬ×齫PCIEIDE¿ØÖÆÆ÷ 
·â×°ÔÚÄÚ¡£IDE×ÓϵͳʹÓÃPCI BIOS»Øµ÷º¯ÊýÀ´¶¨Î»ÏµÍ³ÖÐPCI£¨E£©IDE¿Ø 
ÖÆÆ÷¡£È»ºó¶ÔÕâЩоƬ×éµ÷ÓÃPCIÌØ¶¨²éѯÀý³Ì¡£ 
ÿ´ÎÕÒµ½Ò»¸öIDE½Ó¿Ú»ò¿ØÖÆÆ÷¾ÍÓн¨Á¢Ò»¸öide_hwif_t½á¹¹À´±íʾ¿ØÖÆ 
Æ÷ºÍÓëÖ®ÏàÁ¬µÄÓ²ÅÌ¡£ÔÚ²Ù×÷¹ý³ÌÖÐIDEÇý¶¯Æ÷¶ÔI/OÄÚ´æ¿Õ¼äÖеÄIDEÃü 
Áî¼Ä´æÆ÷дÈëÃüÁî¡£Ö÷IDE¿ØÖÆÆ÷µÄȱʡ¿ØÖƺÍ״̬¼Ä´æÆ÷ÊÇ0x1F0- 0x1F7¡£ 
Õâ¸öµØÖ·ÓÉÔçÆÚµÄIBM PC¹æ·¶É趨¡£IDEÇý¶¯Æ÷Ϊÿ¸ö¿ØÖÆÆ÷ÏòLinux×¢ 
²á¿é»º³åcacheºÍVFS½Úµã²¢½«Æä¼ÓÈëµ½blk_devºÍblkdevsÊý×éÖС£IDEÇý 
¶¯Æ÷ÐèÒªÉêÇëij¸öÖжϡ£Ò»°ãÖ÷IDE¿ØÖÆÆ÷ÖжϺÅΪ14¶ø´ÓÊôIDE¿ØÖÆÆ÷Ϊ 
15¡£È»¶øÕâЩ¶¼¿ÉÒÔͨ¹ýÃüÁîÐÐÑ¡ÏîÓɺËÐÄÀ´ÖØÔØ¡£IDEÇý¶¯Æ÷ͬʱ»¹½« 
gendiskÈë¿Ú¼ÓÈëµ½Æô¶¯Ê±·¢ÏÖµÄÿ¸öIDE¿ØÖÆÆ÷µÄgendiskÁ´±íÖÐÈ¥¡£·Ö 
Çø¼ì²é´úÂëÖªµÀÿ¸öIDE¿ØÖÆÆ÷¿ÉÄܰüº¬Á½¸öIDEÓ²ÅÌ¡£ 
8.5.3  SCSI Ó²ÅÌ 
SCSI£¨Ð¡ÐͼÆËã»úϵͳ½Ó¿Ú£©×ÜÏßÊÇÒ»ÖÖ¸ßЧµÄµã¶ÔµãÊý¾Ý×ÜÏߣ¬Ëü×î 
¶à¿ÉÒÔÖ§³Ö8¸öÉ豸£¬ÆäÖаüÀ¨¶à¸öÖ÷É豸¡£Ã¿¸öÉ豸ÓÐΨһµÄ±êÖ¾·û²¢ 
¿ÉÒÔͨ¹ýÅÌÉϵÄÌøÏßÀ´ÉèÖá£ÔÚ×ÜÏßÉϵÄÁ½¸öÉ豸¼äÊý¾Ý¿ÉÒÔÒÔͬ²½»òÒì 
²½·½Ê½£¬ÔÚ32λÊý¾Ý¿í¶ÈÏ´«ÊäÂÊΪ40M×Ö½ÚÀ´½»»»Êý¾Ý¡£SCSI×ÜÏßÉϿɠ
ÒÔÔÚÉ豸¼äͬʱ´«ÊäÊý¾ÝÓë״̬ÐÅÏ¢¡£initiatorÉ豸ºÍtargetÉ豸¼äµÄ 
Ö´Ðв½Öè×î¶à¿ÉÒÔ°üÀ¨8¸ö²»Í¬µÄ½×¶Î¡£Äã¿ÉÒÔ´Ó×ÜÏßÉÏ5¸öÐźÅÀ´·Ö±æSCSI 
×ÜÏߵĵ±Ç°½×¶Î¡£Õâ8¸ö½×¶ÎÊÇ£º 
BUS FREE 
     µ±Ç°Ã»ÓÐÉ豸ÔÚ¿ØÖÆ×ÜÏßÇÒ×ÜÏßÉÏÎÞÊÂÎñ·¢Éú¡£ 
ARBITRATION 
     Ò»¸öSCSIÉ豸ÊÔͼȡµÃSCSI×ÜÏߵĿØÖÆÈ¨£¬ÕâʱËü½«ÆäSCSI±êÖ¾·û 
     ·ÅÖõ½µØÖ·Òý½ÅÉÏ¡£¾ßÓÐ×î¸ßSCSI±êÖ¾·û±àºÅµÄÉ豸½«»ñµÃ×ÜÏß¿ØÖÆÈ¨¡£ 
SELECTION 
     µ±É豸ͨ¹ýÖٲóɹ¦µØÈ¡µÃÁ˶ÔSCSI×ÜÏߵĿØÖÆÈ¨ºóËü±ØÐëÏòËü×¼±¸ 
     ·¢ËÍÃüÁîµÄÄǸöSCSIÉ豸·¢³öÐźš£¾ßÌå×ö·¨Êǽ«Ä¿±êÉ豸µÄSCSI±êÖ¾ 
     ·û·ÅÖÃÔÚµØÖ·Òý½ÅÉϽøÐÐÉùÃ÷¡£ 
RESELECTION 
     ÔÚÒ»¸öÇëÇóµÄ´¦Àí¹ý³ÌÖÐSCSIÉ豸¿ÉÄÜ»á¶Ï¿ªÁ¬½Ó¡£Ä¿±ê£¨target£© 
     É豸½«ÔÙ´ÎÑ¡ÔñÆô¶¯É豸(initiator£©¡£²»ÊÇËùÓеÄSCSIÉ豸¶¼Ö§ 
     ³Ö´Ë½×¶Î¡£ 
COMMAND 
     ´Ë½×¶ÎÖÐinitiatorÉ豸½«ÏòtargetÉ豸·¢ËÍ6¡¢10»ò12×Ö½ÚÃüÁî¡£ 
DATA IN, DATA OUT 
     ´Ë½×¶ÎÖÐÊý¾Ý½«ÔÚinitiatorÉ豸ºÍtargetÉ豸¼ä´«Êä¡£ 
STATUS 
     ËùÓÐÃüÁîÍê±Ïºó½«½øÈë´Ë½×¶Î£¬´ËʱÔÊÐítargetÉ豸Ïòinitiator 
     É豸·¢ËÍ״̬ÐÅÏ¢ÒÔָʾ²Ù×÷³É¹¦Óë·ñ¡£ 
MESSAGE IN, MESSAGE OUT 
     ´Ë½×¶Î¸½¼ÓÐÅÏ¢½«ÔÚinitiatorÉ豸ºÍtargetÉ豸¼ä´«Êä¡£ 
Linux SCSI×ÓϵͳÓÉÁ½¸ö»ù±¾²¿·Ö×é³É£¬Ã¿¸öÓÉÒ»¸öÊý¾Ý½á¹¹À´±íʾ¡£ 
host Ò»¸öSCSI host¼´Ò»¸öÓ²¼þÉ豸£ºSCSI¿ØÖÆÈ¨¡£NCR 810 PCI 
     SCSI¿ØÖÆÈ¨¼´Ò»ÖÖSCSI host¡£ÔÚLinux 
     ÏµÍ³ÖпÉÒÔ´æÔÚÏàͬÀàÐ͵Ķà¸öSCSI¿ØÖÆÈ¨£¬Ã¿¸öÓÉÒ»¸öµ¥¶ÀµÄ 
     SCSI hostÀ´±íʾ¡£ÕâÒâζ×ÅÒ»¸öSCSIÉ豸Çý¶¯¿ÉÒÔ¿ØÖƶà¸ö¿ØÖÆ 
     È¨ÊµÀý¡£SCSI host×ÜÊÇSCSIÃüÁîµÄinitiatorÉ豸¡£ 
Device 
     ËäÈ»SCSIÖ§³Ö¶àÖÖÀàÐÍÉ豸Èç´Å´ø»ú¡¢CD-ROMµÈµÈ£¬µ«×î³£¼ûµÄ 
     SCSIÉ豸ÊÇSCSI´ÅÅÌ¡£SCSIÉ豸×ÜÊÇSCSIÃüÁîµÄtarget¡£ÕâЩÉ豸 
     ±ØÐëÇø±ð¶Ô´ý£¬ÀýÈçÏóCD-ROM»òÕß´Å´ø»úÕâÖÖ¿ÉÒÆ¶¯É豸£¬Linux 
     ±ØÐë¼ì²â½éÖÊÊÇ·ñÒѾ­Òƶ¯¡£²»Í¬µÄ´ÅÅÌÀàÐÍÓв»Í¬µÄÖ÷É豸ºÅ£¬ 
     ÕâÑùLinux¿ÉÒÔ½«¿éÉ豸ÇëÇó·¢Ë͵½ÕýÈ·µÄSCSIÉ豸¡£ 
³õʼ»¯SCSI×Óϵͳ 
SCSI×ÓϵͳµÄ³õʼ»¯·Ç³£¸´ÔÓ£¬Ëü±ØÐë·´Ó³´¦SCSI×ÜÏß¼°ÆäÉ豸µÄ¶¯Ì¬ 
ÐÔ¡£LinuxÔÚÆô¶¯Ê±³õʼ»¯SCSI×Óϵͳ¡£ 
Èç¹ûËüÕÒµ½Ò»¸öSCSI¿ØÖÆÆ÷£¨¼´SCSI hosts£©Ôò»áɨÃè´ËSCSI×ÜÏßÀ´ÕÒ 
³ö×ÜÏßÉϵÄËùÓÐÉ豸¡£È»ºó³õʼ»¯ÕâЩÉ豸²¢Í¨¹ýÆÕͨÎļþºÍbuffer 
cache¿éÉ豸²Ù×÷ʹLinuxºËÐĵįäËü²¿·ÖÄÜʹÓÃÕâЩÉ豸¡£³õʼ»¯¹ý³Ì 
·Ö³ÉËĸö½×¶Î£º 
Ê×ÏÈLinux½«ÕÒ³öÔÚϵͳºËÐÄÁ¬½Óʱ±»Á¬ÈëºËÐĵÄÄÄÖÖÀàÐ͵ÄSCSIÖ÷»úÊÊ 
ÅäÆ÷»ò¿ØÖÆÆ÷ÓÐÓ²¼þÐèÒª¿ØÖÆ¡£Ã¿¸öºËÐÄÖеÄSCSI hostÔÚbuiltin_scsi_hosts 
Êý×éÖÐÓÐÒ»¸öScsi_Host_TemplateÈë¿Ú¡£¶øScsi_Host_Template½á¹¹Öаü 
º¬Ö´ÐÐÌØ¶¨SCSIhost²Ù×÷, Èç¼ì²âÁ¬µ½´ËSCSI hostµÄSCSIÉ豸µÄÀý³ÌµÄÈë 
¿ÚÖ¸Õë¡£ÕâЩÀý³ÌÔÚSCSI×Óϵͳ½øÐÐ×ÔÎÒÅäÖÃʱʹÓÃͬʱËüÃÇ»¹ÊÇÖ§³Ö 
´ËhostÀàÐ͵ÄSCSIÉ豸Çý¶¯µÄÒ»²¿·Ö¡£Ã¿¸ö±»¼ì²âµÄSCSI host£¬¼´ÓëÕæ 
ÕýSCSIÉ豸Á¬½ÓµÄhost½«Æä×ÔÉíµÄScsi_Host_Template½á¹¹Ìí¼Óµ½»î¶¯ 
SCSIhostsµÄscsi_hosts½á¹¹Á´±íÖÐÈ¥¡£Ã¿¸ö±»¼ì²âhostÀàÐ͵ÄʵÀýÓÃÒ» 
¸öscsi_hostlistÁ´±íÖеÄScsi_Host½á¹¹À´±íʾ¡£ÀýÈçÒ»¸ö°üº¬Á½¸öNCR810 
PCI SCSI¿ØÖÆÆ÷µÄϵͳµÄÁ´±íÖн«ÓÐÁ½¸öScsi_HostÈë¿Ú£¬Ã¿¸ö¿ØÖÆÆ÷¶Ô 
Ó¦Ò»¸ö¡£Ã¿¸öScsi_HostÖ¸ÏòÒ»¸ö´ú±íÆ÷É豸Çý¶¯µÄScsi_Host_Template¡£ 
ÏÖÔÚÿ¸öSCSI hostÒѾ­ÕÒµ½£¬SCSI×Óϵͳ±ØÐëÕÒ³öÄÄЩSCSIÉ豸Á¬½ÓÄÄ 
¸öhostµÄ×ÜÏß¡£SCSIÉ豸µÄ±àºÅÊÇ´Ó0µ½7£¬¶ÔÓÚÒ»ÌõSCSI×ÜÏßÉÏÁ¬½ÓµÄ¸÷ 
¸öÉ豸£¬ÆäÉ豸±àºÅ»òSCSI±êÖ¾·ûÊÇΨһµÄ¡£SCSI±êÖ¾·û¿ÉÒÔͨ¹ýÉ豸ÉÏ 
µÄÌøÏßÀ´ÉèÖá£SCSI³õʼ»¯´úÂëͨ¹ýÔÚSCSI×ÜÏßÉÏ·¢ËÍÒ»¸öTEST_UNIT_READY 
ÃüÁîÀ´ÕÒ³öÿ¸öSCSIÉ豸¡£µ±É豸×÷³öÏàӦʱÆä±êÖ¾·ûͨ¹ýÒ»¸öENQUIRYÃü 
ÁîÀ´¶ÁÈ¡¡£Linux½«´ÓÖеõ½Éú²ú³§É̵ÄÃû³ÆºÍÉ豸ģʽÒÔ¼°ÐÞ¶©°æ±¾ºÅ¡£ 
SCSIÃüÁîÓÉÒ»¸öScsi_Cmnd½á¹¹À´±íʾͬʱÕâЩÃüÁîͨ¹ýµ÷ÓÃScsi_Host_Template 
½á¹¹ÖеÄÉ豸Çý¶¯Àý³Ì´«µÝµ½´ËSCSIhostµÄÉ豸Çý¶¯ÖС£±»ÕÒµ½µÄÿ¸öSCSI 
É豸ÓÃÒ»¸öScsi_Device½á¹¹À´±íʾ£¬Ã¿¸öÖ¸ÏòÆä¸¸Scsi_Host½á¹¹¡£ËùÓР
ÕâЩScsi_Device½á¹¹±»Ìí¼Óµ½scsi_deviceÁ´±íÖС£Í¼8.4¸ø³öÁËÕâЩÖ÷Òª 
Êý¾Ý½á¹¹¼äµÄ¹ØÏµ¡£ 
Ò»¹²ÓÐËÄÖÖSCSIÉ豸ÀàÐÍ£º´ÅÅÌ£¬´Å´ø»ú£¬CD-ROMºÍÆÕͨSCSIÉ豸¡£Ã¿ÖÖÀà 
Ð͵ÄSCSIÉ豸ÒÔ²»Í¬µÄÖ÷¿éÉ豸ÀàÐ͵¥¶ÀµÇ¼Çµ½ºËÐÄÖС£Èç¹ûÓжà¸öÀàÐ͵Ġ
SCSIÉ豸´æÔÚÔòËüÃÇÖ»µÇ¼Ç×ÔÉí¡£Ã¿¸öSCSIÉ豸ÀàÐÍ£¬ÈçSCSI´ÅÅÌά»¤×ÅÆä 
×ÔÉíµÄÉ豸ÁÐ±í¡£ËüʹÓÃÕâЩ±í½«ºËÐÄ¿é²Ù×÷£¨file»òÕßbuffer cache£©¶¨ 
Ïòµ½ÕýÈ·µÄÉ豸Çý¶¯»ò SCSI hostÉÏ¡£Ã¿ÖÖSCSIÉ豸ÀàÐÍÓÃÒ»¸ö 
Scsi_Device_Template½á¹¹À´±íʾ¡£´Ë½á¹¹Öаüº¬´ËÀàÐÍSCSIÉ豸µÄÐÅÏ¢ÒÔ 
¼°Ö´Ðи÷ÖÖÈÎÎñµÄÀý³ÌµÄÈë¿ÚµØÖ·¡£»»¾ä»°Ëµ£¬Èç¹ûSCSI×ÓϵͳϣÍûÁ¬½ÓÒ» 
¸öSCSI´ÅÅÌÉ豸Ëü½«µ÷ÓÃSCSI´ÅÅÌÀàÐÍÁ¬½ÓÀý³Ì¡£Èç¹ûÓжà¸ö¸ÃÖÖÀàÐ͵ÄSCSI 
É豸±»¼ì²âµ½Ôò´ËScsi_Type_Template½á¹¹½«±»Ìí¼Óµ½scsi_devicelistÁ´±íÖС£ 
SCSI×ÓϵͳµÄ×îºóÒ»¸ö½×¶ÎÊÇΪÿ¸öÒѵǼǵÄScsi_Device_Template½á¹¹µ÷Óà
finishº¯Êý¡£¶ÔÓÚSCSI´ÅÅÌÀàÐÍÉ豸Ëü½«Çý¶¯ËùÓÐSCSI´ÅÅ̲¢¼Ç¼Æä´ÅÅ̲¼¾Ö¡£ 
ͬʱ»¹½«Ìí¼ÓÒ»¸ö±íʾËùÓÐÁ¬½ÓÔÚÒ»ÆðµÄSCSI´ÅÅ̵Ägendisk½á¹¹¡£ 
·¢ËÍ¿éÉ豸ÇëÇó 
Ò»µ©SCSI×Óϵͳ³õʼ»¯Íê³ÉÕâЩSCSIÉ豸¾Í¿ÉÒÔʹÓÃÁË¡£Ã¿¸ö»î¶¯µÄSCSIÉ豸 
ÀàÐͽ«Æä×ÔÉíµÇ¼Çµ½ºËÐÄÒÔ±ãLinuxÕýÈ·¶¨Ïò¿éÉ豸ÇëÇó¡£ÕâЩÇëÇó¿ÉÒÔÊÇͨ 
¹ýblk_devµÄbuffercacheÇëÇóÒ²¿ÉÒÔÊÇͨ¹ýblkdevsµÄÎļþ²Ù×÷¡£ÒÔÒ»¸ö°üº¬ 
¶à¸öEXT2Îļþϵͳ·ÖÇøµÄSCSI´ÅÅÌÇý¶¯Æ÷ΪÀý£¬µ±°²×°ÆäÖÐÒ»¸öEXT2·ÖÇøÊ±Ïµ 
ͳÊÇÔõÑù½«ºËÐÄ»º³åÇëÇó¶¨Ïòµ½ÕýÈ·µÄSCSI´ÅÅ̵ÄÄØ£¿ 
ÿ¸ö¶ÔSCSI´ÅÅÌ·ÖÇøµÄ¿é¶ÁдÇëÇ󽫵¼ÖÂÒ»¸öеÄrequest½á¹¹±»Ìí¼Óµ½¶ÔÓ¦ 
´ËSCSI´ÅÅ̵Äblk_devÊý×éÖеÄcurrent_requestÁ´±íÖС£Èç¹û´ËrequestÕýÔÚ 
±»´¦ÀíÔòbuffercacheÎÞÐè×÷Èκι¤×÷£»·ñÔòËü±ØÐë֪ͨSCSI´ÅÅÌ×Óϵͳȥ´¦ 
ÀíËüµÄÇëÇó¶ÓÁС£ÏµÍ³ÖÐÿ¸öSCSI´ÅÅÌÓÃÒ»¸öScsi_Disk½á¹¹À´±íʾ¡£ÀýÈç 
/dev/sdb1µÄÖ÷É豸ºÅΪ8¶ø´ÓÉ豸ºÅΪ17£»ÕâÑù²úÉúÒ»¸öË÷ÒýÖµ1¡£Ã¿¸ö 
Scsi_Disk½á¹¹°üº¬Ò»¸öÖ¸Ïò±íʾ´ËÉ豸µÄScsi_Device½á¹¹¡£ÕâÑù·´¹ýÀ´ÓÖ 
Ö¸ÏòÓµÓÐËüµÄScsi_Host½á¹û¡£Õâ¸öÀ´×Ôbuffer cacheµÄrequest½á¹¹½«±»×ª 
»»³ÉÒ»¸öÃèÐðSCSIÃüÁîµÄScsi_Cmd½á¹¹£¬Õâ¸öSCSIÃüÁ·¢Ë͵½´ËSCSIÉ豸 
ͬʱ±»ÅÅÈë±íʾ´ËÉ豸µÄScsi_Host½á¹¹¡£Ò»µ©ÓÐÊʵ±µÄÊý¾Ý¿éÐèÒª¶Áд£¬Õâ 
ЩÇëÇ󽫱»¶ÀÁ¢µÄSCSIÉ豸Çý¶¯À´´¦Àí¡£ 
8.6  ÍøÂçÉ豸 
ÍøÂçÉ豸£¬¼´LinuxµÄÍøÂç×Óϵͳ£¬ÊÇÒ»¸ö·¢ËÍÓë½ÓÊÕÊý¾Ý°üµÄʵÌå¡£ËüÒ»°ã 
ÊÇÒ»¸öÏóÒÔÌ«Íø¿¨µÄÎïÀíÉ豸¡£ÓÐÐ©ÍøÂçÉ豸ÈçloopbackÉ豸½ö½öÊÇÒ»¸öÓà
À´Ïò×ÔÉí·¢ËÍÊý¾ÝµÄÈí¼þ¡£Ã¿¸öÍøÂçÉ豸¶¼ÓÃÒ»¸ödevice½á¹¹À´±íʾ¡£ÍøÂç 
É豸Çý¶¯ÔÚºËÐÄÆô¶¯³õʼ»¯ÍøÂçʱ½«ÕâЩÊÜ¿ØÉ豸µÇ¼Çµ½LinuxÖС£deviceÊý 
¾Ý½á¹¹Öаüº¬ÓÐÓйØÉ豸µÄÐÅÏ¢ÒÔ¼°ÓÃÀ´Ö§³Ö¸÷ÖÖÍøÂçЭÒéµÄº¯ÊýµØÖ·Ö¸Õë¡£ 
ÕâЩº¯ÊýÖ÷ÒªÓÃÀ´Ê¹ÓÃÍøÂçÉ豸´«ÊäÊý¾Ý¡£É豸ʹÓñê×¼ÍøÂçÖ§³Ö»úÖÆÀ´½«½Ó 
ÊÕµ½µÄÊý¾Ý´«µÝµ½Êʵ±µÄЭÒé²ã¡£ËùÓд«ÊäÓë½ÓÊÕµ½µÄÍøÂçÊý¾ÝÓÃÒ»¸ösk_buff 
½á¹¹À´±íʾ£¬ÕâЩÁé»îµÄÊý¾Ý½á¹¹Ê¹µÃÍøÂçЭÒéÍ·¿ÉÒÔ¸üÈÝÒ×µÄÌí¼ÓÓëɾ³ý¡£ 
ÍøÂçЭÒé²ãÈçºÎʹÓÃÍøÂçÉ豸ÒÔ¼°ÈçºÎʹÓÃsk_buffÀ´½»»»Êý¾Ý½«ÔÚÍøÂçÒ»Õ 
ÖÐÏêϸÃèÐð¡£±¾ÕÂÖ»ÌÖÂÛdeviceÊý¾Ý½á¹¹¼°ÈçºÎ·¢ÏÖÓë³õʼ»¯ÍøÂç¡£ 
deviceÊý¾Ý½á¹¹°üº¬ÒÔÏÂÓйØÍøÂçÉ豸µÄÐÅÏ¢£º 
Name 
     ÓëʹÓÃmknodÃüÁî´´½¨µÄ¿éÉè±¸ÌØÊâÎļþÓë×Ö·ûÉè±¸ÌØÊâÎļþ²»Í¬,ÍøÂç 
     Éè±¸ÌØÊâÎļþ½öÔÚÓÚÏµÍøÂçÉ豸·¢ÏÖÓë³õʼ»¯Ê±½¨¡£ËüÃÇʹÓñêÁ¢     ×¼µÄÃüÃû 
·½·¨ 
 Ã¿¸öÃû×Ö´ú±íÒ»ÖÖÀàÐ͵ÄÉ豸¡£¶ ¸öÏàͬÀàÐÍÉ豸½«´Ó 
     0¿ªÊ¼¼ÇÊý¡£ÕâÑùÒÔÌ«ÍøÉ豸±»ÃüÃûΪ/dev/eth0£¬/dev/eth1,/dev/eth2 
     µÈµÈ¡£ Ò»Ð©³£¼ûµÄÍøÂçÉ豸ÈçÏ£º 
      /dev/ethN 
                ÒÔÌ«ÍøÉ豸 
      /dev/slN 
                SLIPÉ豸 
      /dev/pppN 
                PPP É豸 
      /dev/lo 
                Loopback É豸 
Bus Information 
     ÕâЩÐÅÏ¢±»É豸Çý¶¯ÓÃÀ´¿ØÖÆÉ豸¡£irqºÅ±íʾÉ豸ʹÓõÄÖжϺš£base 
     addressÖ¸ÈκÎÉ豸ÔÚI/OÄÚ´æÖеĿØÖÆÓë״̬¼Ä´æÆ÷µØÖ·¡£DMAͨµÀ 
     Ö¸´ËÍøÂçÉ豸ʹÓõÄDMAͨµÀºÅ¡£ËùÓÐÕâЩÐÅÏ¢ÔÚÉ豸³õʼ»¯Ê±ÉèÖᣠ
Interface Flags 
     ËüÃÇÃèÐðÁËÍøÂçÉ豸µÄÊôÐÔÓ빦ÄÜ£º 
      IFF_UP 
                         ½Ó¿ÚÒѾ­½¨Á¢²¢ÔËÐР
      IFF_BROADCAST 
                         É豸ÖеĹ㲥µØÖ·ÓÐЧ 
      IFF_DEBUG 
                         É豸µ÷ÊÔ±»Ê¹ÄÜ 
      IFF_LOOPBACK 
                         ÕâÊÇÒ»¸öloopbackÉ豸 
      IFF_POINTTOPOINT 
                         ÕâÊǵ㵽µãÁ¬½Ó£¨SLIPºÍPPP£© 
      IFF_NOTRAILERS 
                         ÎÞÍøÂç×·×ÙÕß 
      IFF_RUNNING 
                         ×ÊÔ´Òѱ»·ÖÅä 
      IFF_NOARP 
                         ²»Ö§³ÖARPЭÒé 
      IFF_PROMISC 
                         É豸´¦ÓÚ»ìÂҵĽÓÊÕģʽ£¬ÎÞÂÛ°üµØÖ·ÔõÑùËü¶¼½«½ÓÊÕ 
      IFF_ALLMULTI 
                         ½ÓÊÕËùÓеÄIP¶à²¥Ö¡ 
      IFF_MULTICAST 
                         ¿ÉÒÔ½ÓÊÕIP¶à²¥Ö¡ 
Protocol Information 
     Ã¿¸öÉ豸ÃèÐðËü¿ÉÒÔ±»ÍøÂçЭÒé²ãÈçºÎʹÓ㺠
     mtu 
          Ö¸²»°üÀ¨ÈκÎÁ´Â·²ãÍ·ÔÚÄڵģ¬ÍøÂç¿É´«Ë͵Ä×î´ó°ü´óС¡£ 
          Õâ¸öÖµ±»Ð­Òé²ãÓÃÀ´Ñ¡ÔñÊʵ±´óСµÄ°ü½øÐз¢ËÍ¡£ 
     Family 
          Õâ¸öfamilyÓò±íʾÉ豸֧³ÖµÄЭÒé×å¡£ËùÓÐLinuxÍøÂçÉè 
          ±¸µÄ×åÊÇAF_INET£¬»¥ÁªÍøµØÖ·×å¡£ 
     Type 
          Õâ¸öÓ²¼þ½Ó¿ÚÀàÐÍÃèÐðÍøÂçÉ豸Á¬½ÓµÄ½éÖÊÀàÐÍ¡£Linux 
          ÍøÂçÉ豸¿ÉÒÔÖ§³Ö¶àÖÖ²»Í¬ÀàÐ͵ĽéÖÊ¡£°üÀ¨ÒÔÌ«Íø¡¢X.25£¬ 
          ÁîÅÆ»·£¬Slip£¬PPPºÍApple Localtalk¡£ 
     Addresses 
          ½á¹¹Öаüº¬´óÁ¿ÍøÂçÉ豸Ïà¹ØµÄµØÖ·£¬°üÀ¨IPµØÖ·¡£ 
Packet Queue 
     Ö¸ÍøÂçÉ豸Éϵȴý´«ÊäµÄsk_buff°ü¶ÓÁС£ 
Support Functions 
     Ã¿¸öÉ豸֧³ÖÒ»×é±ê×¼µÄÀý³Ì£¬ËüÃDZ»Ð­Òé²ã×÷ΪÉ豸Á´Â·²ã 
     µÄ½Ó¿Ú¶øµ÷Óá£Èç´«Ê佨Á¢ºÍÖ¡´«ÊäÀý³ÌÒÔ¼°Ìí¼Ó±ê×¼Ö¡Í·ÒÔ 
     ¼°ÊÕ¼¯Í³¼ÆÊý¾ÝµÄÀý³Ì¡£ÕâЩͳ¼ÆÊý¾Ý¿ÉÒÔʹÓÃifconfigÃüÁî 
     À´¹Û²ì¡£ 
8.6.1  ³õʼ»¯ÍøÂçÉ豸 
ÍøÂçÉ豸Çý¶¯¿ÉÒÔÏóÆäËüLinuxÉ豸Çý¶¯Ò»Ñù½¨Á¢µ½LinuxºËÐÄÖÐÀ´¡£ 
ÿ¸öDZÔÚµÄÍøÂçÉ豸ÓÉÒ»¸ö±»dev_baseÁ´±íÖ¸ÕëÖ¸ÏòµÄÍøÂçÉ豸Á´±í 
ÄÚ²¿µÄdevice½á¹¹±íʾ¡£µ±ÍøÂç²ãÐèҪij¸öÌØ¶¨¹¤×÷Ö´ÐÐʱ¡£Ëü½«µ÷ 
ÓôóÁ¿ÍøÂç·þÎñÀý³ÌÖеÄÒ»¸ö£¬ÕâЩÀý³ÌµÄµØÖ·±»±£´æÔÚdevice½á¹¹ 
ÄÚ²¿¡£³õʼ»¯Ê±Ã¿¸ödevice½á¹¹½ö°üº¬Ò»¸ö³õʼ»¯»òÕß¼ì²âÀý³ÌµÄµØ 
Ö·¡£ 
¶ÔÓÚÍøÂçÉ豸Çý¶¯ÓÐÁ½¸öÎÊÌâÐèÒª½â¾ö¡£Ê×ÏÈÊDz»ÊÇÿ¸öÁ¬½Óµ½ºËÐÄ 
ÖеÄÍøÂçÉ豸Çý¶¯¶¼ÓÐÉ豸Ҫ¿ØÖÆ¡£Æä´ÎËäÈ»µ×²ãµÄÉ豸Çý¶¯åÄÈ»²» 
ͬ£¬µ«ÏµÍ³ÖеÄÒÔÌ«ÍøÉ豸×ÜÊÇÃüÃûΪ/dev/eth0ºÍ/dev/eth1¡£»ìÏý 
ÍøÂçÉ豸Õâ¸öÎÊÌâºÜÈÝÒ×½â¾ö¡£µ±Ã¿¸öÍøÂçÉ豸µÄ³õʼ»¯Àý³Ì±»µ÷Óà
ʱ£¬½«µÃµ½Ò»¸öָʾÊÇ·ñ´æÔÚµ±Ç°¿ØÖÆÆ÷ʵÀýµÄ״̬ÐÅÏ¢¡£Èç¹ûÇý¶¯ 
ÕÒ²»µ½ÈκÎÉ豸£¬ËüÄǸöÓÉdev_baseÖ¸ÏòµÄdeviceÁ´±í½«±»É¾³ý¡£Èç 
¹ûÇý¶¯ÕÒµ½ÁËÉ豸ÔòËü½«ÓÃÉ豸Ïà¹ØÐÅÏ¢ÒÔ¼°ÍøÂçÉ豸Çý¶¯ÖÐÖ§³Åº¯ 
ÊýµÄµØÖ·Ö¸ÕëÀ´Ìî³ä´ËdeviceÊý¾Ý½á¹¹¡£ 
µÚ¶þ¸öÎÊÌ⣬¼´ÎªÒÔÌ«ÍøÉ豸¶¯Ì¬·ÖÅä±ê×¼Ãû³Æ/dev/ethNÉè±¸ÌØÊâ 
ÎļþµÄ¹¤×÷µÄ½â¾ö·½·¨Ê®·ÖÇÉÃî¡£ÔÚÉ豸Á´±íÖÐÓÐ8¸ö±ê×¼Èë¿Ú£»´Ó 
eth0µ½eth7¡£ËüÃÇʹÓÃÏàͬµÄ³õʼ»¯Àý³Ì£¬´Ë³õʼ»¯¹ý³Ì½«ÒÀ´Î³¢ÊÔ 
ÕâЩ±»½¨Á¢µ½ºËÐÄÖеÄÒÔÌ«ÍøÉ豸Çý¶¯Ö±µ½ÕÒµ½Ò»¸öÉ豸¡£µ±Çý¶¯ 
ÕÒµ½ÆäÒÔÌ«ÍøÉ豸ʱËü½«Ìî³ä¶ÔÓ¦µÄethNÉ豸½á¹¹¡£Í¬Ê±´ËÍøÂçÉ豸 
Çý¶¯³õʼ»¯Æä¿ØÖƵÄÎïÀíÓ²¼þ²¢ÕÒ³öʹÓõÄIRQºÅÒÔ¼°DMAͨµÀµÈÐÅÏ¢¡£ 
Èç¹ûÇý¶¯ÕÒµ½ÁË´ËÍøÂçÉ豸µÄ¶à¸öʵÀýËü½«½¨Á¢¶à¸ö/dev/ethN 
deviceÊý¾Ý½á¹¹¡£Ò»µ©ËùÓÐ8¸ö±ê×¼/dev/ethN±»·ÖÅäÍê±ÏÔò²»»áÔÚ¼ì²â 
ÆäËüµÄÒÔÌ«ÍøÉ豸¡£ 
 
-- 
¡ù À´Ô´:¡¤BBS Ë®Ä¾Ç廪վ bbs.net.tsinghua.edu.cn¡¤[FROM: 202.114.2.2] 

BBSˮľÇ廪վ¡Ã¾«»ªÇø