ºìÁªLinuxÃÅ»§
Linux°ïÖú

LinuxϵͳÖÐÉ豸¹ÜÀí

·¢²¼Ê±¼ä:2006-11-20 00:26:22À´Ô´:ºìÁª×÷Õß:xuanchengzi
¡¡¡¡É豸¹ÜÀíÊDzÙ×÷ϵͳÎå´ó¹ÜÀíÖÐ×ÔӵIJ¿·Ö¡£ÓëUnixϵͳһÑù£¬Linuxϵͳ²ÉÓÃÉ豸Îļþͳһ¹ÜÀíÓ²¼þÉ豸£¬´Ó¶ø½«Ó²¼þÉ豸µÄÌØÐÔ¼°¹ÜÀíϸ½Ú¶ÔÓû§Òþ²ØÆðÀ´£¬ÊµÏÖÓû§³ÌÐòÓëÉ豸ÎÞ¹ØÐÔ¡£ÔÚLinuxϵͳÖУ¬Ó²¼þÉ豸·ÖΪÁ½ÖÖ£¬¼´¿éÉ豸ºÍ×Ö·ûÉ豸¡£

¡¡¡¡1.ÌØ±ðÎļþ

¡¡¡¡Óû§ÊÇͨ¹ýÎļþϵͳÓëÉ豸½Ó¿ÚµÄ£¬ËùÓÐÉ豸¶¼×÷ÎªÌØ±ðÎļþ£¬´Ó¶øÔÚ¹ÜÀíÉϾ;ßÓÐһЩ¹²ÐÔ¡£

¡¡¡¡(1)ÿ¸öÉ豸¶¼¶ÔÓ¦ÎļþϵͳÖеÄÒ»¸öË÷Òý½Úµã£¬¶¼ÓÐÒ»¸öÎļþÃû¡£É豸µÄÎļþÃûÒ»°ãÓÉÁ½²¿·Ö¹¹³É£¬µÚÒ»²¿·ÖÊÇÖ÷É豸ºÅ£¬µÚ¶þ²¿·ÖÊÇ´ÎÉ豸ºÅ¡£

¡¡¡¡Ö÷É豸ºÅ´ú±íÉ豸µÄÀàÐÍ£¬¿ÉÒÔΩһµØÈ·¶¨É豸µÄÇý¶¯³ÌÐòºÍ½çÃæ£¬Èçhd±íʾIDEÓ²ÅÌ£¬sd±íʾSCSIÓ²ÅÌ£¬tty±íʾÖÕ¶ËÉ豸µÈ£»´ÎÉ豸ºÅ´ú±íͬÀàÉ豸ÖеÄÐòºÅ£¬Èçhda±íʾIDEÖ÷Ó²ÅÌ£¬hdb±íʾIDE´ÓÓ²Å̵ȡ£

¡¡¡¡£¨2£©Ó¦ÓóÌÐòͨ³£¿ÉÒÔͨ¹ýϵͳµ÷ÓÃopen( )´ò¿ªÉ豸Îļþ£¬½¨Á¢ÆðÓëÄ¿±êÉ豸µÄÁ¬½Ó¡£

¡¡¡¡£¨3£©¶ÔÉ豸µÄʹÓÃÀàËÆÓÚ¶ÔÎļþµÄ´æÈ¡¡£´ò¿ªÉ豸ÎļþÒԺ󣬾ͿÉÒÔͨ¹ýread( )¡¢write( )¡¢ioctl( )µÈÎļþ²Ù×÷¶ÔÄ¿±êÉ豸½øÐвÙ×÷¡£

¡¡¡¡£¨4£©É豸Çý¶¯³ÌÐò¶¼ÊÇϵͳÄں˵ÄÒ»²¿·Ö£¬ËüÃDZØÐëΪϵͳÄں˻òËüÃǵÄ×ÓϵͳÌṩһ¸ö±ê×¼µÄ½Ó¿Ú¡£ÀýÈ磬һ¸öÖÕ¶ËÇý¶¯³ÌÐò±ØÐëΪLinuxÄÚºËÌṩһ¸öÎļþI/O½Ó¿Ú£»Ò»¸öSCSIÉ豸Çý¶¯³ÌÐòÓ¦¸ÃΪSCSI×ÓϵͳÌṩһ¸öSCSIÉ豸½Ó¿Ú£¬Í¬Ê±SCSI×ÓϵͳҲӦΪÄÚºËÌṩÎļþI/OºÍ»º³åÇø¡£

¡¡¡¡£¨5£©É豸Çý¶¯³ÌÐòÀûÓÃһЩ±ê×¼µÄÄں˷þÎñ£¬ÈçÄÚ´æ·ÖÅäµÈ¡£ÁíÍ⣬´ó¶àÊýLinuxÉ豸Çý¶¯³ÌÐò¶¼¿ÉÒÔÔÚÐèҪʱװÈëÄںˣ¬²»ÐèҪʱ¿ÉÒÔÐ¶ÔØÏÂÀ´¡£

¡¡¡¡´¦ÓÚÓ¦ÓòãµÄ½ø³Ìͨ¹ýÎļþÃèÊö×ÖfdÓëÒÑ´ò¿ªÎļþµÄfile½á¹¹ÏàÁªÏµ¡£ÔÚÎļþϵͳ²ã£¬°´ÕÕÎļþϵͳµÄ²Ù×÷¹æÔò¶Ô¸ÃÎļþ½øÐÐÏàÓ¦´¦Àí¡£

¡¡¡¡¶ÔÓÚÒ»°ãÎļþ(¼´´ÅÅÌÎļþ)£¬Òª½øÐпռäµÄÓ³Éä--´ÓÆÕͨÎļþµÄÂß¼­¿Õ¼äÓ³Éäµ½É豸µÄÂß¼­¿Õ¼ä£¬È»ºóÔÚÉ豸Çý¶¯²ã×ö½øÒ»²½Ó³Éä--´ÓÉ豸µÄÂß¼­¿Õ¼äÓ³Éäµ½ÎïÀí¿Õ¼ä(¼´É豸µÄÎïÀíµØÖ·¿Õ¼ä)£¬½ø¶øÇý¶¯µ×²ãÎïÀíÉ豸¹¤×÷¡£

¡¡¡¡¶ÔÓÚÉ豸Îļþ£¬ÔòÎļþµÄÂß¼­¿Õ¼äͨ³£¾ÍµÈ¼ÛÓÚÉ豸µÄÂß¼­¿Õ¼ä£¬È»ºó´ÓÉ豸µÄÂß¼­¿Õ¼äÓ³Éäµ½É豸µÄÎïÀí¿Õ¼ä£¬ÔÙÇý¶¯µ×²ãµÄÎïÀíÉ豸¹¤×÷¡£

¡¡¡¡2.É豸Çý¶¯³ÌÐòºÍÄÚºËÖ®¼äµÄ½Ó¿Ú

¡¡¡¡LinuxϵͳºÍÉ豸Çý¶¯³ÌÐòÖ®¼äʹÓñê×¼µÄ½»»¥½Ó¿Ú¡£ÎÞÂÛÊÇ×Ö·ûÉ豸¡¢¿éÉ豸»¹ÊÇÍøÂçÉ豸µÄÇý¶¯³ÌÐò£¬µ±ÄÚºËÇëÇóËüÃÇÌṩ·þÎñʱ£¬¶¼Ê¹ÓÃͬÑùµÄ½Ó¿Ú¡£

¡¡¡¡LinuxÌṩÁËÒ»ÖÖȫеĻúÖÆ£¬¾ÍÊÇ¡°¿É°²×°Ä£¿é¡±¡£¿É°²×°Ä£¿éÊÇ¿ÉÒÔÔÚϵͳÔËÐÐʱ¶¯Ì¬µØ°²×°ºÍ²ðжµÄÄÚºËÄ£¿é¡£ÀûÓÃÕâ¸ö»úÖÆ£¬¿ÉÒÔ¸ù¾ÝÐèÒªÔÚ²»±Ø¶ÔÄÚºËÖØÐ±àÒëÁ¬½ÓµÄÌõ¼þÏ£¬½«¿É°²×°Ä£¿é¶¯Ì¬²åÈëÔËÐÐÖеÄÄںˣ¬³ÉΪÆäÖÐÒ»¸öÓлú×é³É²¿·Ö£¬»òÕß´ÓÄÚºËÐ¶ÔØÒѰ²×°µÄÄ£¿é¡£É豸Çý¶¯³ÌÐò»òÓëÉ豸Çý¶¯½ôÃÜÏà¹ØµÄ²¿·Ö(ÈçÎļþϵͳ) ¶¼ÊÇÀûÓÿɰ²×°Ä£¿éʵÏֵġ£

¡¡¡¡ÔÚÓ¦ÓóÌÐò½çÃæÉÏ£¬ÀûÓÃÄÚºËÌṩµÄϵͳµ÷ÓÃÀ´ÊµÏֿɰ²×°Ä£¿éµÄ¶¯Ì¬°²×°ºÍ²ðж¡£µ«Í¨³£Çé¿öÏ£¬Óû§ÊÇÀûÓÃϵͳÌṩµÄ²åÈëÄ£¿é¹¤¾ßºÍÒÆ×ßÄ£¿é¹¤¾ßÀ´×°Ð¶¿É°²×°Ä£¿é¡£²åÈëÄ£¿éµÄ¹¤×÷Ö÷ÒªÈçÏ£º

¡¡¡¡(1) ´ò¿ªÒª°²×°µÄÄ£¿é£¬°ÑËü¶Áµ½Óû§¿Õ¼ä¡£ÕâÖÖ¡°Ä£¿é¡±¾ÍÊǾ­¹ý±àÒ뵫ÉÐδÁ¬½ÓµÄ.oÎļþ¡£

¡¡¡¡(2) ±ØÐë°ÑÄ£¿éÄÚÉæ¼°¶ÔÍâ·ÃÎʵķûºÅ(º¯ÊýÃû»ò±äÁ¿Ãû)Á¬½Óµ½Äںˣ¬¼´°ÑÕâЩ·ûºÅÔÚÄÚºËÓ³ÏñÖеĵØÖ·ÌîÈë¸ÃÄ£¿éÐèÒª·ÃÎÊÕâЩ·ûºÅµÄÖ¸Áî¼°Êý¾Ý½á¹¹ÖС£

¡¡¡¡(3) ÔÚÄں˴´½¨Ò»¸ömoduleÊý¾Ý½á¹¹£¬²¢ÉêÇëËùÐèµÄϵͳ¿Õ¼ä¡£

¡¡¡¡(4) ×îºó£¬°ÑÓû§¿Õ¼äÖÐÍê³ÉÁËÁ¬½ÓµÄÄ£¿éÓ³Ïñ×°ÈëÄں˿ռ䣬²¢ÔÚÄÚºËÖС°µÇ¼Ç¡±±¾Ä£¿éµÄÓйØÊý¾Ý½á¹¹(Èçfile_operations½á¹¹)£¬ÆäÖÐÓÐÖ¸ÏòÖ´ÐÐÏà¹Ø²Ù×÷º¯ÊýµÄÖ¸Õë¡£

¡¡¡¡ÈçǰËùÊö£¬LinuxϵͳÊÇÒ»¸ö¶¯Ì¬µÄ²Ù×÷ϵͳ¡£Óû§¸ù¾Ý¹¤×÷ÖеÄÐèÒª£¬»á¶ÔϵͳÖÐÉè±¸ÖØÐÂÅäÖã¬È簲װеĴòÓ¡»ú¡¢Ð¶ÔØÀÏʽÖն˵ȡ£ÕâÑù£¬Ã¿µ±LinuxϵͳÄں˳õÆôʱ£¬Ëü¶¼Òª¶ÔÓ²¼þÅäÖýøÐмì²â£¬ºÜÓпÉÄÜ»á¼ì²âµ½²»Í¬µÄÎïÀíÉ豸£¬¾ÍÐèÒª²»Í¬µÄÇý¶¯³ÌÐò¡£

¡¡¡¡ÔÚ¹¹½¨ÏµÍ³ÄÚºËʱ£¬¿ÉÒÔʹÓÃÅäÖýű¾½«É豸Çý¶¯³ÌÐò°üº¬ÔÚϵͳÄÚºËÖС£ÔÚϵͳÆô¶¯Ê±¶ÔÕâЩÇý¶¯³ÌÐò³õʼ»¯£¬ËüÃÇ¿ÉÄÜδÕÒµ½Ëù¿ØÖƵÄÉ豸£¬¶øÁíÍâµÄÉ豸Çý¶¯³ÌÐò¿ÉÒÔÔÚÐèҪʱ×÷ΪÄÚºËÄ£¿é×°È뵽ϵͳÄÚºËÖС£

¡¡¡¡ÎªÁËÊÊÓ¦É豸Çý¶¯³ÌÐò¶¯Ì¬Á¬½ÓµÄÌØÐÔ£¬É豸Çý¶¯³ÌÐòÔÚÆä³õʼ»¯Ê±¾ÍÔÚϵͳÄÚºËÖнøÐеǼǡ£LinuxϵͳÀûÓÃÉ豸Çý¶¯³ÌÐòµÄµÇ¼Ç±í×÷ΪÄÚºËÓëÇý¶¯³ÌÐò½Ó¿ÚµÄÒ»²¿·Ö£¬ÕâЩ±íÖаüÀ¨Ö¸ÏòÓйش¦Àí³ÌÐòµÄÖ¸ÕëºÍÆäËüÐÅÏ¢¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. xuanchengzi ÓÚ 2006-11-20 00:27:03·¢±í:

    ¡¡¡¡3.×Ö·ûÉ豸

    ¡¡¡¡ÔÚLinuxϵͳÖУ¬´òÓ¡»ú¡¢Öն˵È×Ö·ûÉ豸¶¼×÷Ϊ×Ö·ûÌØ±ðÎļþ³öÏÖÔÚÓû§ÃæÇ°¡£Óû§¶Ô×Ö·ûÉ豸µÄʹÓþͺʹæÈ¡ÆÕͨÎļþÒ»Ñù¡£ÔÚÓ¦ÓóÌÐòÖУ¬Ê¹Óñê×¼µÄϵͳµ÷ÓÃÀ´´ò¿ª¡¢¹Ø±Õ¡¢¶Áд×Ö·ûÉ豸¡£µ±×Ö·ûÉ豸³õʼ»¯Ê±£¬ÆäÉ豸Çý¶¯³ÌÐò±»Ìí¼Óµ½ÓÉdevice_struct½á¹¹×é³ÉµÄchrdevs½á¹¹Êý×éÖС£

    ¡¡¡¡device_struct½á¹¹ÓÉÁ½Ïî¹¹³É£¬Ò»¸öÊÇÖ¸ÏòÒѵǼǵÄÉ豸Çý¶¯³ÌÐòÃûµÄÖ¸Õ룬ÁíÒ»¸öÊÇÖ¸Ïòfile_operations½á¹¹µÄÖ¸Õë¡£¶øfile_operations½á¹¹µÄ³É·Ö¼¸ºõÈ«ÊǺ¯ÊýÖ¸Õ룬·Ö±ðÖ¸ÏòʵÏÖÎļþ²Ù×÷µÄÈë¿Úº¯Êý¡£É豸µÄÖ÷É豸ºÅÓÃÀ´¶ÔchrdevsÊý×é½øÐÐË÷Òý¡£

    ¡¡¡¡Ç°Ãæ½²¹ý£¬Ã¿¸öVFSË÷Òý½Úµã¶¼ºÍһϵÁÐÎļþ²Ù×÷ÏàÁªÏµ£¬²¢ÇÒÕâЩÎļþ²Ù×÷ËæË÷Òý½ÚµãËù´ú±íµÄÎļþÀàÐͲ»Í¬¶ø²»Í¬¡£Ã¿µ±Ò»¸öVFSË÷Òý½ÚµãËù´ú±íµÄ×Ö·ûÉ豸Îļþ´´½¨Ê±£¬ËüµÄÓйØÎļþµÄ²Ù×÷¾ÍÉèÖÃΪĬÈϵÄ×Ö·ûÉ豸²Ù×÷¡£

    ¡¡¡¡Ä¬ÈϵÄÎļþ²Ù×÷Ö»°üº¬Ò»¸ö´ò¿ªÎļþµÄ²Ù×÷¡£µ±´ò¿ªÒ»¸ö´ú±í×Ö·ûÉ豸µÄÌØ±ðÎļþÒԺ󣬾͵õ½ÏàÓ¦µÄVFSË÷Òý½Úµã£¬ÆäÖаüÀ¨¸ÃÉ豸µÄÖ÷É豸ºÅºÍ´ÎÉ豸ºÅ¡£

    ¡¡¡¡ÀûÓÃÖ÷É豸ºÅ¾Í¿ÉÒÔ¼ìË÷chrdevsÊý×飬½ø¶ø¿ÉÒÔÕÒµ½ÓйشËÉ豸µÄ¸÷ÖÖÎļþ²Ù×÷¡£ÕâÑù£¬Ó¦ÓóÌÐòÖеÄÎļþ²Ù×÷¾Í»áÓ³Éäµ½×Ö·ûÉ豸µÄÎļþ²Ù×÷µ÷ÓÃÖС£

    ¡¡¡¡4.¿éÉ豸

    ¡¡¡¡¶Ô¿éÉ豸µÄ´æÈ¡ºÍ¶ÔÎļþµÄ´æÈ¡·½Ê½Ò»Ñù£¬ÆäʵÏÖ»úÖÆÒ²ºÍ×Ö·ûÉ豸ʹÓõĻúÖÆÏàͬ¡£LinuxϵͳÖÐÓÐÒ»¸öÃûΪblkdevsµÄ½á¹¹Êý×飬ËüÃèÊöÁËһϵÁÐÔÚϵͳÖеǼǵĿéÉ豸¡£

    ¡¡¡¡Êý×éblkdevsҲʹÓÃÉ豸µÄÖ÷É豸ºÅ×÷ΪË÷Òý£¬ÆäÔªËØÀàÐÍÊÇdevice_struct½á¹¹¡£¸Ã½á¹¹ÖаüÀ¨Ö¸ÏòÒѵǼǵÄÉ豸Çý¶¯³ÌÐòÃûµÄÖ¸ÕëºÍÖ¸Ïòblock_device_operations½á¹¹µÄÖ¸Õë¡£

    ¡¡¡¡ÔÚblock_device_operations½á¹¹Öаüº¬Ö¸ÏòÓйزÙ×÷µÄº¯ÊýÖ¸Õë¡£ËùÒÔ£¬¸Ã½á¹¹¾ÍÊÇÁ¬½Ó³éÏóµÄ¿éÉ豸²Ù×÷Óë¾ßÌå¿éÉ豸ÀàÐ͵IJÙ×÷Ö®¼äµÄÊàŦ¡£

    ¡¡¡¡Óë×Ö·ûÉ豸²»Ò»Ñù£¬¿éÉ豸Óм¸ÖÖÀàÐÍ£¬ÀýÈçSCSIÉ豸ºÍIDEÉ豸¡£Ã¿Àà¿éÉ豸¶¼ÔÚLinuxϵͳÄÚºËÖеǼǣ¬²¢ÏòÄÚºËÌṩ×Ô¼ºµÄÎļþ²Ù×÷¡£

    ¡¡¡¡ÎªÁ˰Ѹ÷ÖÖ¿éÉ豸µÄ²Ù×÷ÇëÇó¶ÓÁÐÓÐЧµØ×éÖ¯ÆðÀ´£¬ÄÚºËÖÐÉèÖÃÁËÒ»¸ö½á¹¹Êý×éblk_dev£¬¸ÃÊý×éÖеÄÔªËØÀàÐÍÊÇblk_dev_struct½á¹¹¡£Õâ¸ö½á¹¹ÓÉÈý¸ö³É·Ö×é³É£¬ÆäÖ÷ÌåÊÇÖ´ÐвÙ×÷µÄÇëÇó¶ÓÁÐrequest_queue£¬»¹ÓÐÒ»¸öº¯ÊýÖ¸Õëqueue¡£

    ¡¡¡¡µ±Õâ¸öÖ¸Õ벻Ϊ0ʱ£¬¾Íµ÷ÓÃÕâ¸öº¯ÊýÀ´ÕÒµ½¾ßÌåÉ豸µÄÇëÇó¶ÓÁС£ÕâÊÇ¿¼Âǵ½¶à¸öÉ豸¿ÉÄܾßÓÐͬһÖ÷É豸ºÅ£¬¸ÃÖ¸ÕëÔÚÉ豸³õʼ»¯Ê±±»ÉèÖúá£Í¨³£µ±Ëü²»Îª0ʱ£¬»¹ÒªÊ¹ÓøýṹÖеÄÁíÒ»¸öÖ¸Õëdata£¬ÓÃÀ´Ìṩ¸¨ÖúÐÔÐÅÏ¢£¬°ïÖú¸Ãº¯ÊýÕÒµ½Ìض¨É豸µÄÇëÇó¶ÓÁС£Ã¿Ò»¸öÇëÇóÊý¾Ý½á¹¹¶¼´ú±íÒ»¸öÀ´×Ô»º³åÇøµÄÇëÇó¡£

    ¡¡¡¡Ã¿µ±»º³åÇøÒªºÍÒ»¸öµÇ¼Ç¹ýµÄ¿éÉ豸½»»»Êý¾Ý£¬Ëü¶¼»áÔÚblk_dev_structÖÐÌí¼ÓÒ»¸öÇëÇóÊý¾Ý½á¹¹.

    ¡¡¡¡Ã¿Ò»¸öÇëÇó¶¼ÓÐÒ»¸öÖ¸ÕëÖ¸ÏòÒ»¸ö»ò¶à¸öbuffer_headÊý¾Ý½á¹¹£¬¶ø¸Ã½á¹¹¶¼ÊÇÒ»¸ö¶ÁдÊý¾Ý¿éµÄÇëÇó¡£Ã¿Ò»¸öÇëÇó½á¹¹¶¼ÔÚÒ»¸ö¾²Ì¬Á´±íall_requestsÖС£Èô¸ÉÇëÇóÊÇÌí¼Óµ½Ò»¸ö¿ÕµÄÇëÇóÁ´±íÖУ¬Ôòµ÷ÓÃÉ豸Çý¶¯³ÌÐòµÄÇëÇóº¯Êý£¬¿ªÊ¼´¦Àí¸ÃÇëÇó¶ÓÁС£·ñÔò£¬É豸Çý¶¯³ÌÐò¾Í¼òµ¥µØ´¦ÀíÇëÇó¶ÓÁÐÖеÄÿһ¸öÇëÇó¡£

    ¡¡¡¡µ±É豸Çý¶¯³ÌÐòÍê³ÉÁËÒ»¸öÇëÇóºó£¬¾Í°Ñbuffer_head½á¹¹´Órequest½á¹¹ÖÐÒÆ×ߣ¬²¢±ê¼Çbuffer_head½á¹¹ÒѸüУ¬Í¬Ê±½âËø£¬ÕâÑù£¬¾Í¿ÉÒÔ»½ÐÑÏàÓ¦µÄµÈ´ý½ø³Ì¡£