Linux¶ÔI/O¶Ë¿Ú×ÊÔ´µÄ¹ÜÀí(1)
¢ÚÈç¹ûthisÖ¸ÕëΪ¿Õ£¬ÄǾÍÈÃnew->endµÈÓÚroot->end¡£ÕâÓÐÁ½²ãÒâ˼£ºµÚÒ»ÖÖÇé¿ö¾ÍÊǸù½áµãµÄchildÖ¸ÕëΪNULL£¨¼´¸ù½ÚµãûÓÐÈκÎ×Ó×ÊÔ´£©¡£Òò´Ë´ËʱÏÈÔÝʱ½«new->end·Åµ½×î´ó¡£µÚ¶þÖÖÇé¿ö¾ÍÊÇÒѾ±éÀúÍêÕû¸öchildÁ´±í£¬ËùÒÔ´Ëʱ¾ÍÈÃnew±íʾ×îºóÒ»¸ö×Ó×ÊÔ´ºóÃæÄÇÒ»¶ÎδʹÓõÄ×ÊÔ´Çø¼ä¡£
¢Û¸ù¾Ý²ÎÊýminºÍmaxÐÞÕýnew->[start,end]µÄÖµ£¬ÒÔʹ×ÊÔ´new±»°üº¬ÔÚ[min,max]ÇøÓòÄÚ¡£
¢Ü½ÓÏÂÀ´½øÐÐ¶ÔÆë²Ù×÷¡£
¢ÝÈ»ºó£¬ÅжϾ¹ýÉÏÊöÕâЩ²½ÖèËùÐγɵÄ×ÊÔ´ÇøÓònewÊÇ·ñÊÇÒ»¶ÎÓÐЧµÄ×ÊÔ´£¨end±ØÐë´óÓÚ»òµÈÓÚstart£©£¬¶øÇÒ×ÊÔ´ÇøÓòµÄ³¤¶ÈÂú×ãsize²ÎÊýµÄÒªÇó£¨end£start£«1>=size£©¡£Èç¹ûÕâÁ½¸öÌõ¼þ¾ùÂú×㣬Ôò˵Ã÷ÎÒÃÇÒѾÕÒµ½ÁËÒ»¶ÎÂú×ãÌõ¼þµÄ×ÊÔ´¿Õ¶´¡£Òò´ËÔÚ¶Ônew->endµÄÖµ½øÐÐÐÞÕýºó£¬È»ºó¾Í¿ÉÒÔ·µ»ØÁË£¨·µ»ØÖµ0±íʾ³É¹¦£©¡£
¢ÞÈç¹ûÉÏÊöÁ½Ìõ¼þ²»ÄÜͬʱÂú×㣬Ôò˵Ã÷»¹Ã»ÓÐÕÒµ½£¬Òò´ËÒª¼ÌÐøÉ¨ÃèÁ´±í¡£ÔÚ¼ÌÐøÉ¨Ãè֮ǰ£¬ÎÒÃÇ»¹ÊÇÒªÅжÏÒ»ÏÂthisÖ¸ÕëÊÇ·ñΪ¿Õ¡£Èç¹ûΪ¿Õ£¬ËµÃ÷ÒѾɨÃèÍêÕû¸öchildÁ´±í£¬Òò´Ë¾Í¿ÉÒÔÍÆ³öforÑ»·ÁË¡£·ñÔò¾Í½«new->startµÄÖµÐÞ¸ÄΪthis->end+1£¬²¢ÈÃthisÖ¸ÏòÏÂÒ»¸öÐÖµÜ×ÊÔ´½Úµã£¬´Ó¶ø¼ÌÐøÉ¨ÃèÁ´±íÖеÄÏÂÒ»¸ö×Ó×ÊÔ´½Úµã¡£
3£®2£®5 ·ÖÅä½Ó¿Úallocate_resource()
ÔÚfind_resource()º¯ÊýµÄ»ù´¡ÉÏ£¬º¯Êýallocate_resource()ʵÏÖ£ºÔÚÒ»¿Å×ÊÔ´Ê÷ÖзÖÅäÒ»ÌõÖ¸¶¨´óСµÄ¡¢ÇÒ°üº¬ÔÚÖ¸¶¨ÇøÓò[min,max]Öеġ¢Î´Ê¹ÓÃ×ÊÔ´ÇøÓò¡£ÆäÔ´´úÂëÈçÏ£º
/*
* Allocate empty slot in the resource tree given range and alignment.
*/
int allocate_resource(struct resource *root, struct resource *new,
unsigned long size,
unsigned long min, unsigned long max,
unsigned long align,
void (*alignf)(void *, struct resource *, unsigned long),
void *alignf_data)
{
int err;
write_lock(&resource_lock);
err = find_resource(root, new, size, min, max, align, alignf, alignf_data);
if (err >= 0 && __request_resource(root, new))
err = -EBUSY;
write_unlock(&resource_lock);
return err;
}
3£®2£®6 »ñÈ¡×ÊÔ´µÄÃû³ÆÁбí
º¯Êýget_resource_list()ÓÃÓÚ»ñÈ¡¸ù½ÚµãrootµÄ×Ó×ÊÔ´Ãû×ÖÁÐ±í¡£¸Ãº¯ÊýÖ÷ÒªÓÃÀ´Ö§³Ö/proc/Îļþϵͳ£¨±ÈÈçʵÏÖproc/ioportsÎļþºÍ/proc/iomemÎļþ£©¡£ÆäÔ´´úÂëÈçÏ£º
Ïà¹ØÐÅÏ¢
- RouterOSµÄ±¸·ÝºÍ»Ö¸´
- Linux¶ÔI/O¶Ë¿Ú×ÊÔ´µÄ¹ÜÀí(2)
- LinuxµÄµ¥Óû§¡¢ÐÞ¸´Ä£Ê½µÈÔÚϵͳÐÞ¸´
- Linuxµ½×ÀÃæÉÐÐèʱÈÕ
- ÈçºÎÔ¶³Ì°²×°Linux²Ù×÷ϵͳ
- ͼ½âºìÆìLinux 4.0×ÀÃæÏµÍ³µÄ°²×°
- [Linux]Mandrake 9.0°²×°ºÍÉý¼¶Ó÷¨
- linuxÈëÃÅ½Ì³Ì µÚ1Õ ϵͳ¼ò½é
- linuxÈëÃÅ½Ì³Ì µÚ5Õ£ºÍøÂçÓ¦ÓÃ
- Linux¹ÜÀíÔ±ÊÖ²á(4)--ÄÚ´æ¹ÜÀí
- Linux¹ÜÀíÔ±ÊÖ²á(7)--¹ÜÀíÓû§ÕÊ»§
- ºìñÈÏÖ¤¹¤³Ìʦ³£¼ûÎÊÌâ½â´ð
Ó²¼þ¹ÊÕÏרÌâ
¸ü¶àÈí¼þ¹ÊÕÏάÐÞ
¸ü¶à- ÎÒÕâÑùµÄ±¾±¾ÄÜ¿´[ºÚ¿ÍµÛ¹ú].The.Matri
- Excelº¯ÊýѧÉú³É¼¨µÈ¼¶ÆÀ¶¨ÇáËɸ㶨
- ×îÐÂmpchc_x86_v1.1.0.0_MPCVideoDecÏÂ
- Word¹¤¾ßÀ¸°´Å¥Ö±½ÓÆô¶¯Íⲿ³ÌÐò
- ÎóÉϵöÓãÍøÕ¾! °ÁÓθ㶨ÉÏÍø°²È«
- ѹËõH264µÈ³£ÓõÄÈí¼þ£¿
- ¸ø¸÷λ·ÓÑÒ»¸öÉèÖÃ.
- 2600ʹÓÃ8.3°æÇý¶¯Ó²½âMKV¸ñʽµÄÎÊÌâ
- Excel½«Îı¾×ª»»ÎªÊý×ֵįßÖÖ·½·¨
- Õýȷʶ±ðÕæ¼ÙPowerDVD8Ultra(ѶÁ¬¼«ÖÂ
ÔĶÁÅÅÐÐ
- LINUXÈí¼þʵÓÃÆª£¨ÉÏ£©
- µÚÈýÕ Linux ϵͳ¹ÜÀí£¨ÖУ©
- ½éÉÜLinuxÄÚºËÎļþCache¹ÜÀí»úÖÆ(ÏÂ)
- ÔÚLinux×ÀÃæÉÏËæÒâʹÓÃWindowsµÄÎĵµ
- ΪLinux²Ù×÷ϵͳ°²×°µÚ¶þ¸öÓ²ÅÌ
- Slax±¾µØ»¯:Ò»¸öÔÚÒÆ¶¯Ó²ÅÌÉϵÄLinuxÖÐ
- ¸ãЦ:ÓÐÖÖÄã¾ÍÊÔ!12²½ÈÃWindows±ä³ÉLin
- Linux²Ù×÷ϵͳÎļþȨÏÞµÄÉèÖ÷½·¨
- LiunxÎļþϵͳ»ù±¾Ä¿Â¼½éÉÜ´óÈ«
- ·þÎñÆ÷Ö÷Á÷²Ù×÷ϵͳ¼òÎö
- NovellÔâ΢ÈíÍÙÆú ½«½û·¢Linux£¿
- Linux°²È«Òþ»¼¼°¼ÓÇ¿°²È«¹ÜÀí
