Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB

LinuxÖеÄÄÚ´æ·ÖÅäºÍÊÍ·ÅÖ®free_bootmem()º¯Êý·ÖÎö

  free_bootmem()Õâ¸öº¯ÊýÊÇϵͳÆô¶¯³õÆÚÄÚ´æÊͷŵĺËÐĺ¯Êý£¬ÎÒÃÇÀ´¿´¿´ËüµÄ´úÂë¡£
  void __init free_bootmem (unsigned long addr, unsigned long size)//addrÊÇÒªÊͷŵÄÎïÀíÆðʼµØÖ·£¬sizeÊÇÒªÊͷſռäµÄ´óС¡£
 {
    free_bootmem_core(NODE_DATA(0)->bdata, addr, size);//Ö±½Ó´ÓÄÚ´ænode0ºÅ¿ªÊ¼ÊÍ·ÅÄÚ´æ¿Õ¼ä¡£
 }//¿ÉÒÔ¿´³öÕæÕýµÄºËÐĺ¯ÊýÊÇfree_bootmem_core()Õâ¸öº¯Êý£¬Õâ¸ö²ÅÊǺËÐIJ¿·Ö¡£ÎÒÃÇÀ´¿´¿´ËüµÄ¾ßÌåÄÚÈݰɡ£
  static void __init free_bootmem_core(bootmem_data_t *bdata, unsigned long addr, unsigned long size)
{
    unsigned long i;
    unsigned long start;
    /*
     * round down end of usable mem, partially free pages are
     * considered reserved.
     */
    unsigned long sidx;
    unsigned long eidx = (addr + size - bdata->node_boot_start)/PAGE_SIZE;//¼ÆËã³öÒªÊͷſռäµÄ½áÊøÎ»ÖÃÏà¶ÔÓÚ¸ÃÄÚ´æ½ÚµãµÄÆðʼλÖÃµÄÆ«ÒÆÒ³Êý¡£
    unsigned long end = (addr + size)/PAGE_SIZE;//Êͷſռä×îºóλÖõľø¶ÔÒ³ºÅ¡£
    BUG_ON(!size);//Èç¹ûÊÍ·Å¿ÕÄڴ棬ϵͳ±ÀÀ£¡£
    BUG_ON(end > bdata->node_low_pfn);//²»ÄÜÊͷų¬¹ý±¾½Úµã·¶Î§ÄÚµÄÄÚ´æ¿Õ¼ä£¬·ñÔòϵͳ±ÀÀ£¡£
    if (addr < bdata->last_success)
             bdata->last_success = addr;
    /*
     * Round up the beginning of the address.
     */
    start = (addr + PAGE_SIZE-1) / PAGE_SIZE;//ÕâÀï¼ÆË㿪ʼµØÖ·µÄÈ«ÐÂÒ³£¬¼ÙÉèaddrÊÇÔÚ0~4kbµÄµØÖ··¶Î§µÄ»°£¬ÆäÊµÕæÕýÔÚ0ºÅÒ³µÄλÖ㬵«ÊÇÈç¹ûͨ¹ýÉÏÃæµÄÔËË㣬Çó³öÀ´µÄ¾ÍÊÇ1ºÅÒ³µÄλÖá£ÎªÊ²Ã´ÕâÑù×öÄØ£¿ÒòΪÈç¹ûÆðʼµØÖ·²»Êǰ´Ò³¶ÔÆëµÄ£¬Èç¹ûÖ±½ÓÊÍ·Å£¬¾Í»á°ÑÇ°Ãæ²»ÊôÓÚÕâ¸öÄÚ´ænodeµÄ¿Õ¼äÒ²ÊÍ·ÅÁË¡£
    sidx = start - (bdata->node_boot_start/PAGE_SIZE);//Õâ¸ö¾ÍÊǼÆËãÐÂÒ³ºÍÔ­À´µÄÆðʼµØÖ·ËùÔÚÒ³µÄÆ«ÒÆÒ³Êý¡£
 


Ïà¹ØÎĵµ£º

Îå´ó·Ç³£¼ûLinuxÃüÁî

Îå´ó·Ç³£¼ûLinuxÃüÁî
 2010-1-29
µ¼¶Á£º±¾ÎĽéÉÜLinux²»³£¼ûµÄÎå¸öÃüÁî¡£°üÀ¨logsave¡¢diff3ºÍpstreeµÈ¡£
¹Ø¼ü´Ê£ºLinux logsave diff3 pstree
 
ÕýÔÚ¼ÓÔØÊý¾Ý...
¡¾TechTargetÖйúÔ­´´¡¿LinuxÓдóÁ¿µÄÃüÁîÐй¤¾ß£¬´ÓÿÌì¶¼»áʹÓõÄls¡¢cdÒÔ¼°psÕâЩ¹¤¾ß£¬µ½Äú¿ÉÄÜ»¹Ã»ÓÐʹÓùý£¬»òÕßÉõÖÁûÓÐÌý˵¹ýµÄ²»³ ......

linuxÏÂ×¥Êý¾Ý°ü


linuxϵͳÈçºÎץȡÊý¾Ý°ü½øÐзÖÎö
(2009-08-30 23:59:37) linuxÉÏÓÐÁ½ÖֱȽϺõÄ×¥°ü¹¤¾ß£ºetherealºÍtcpdump
¶ÔÓÚethereal£¬ÓÐͼÐνçÃæºÍ×Ö·û½çÃæÁ½ÖÖ·½Ê½¡£
µ½linuxϵͳÉÏÖ´ÐÐrpm -qa | grep ethereal-gnome¿É²é¿´ÊÇ·ñ°²×°ÁËͼÐΰ汾
µ«ÊÇÈç¹û·þÎñÆ÷ÉÏûÓÐxwinͼÐλ·¾³£¬ÄÇô¾ÍÖ»ÄÜÓÃ×Ö·û½çÃæÁË
ÃüÁtethereal
......

LinuxÖеÄÄÚ´æÒ³±í´´½¨Ö®memtable_init()º¯Êý·ÖÎö

    ±¾º¯ÊýµÄ·ÖÎöºÜÄѾßÌ壬ÒòÎªÉæ¼°Á˺ܶàarmµÄ´¦ÀíÆ÷ÐͺźÍÿ¸öÐͺŶÔÓ¦µÄcacheºÍwrite bufferµÄ¹¤×÷·½Ê½£¬ÕâÆ¬ÎÄÕÂÖ»ÊÇ×ö¼òµ¥µÄ¼Ç¼£¬·½±ãÒÔºóÁ˽â¸üÉîºó»ØÀ´ÔÙÀ´ÍêÉÆÕâ¸öº¯Êý¡£
     Õâ¸öº¯ÊýµÄµ÷Óùý³ÌÈ磺start_kernel()->setup_arch()->paging_init()->memtable_init( ......

Linux Platform Device and Driver

´ÓLinux 2.6ÆðÒýÈëÁËÒ»Ì×еÄÇý¶¯¹ÜÀíºÍ×¢²á»úÖÆ:Platform_deviceºÍPlatform_driver¡£
LinuxÖд󲿷ֵÄÉ豸Çý¶¯£¬¶¼¿ÉÒÔʹÓÃÕâÌ×»úÖÆ, É豸ÓÃPlatform_device±íʾ£¬Çý¶¯ÓÃPlatform_driver½øÐÐ×¢²á¡£
 
Linux platform driver»úÖÆºÍ´«Í³µÄdevice driver »úÖÆ(ͨ¹ýdriver_registerº¯Êý½øÐÐ×¢²á)Ïà±È£¬Ò»¸öÊ ......

linuxÖгö´í´¦Àí

linuxÖУ¬ÔÚÖ§³Ö¶àÏ̵߳Ļ·¾³ÖУ¬Í¨³£Ã¿¸öÏ̶߳¼ÓÐÊôÓÚ×Ô¼ºµÄerrno±äÁ¿£¬ÊÇÓÃÀ´±íÊ¾ÌØ¶¨´íÎóµÄ³£Á¿¡£
ÒÔÏÂÊÇ<errno.h>Öж¨ÒåµÄËùÓгö´íerrno³£Á¿
#define EPERM            1      /* Operation not permitted */
#define ENOEN ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ