Ñ§Ï°Íø¿¼ÊÔѧϰ×ÊÁÏ

Gzu521.com

Linuxѧϰ±Ê¼Ç(3)

LINUX½Ì³Ì   µã»÷£º´Î   ·¢²¼Ê±¼ä£º2006-12-19   ¡¾×ÖÌ壺´ó ÖРС¡¿   À´Ô´£ºblog
GZU521.COMÑ§Ï°Íø

¶ÎÑ¡Ôñ·û
 
·Ö¶Î»úÖÆ
Âß¼­µØÖ·Í¨¹ý·Ö¶Î»úÖÆ×Ô¶¯Ó³É䣨±ä»»£©µ½Öмä²ã4gÏßÐεØÖ·¿Õ¼ä£¨32λµÄ£©


ѰַµÄ²½Ö裺
1£©ÔÚ¶ÎÑ¡Ôñ·ûÖÐ×°Èë16λÊý£¬Í¬Ê±¸ø³ö32λµØÖ·Æ«ÒÆÁ¿£¨±ÈÈçÔÚes1,ediÖУ©
2£©¸ù¾Ý¶ÎÑ¡Ôñ·ûÖеÄË÷ÒýÖµ¡¢ti¼°rplÖµ£¬ÔÙ¸ù¾ÝÏàÓ¦ÃèÊö·û±í¼Ä´æÆ÷ÖеĶεØÖ·ºÍ¶Î½çÏÞ£¬½øÐÐһϵÁкϷ¨ÐÔ¼ì²é£¨ÈçÌØÈ¨¼¶¡¢½çÏÞ¼ì²é£©
Èç¹û¶ÎÎÞÎÊÌ⣬¾ÍÈ¡³öÏàÓ¦µÄÃèÊö·û·ÅÈë¶ÎÃèÊö·û¸ßËÙ»º³å¼Ä´æÆ÷ÖÐ
3£©½«ÃèÊö·ûÖеÄ32λ¶Î»ùµØÖ·ºÍ·ÅÔÚ esi¡¢ediµÈÖеÄ32λÓÐЧµØÖ·Ïà¼Ó£¬ÐγÉÁË32λÎïÀíµØÖ·


cpu ½øÐеØÖ·±ä»»£¨Ó³É䣩µÄÖ÷ҪĿµÄÊÇΪÁ˽â¾öÐéÄâÄÚ´æ¿Õ¼äµ½ÎïÀíÄÚ´æ¿Õ¼äµÄÓ³ÉäÎÊÌâ¡£

ʵģʽºÍ±£»¤Ä£Ê½Ñ°Ö·
ʵģʽ£ºÑ°Ö·Ò»¸öÄÚ´æµØÖ·Ö÷ÒªÊÇʹÓÃ¶ÎºÍÆ«ÒÆÖµ£¬¶ÎÖµ±»´æ·ÅÔڶμĴæÆ÷ÖУ¨ÀýÈçds£©£¬²¢ÇҶεij¤¶È±»¹Ì¶¨Îª64kb¡£¶ÎÄÚÆ«ÒƵØÖ·´æ·ÅÔÚÈÎÒâÒ»¸ö¿ÉÓÃÓÚѰַµÄ¼Ä´æÆ÷ÖУ¨ÀýÈçsi£©¡£Òò´Ë£¬¸ù¾Ý¶Î¼Ä´æÆ÷ºÍÆ«ÒÆ¼Ä´æÆ÷ÖеÄÖµ£¬¾Í¿ÉÒÔËã³öʵ¼ÊÖ¸ÏòµÄÄÚ´æµØÖ·
 

숱飼
1£©ºÍʵģʽϵÄѰַÏà±È£¬¶Î¼Ä´æÆ÷Öµ»»³ÉÁ˶ÎÃèÊö·û±íÖÐÏàÓ¦¶ÎÃèÊö·ûµÄË÷ÒýÖµÒÔ¼°¶Î±íÑ¡ÔñλºÍÌØÈ¨¼¶£­£­¶ÎÑ¡Ôñ·û
2£©Æ«ÒÆÖµ»¹ÊÇʹÓÃÁËԭʵģʽϵĸÅÄî

±£»¤Ä£Ê½
1£©¶Î¼Ä´æÆ÷Öдæ·ÅµÄ²»ÔÙÊDZ»Ñ°Ö·¶ÎµÄ»ùµØÖ·£¬¶øÊÇÒ»¸ö¶ÎÃèÊö·û±í£¨segment descriptor table£©ÖÐijһÃèÊö·ûÏîÔÚ±íÖеÄË÷ÒýÖµ
2£©¶ÎµÄ³¤¶È¿É±ä£¬ÓÉÃèÊö·ûÖеÄÄÚÈÝÖ¸¶¨
 

·ÖÒ³»úÖÆ
·ÖÒ³»úÖÆ¹¦ÄÜÊǰÑÓɶλúÖÆ×ª»»¶øÀ´µÄÏßÐÔµØÖ·×ª»»Î»ÎïÀíµØÖ·

ת»¯¹ý³ÌÈçͼ£º
 

ת»»²½Öè
1£©cr3°üº¬×ÅҳĿ¼µÄÆðʼµØÖ·£¬ÓÃ32λÏßÐÔµØÖ·µÄ×î¸ß10λa31~a22×÷ΪҳĿ¼µÄҳĿ¼ÏîµÄË÷Òý£¬½«Ëü³ËÒÔ4£¬Óëcr3ÖеÄҳĿ¼µÄÆðʼµØÖ·Ïà¼Ó£¬ÐγÉÏàÓ¦Ò³±íµÄµØÖ·
2£©´ÓÖ¸¶¨µØÖ·ÖÐÈ¡³ö32λҳĿ¼ÏËüµÄµÍ12λΪ00£¬Õâ32λÊÇÒ³±íµÄÆðʼµØÖ·ÓÃ32λÏßÐÔµØÖ·ÖеÄa21-a22λ×÷Ϊҳ±íÖеÄÒ³ÃæË÷Òý£¬½«Ëü³ËÒÔ4£¬ÓëÒ³±íµÄÆðʼµØÖ·Ïà¼Ó£¬ÐγÉ32Î»Ò³ÃæµØÖ·¡£
3£©½«a11-a0×÷ΪÏà¶ÔÓÚÒ³ÃæµØÖ·µÄÆ«ÒÆÁ¿£¬Óë32Î»Ò³ÃæµØÖ·Ïà¼Ó£¬ÐγÉ23Î»Ò³ÃæÎïÀíµØÖ·¡£

À©Õ¹·ÖÒ³
Ò³µÄ´óСΪ4mb£¨2µÄ22´Î·½£©£¬À©Õ¹Ç°ÊÇ4kb
ÏßÐÔµØÖ··ÖΪÁ½¸öÓò£º×î¸ß10λµÄĿ¼ÓòºÍÆäÓà22λµÄÆ«ÒÆÁ¿£¬Èçͼ
¡¾Í¼¡¿
 

ÐéÄâÄÚ´æ¹ÜÀíµÄÊý¾Ý½á¹¹
?linuxÖÐҳĿ¼(pgd) ¡¢Ò³ÃæÖмäĿ¼(pmd)¡¢Ò³±í(pt)£¬·Ö±ðÓÉÊý¾Ý½á¹¹pgd_t£¬pmd_t£¬pte_tÀ´±íʾ¡£
?typedef struct { unsigned long pmd; }pmd_t;
?typedef struct { unsigned long pte; } pte_t;
?typedef struct { unsigned long pgd; } pgd_t;
?typedef struct { unsigned long pgprot; }pgprot_t;

#define page_shift 12
//Æ«ÒÆÁ¿µÄλÊý£¬Òò´ËÒ³Ãæ´óСΪ4kb n#define page_size(1ul<<page_shift) n#define page_mask (~(page_size-1)
//Öµ¶¨ÒåΪ0xfffff000,ÓÃÒÔÆÁ±ÎµôÆ«ÒÆÁ¿ÓòµÄËùÓÐλ

¶¨ÒåҳĿ¼´óС¡¢Ò³Ä¿Â¼ÑÚÂëµÈÐÅÏ¢µÄ´úÂëÈçÏ£º
?#define pgdir_shift 22 //ÏßÐÔµØÖ·ÖÐÒ³Ä¿Â¼Æ«ÒÆÁ¿Î»Êý
?#define pgdir_size (1ul<< pgdir_shift) ?//Ò»¸öҳĿ¼ÏîµÄµØÖ·¿Õ¼ä(4m) ?#define pgdir_mask (~(pgdir_size-1)) ?//ҳĿ¼ÑÚÂë
?#define ptrs_per_pgd 1024 ?//ҳĿ¼±íÏî¸öÊý

ÆäÖе±Ê±Ìáµ½µÄÒ»¸öÎÊÌâ¾ÍÊÇ£ºÐéÄâµØÖ·ºÍÂß¼­µØÖ·¾¿¾¹ÓкÍÇø±ð£¿

 

 

 


ÄÚ´æ³õʼ»¯ºÍ·ÖÅ仨ÊÕ

1 ÄÚ´æ³õʼ»¯
2 ÄÚ´æµÄ·ÖÅäºÍ»ØÊÕ£¨»ï°éËã·¨,slab,cache)

ÄÚ´æ³õʼ»¯

startup_32 º¯Êý
start_kernel º¯Êý

startup_32 º¯Êý
±¾º¯ÊýÍêÈ«Óûã±àÓïÑÔʵÏÖ£¬Ö÷Òª¹¦ÄÜÊÇÆôÓ÷ÖÒ³»úÖÆ¡£ lµ±linuxÆô¶¯Ê±£¬Ê×ÏÈÔËÐÐÔÚʵģʽÏ£¨¶ÔÎïÀíµØÖ·²Ù×÷£©£¬Ëæºó¾ÍҪתµ½±£»¤Ä£Ê½Ï£¨¶ÔÐéÄâµØÖ·²Ù×÷£©ÔËÐÐ,linuxÄں˴úÂëµÄÈë¿Úµã¾ÍÊÇ/arch/i386/kernel/head.sÖеÄstartup_32¡£


startup_32Ö÷Òª×öµÄ¹¤×÷£ºl

±àÒëÄں˹ý³ÌÖУ¬Ê×Ïȳõʼ»¯Ò»¸öҳĿ¼swapper_pg_dir£¬ºÍǰ8mÎïÀíµØÖ·¿Õ¼äµÄÒ³±ípg0£¬pg1¡£ÕâÑù£¬³õʼ״̬Ï£¬Óû§¿Õ¼äºÍÄں˿ռ䶼ֻӳÉäÁË¿ªÍ·µÄÁ½¸öĿ¼Ï¼´8mµÄ¿Õ¼ä£¬²¢ÇÒÓÐ×ÅÏàͬµÄÓ³Éä¡£ lÄں˿ªÊ¼ÔËÐкóÔËÐÐÔÚÄں˿ռ䣬ÄÇÄ©£¬ÎªÊ²Ã´°ÑÓû§¿Õ¼äµÄµÍÇø£¨8m£©Ò²½øÐÐÓ³ÉäÄØ£¿¼ò¶øÑÔÖ®£¬[ΪÁËʵģʽµ½±£»¤Ä£Ê½µÄƽÎȹý¶É]ÕâÊÇÒòΪ¸Õ¿ªÆôÒ³ÃæÓ³Éäʱ£¬£¨²¢²»ËµÃ÷linuxÄÚºËÕæÕý½øÈëÁ˱£»¤Ä£Ê½£©Ö¸Áî¼Ä´æÆ÷eipÈÔÖ¸ÏòµØÖ·£¬ÈÔ»áÒÔÎïÀíµØÖ·È¡Ö¸ÁÈç¹ûҳĿ¼ֻӳÉäÄں˿ռ䣬¶ø²»Ó³ÉäÓû§¿Õ¼äµÄµÍÇø£¬ÔòÒ»µ©¿ªÆôÒ³Ó³Éä»úÖÆºó¾Í²»ÄܼÌÐøÖ´ÐÐÁË¡£

³õʼҳĿ¼swapper_pg_dirµÄÓ³Éäͼ
¡¾Í¼£¬Òª²åÈë¡¿

µ±startup_32½«Ò³Ä¿Â¼swapper_pg_dirµÄÎïÀíµØÖ·×°Èë¿ØÖÆ¼Ä´æÆ÷cr3£¬²¢°Ñcr0µÄ×î¸ßλÖÃ1£¬¼´¿ªÆôÁË·ÖÒ³»úÖÆ¡£Ëæºó£¬±àÒë³ÌÐòʹËùÓеķûºÅµØÖ·¶¼ÔÚÐéÄâµØÖ·¿Õ¼äÖУ¬Ö¸Áî¼Ä´æÆ÷eipÖ¸ÏòÐéÄâµØÖ·¿Õ¼äµÄij¸öµØÖ·£¬¾ÍʹcpuתÈëÁËÄں˿ռ䣬Íê³É´Óʵģʽµ½±£»¤Ä£Ê½µÄ¹ý¶É¡£ º¯Êýsetup_archÈ·¶¨start_kernelÖÐÄÚ´æ³õ ʼ»¯µÄÆðʼµØÖ·start_memºÍ½áÊøµØÖ·end_mem¡£ start_memÊÇÄÚ´æÓ³ÏñµÄ½áÊøµØÖ·_end¶ÔÓ¦µÄºËÐÄ̬µ±startup_32½«Ò³Ä¿Â¼swapper_pg_dirµÄÎïÀíµØÖ·×°Èë¿ØÖÆ¼Ä´æÆ÷cr3£¬²¢°Ñcr0µÄ×î¸ßλÖÃ1£¬¼´¿ªÆôÁË·ÖÒ³»úÖÆ¡£Ëæºó£¬±àÒë³ÌÐòʹËùÓеķûºÅµØÖ·¶¼ÔÚÐéÄâµØÖ·¿Õ¼äÖУ¬Ö¸Áî¼Ä´æÆ÷eipÖ¸ÏòÐéÄâµØÖ·¿Õ¼äµÄij¸öµØÖ·£¬¾ÍʹcpuתÈëÁËÄں˿ռ䣬Íê³É´Óʵģʽµ½±£»¤Ä£Ê½µÄ¹ý¶É¡£ º¯Êýsetup_archÈ·¶¨start_kernelÖÐÄÚ´æ³õ ʼ»¯µÄÆðʼµØÖ·start_memºÍ½áÊøµØÖ·end_mem¡£ start_memÊÇÄÚ´æÓ³ÏñµÄ½áÊøµØÖ·_end¶ÔÓ¦µÄºËÐÄ̬ÐéÄâµØÖ·£¬end_memÊǽ«bios×Ô¼ìʱȷ¶¨µÄÎïÀíÄÚ´æ´óСת»»³ÉºËÐÄ̬µÄÐéÄâµØÖ·

ps£ºÔÚpcÖУ¬×î³õ1mbµÄ´æ´¢¿Õ¼äµÄʹÓúÜÌØÊâ¡£¿ªÍ·640kb£¨0x0~0x9ffff£©Îªram£¬´Ó0xa0000¿ªÊ¼µÄ¿Õ¼äÓÃÓÚcga¡¢ega¡¢vgaµÈ¸÷ÖÖͼÐο¨¡£´Ó0xf0000µ½0xfffff£¨×î¸ßµÄ4kb£©ÊÇÔÚeprom»òflash´æ´¢Æ÷ÖеÄbios¡£ l lÕâ¸ö½×¶Î³õʼ»¯ºóµÄ£¬ÎïÀíÄÚ´æ³õʼ»¯µÄÄÚºËÓ³Ïñ¼ûºóͼ£º

start_kernelº¯Êýl

±¾º¯ÊýʵÏÖÕû¸ölinuxÄں˵ijõʼ»¯£¬ÓйØÄÚ´æ³õʼ»¯µÄ²¿·Ö½éÉÜÈçÏ£º paging_initº¯Êý³õʼ»¯Ò³±í£»Ò³ÃèÊö·ûµÄ½¨Á¢ÓÉfree_area_initº¯ÊýÍê³É£»mem_initº¯ÊýÉèÖÃÎïÀíÒ³ÃæµÄ±ê־룬ÕûÀí¿ÕÏÐÇø£» kmem_cache_init kmem_cache_sizes_initº¯Êý³õʼ»¯cache_cache£¬Í¨ÓÃcache£¬slab·ÖÅäÆ÷  S 2&f_ffAS€\fD[±¾_ÎÄ_À´_Ô´_ÓÚ_ÎÒ_µÄ_ѧ_ϰ_ÍøµçÄÔ¿ÎÌÃLINUX½Ì³Ì http://Www.GZU521.Com ] S 2&f_ffAS€\fD

startup_32ºÍstart_kernelº¯ÊýÍê³ÉºóÎïÀíÄÚ´æµÄ³õʼ»¯Çé¿ö£º
¡¾Í¼Òª²åÈë¡¿

ÄÚ´æ·ÖÅäºÍ»ØÊÕÖ®»ï°éËã·¨(buddy)
²úÉú±³¾°£º ÄÚºËÓ¦¸ÃΪ·ÖÅäÒ»×éÁ¬ÐøµÄÎïÀíÒ³¶ø½¨Á¢Ò»ÖÖÎȶ¨¡¢¸ßЧµÄ·ÖÅä²ßÂÔ¡£Îª´Ë£¬±ØÐë½â¾öÄÚ´æ¹ÜÀíÖеÄÍⲿË鯬ÎÊÌ⡣Ƶ·±µÄÇëÇóºÍÊͷŲ»Í¬´óСµÄÒ»×éÁ¬ÐøÒ³£¬±ØÈ»µ¼ÖÂÔÚÒÑ·ÖÅäÎïÀíÒ³µÄ¿éÄÚ·ÖÉ¢Ðí¶àС¿éµÄ¿ÕÏÐÒ³¡£ÕâÑù£¬¼´Ê¹ÓÐ×ã¹»µÄÒ³Âú×ãÇëÇó£¬Òª·ÖÅäÒ»¸ö´ó¿éµÄÁ¬ÐøÒ³¾Í¿ÉÄÜÎÞ·¨Âú×ã¡£ ¡¾±¸×¢¡¿ÕâÊÇÔÚÎïÀí´æ´¢Æ÷ÉÏ·ÖÅäÄڴ桾/±¸×¢¡¿
Ëã·¨¹¤×÷Ô­Àí£º linuxµÄ»ï°éËã·¨°ÑËùÓеĿÕÏÐÎïÀíÒ³·Ö×éΪ10¸ö¿éÁ´±í£¬Ã¿¸ö¿éÁ´±í·Ö±ð°üº¬´óСΪ1£¬2£¬4£¬8£¬16£¬32£¬64£¬128£¬256ºÍ512¸öÁ¬ÐøµÄÒ³£¨2µÄÃݴη½£©¡£Ã¿¸ö¿éµÄµÚÒ»¸öÒ³µÄÎïÀíµØÖ·Ò²ÊǸÿé´óСµÄÕûÊý±¶¡£·ÖÅäÒ»¸ö¿é£¨Àý128¸öÁ¬ÐøÒ³£©Ê±£¬Ê×ÏÈÔÚ¶ÔÓ¦µÄÁ´±íÖвéÕÒ¿ÕÏп顣Èç¹ûÕÒµ½£¬ÔòÖ±½Ó·ÖÅ䣻·ñÔò£¬²éÕÒÏÂÒ»¸ö¸ü´óµÄ¿é£¬½«ÆäÖеÄÒ»²¿·Ö·ÖÅ䏸½ø³Ì£¬Ê£Óಿ·Ö²åÈëÏàÓ¦µÄ¿éÁ´±íÖС£

Âú×ãÒÔÏÂÌõ¼þµÄÁ½¸ö¿é¾Í³ÆÎª»ï°é£º
1£©Á½¸ö¿éµÄ´óСÏàͬ l2£©Á½¸ö¿éµÄÎïÀíµØÖ·Á¬Ðø l»ï°éËã·¨°ÑÂú×ãÒÔÉÏÌõ¼þµÄÁ½¸ö¿éºÏ²¢ÎªÒ»¸ö¿é£¬Ëã·¨Êǵü´úËã·¨

ÉÏÒ»Ò³ ±¾ÎĹ²10Ò³£ºµÚ [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] Ò³ÏÂÒ»Ò³

ÔðÈα༭£ºgzu521

µçÄÔ¿ÎÌ÷ÖÀà
Windows 2000½Ì³Ì
Windows XP½Ì³Ì
Windows 2003½Ì³Ì
Windows Vista½Ì³Ì
LINUX½Ì³Ì
Èí¼þ½Ìѧ
°ì¹«Èí¼þ
Ó²¼þDIY
·ÖÀàÍÆ¼öÐÅÏ¢
¸ü¶à...
´óÀà×îÐÂÎÄÕÂ
¸ü¶à...