Linux¶ÔI/O¶Ë¿Ú×ÊÔ´µÄ¹ÜÀí(1)
¢Û×îºó¸ù¾ÝconflictÊÇ·ñΪNULL£¬·µ»Ø£EBUSY»ò0Öµ¡£
3£®2£®4 ѰÕÒ¿ÉÓÃ×ÊÔ´
º¯Êýfind_resource()ÓÃÓÚÔÚÒ»¿Å×ÊÔ´Ê÷ÖÐѰÕÒδ±»Ê¹Óõġ¢ÇÒÂú×ã¸ø¶¨Ìõ¼þµÄ£¨Ò²¼´×ÊÔ´³¤¶È´óСΪsize£¬ÇÒÔÚ[min,max]Çø¼äÄÚ£©µÄ×ÊÔ´¡£Æäº¯ÊýÔ´´úÂëÈçÏ£º
/*
* Find empty slot in the resource tree given range and alignment.
*/
static int find_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)
{
struct resource *this = root->child;
new->start = root->start;
for(;;) {
if (this)
new->end = this->start;
else
new->end = root->end;
if (new->start < min)
new->start = min;
if (new->end > max)
new->end = max;
new->start = (new->start + align - 1) & ~(align - 1);
if (alignf)
alignf(alignf_data, new, size);
if (new->start < new->end && new->end - new->start + 1 >= size)
{
new->end = new->start + size - 1;
return 0;
}
if (!this)
break;
new->start = this->end + 1;
this = this->sibling;
}
return -EBUSY;
}
¶Ô¸Ãº¯ÊýµÄNOTEÈçÏ£º
ͬÑù£¬¸Ãº¯ÊýÒ²Òª±éÀúrootµÄchildÁ´±í£¬ÒÔѰÕÒδ±»Ê¹ÓõÄ×ÊÔ´¿Õ¶´¡£Îª´Ë£¬ËüÈÃthisÖ¸Õë±íʾµ±Ç°Õý±»É¨ÃèµÄ×Ó×ÊÔ´½Úµã£¬Æä³õʼֵµÈÓÚroot->child£¬¼´Ö¸ÏòchildÁ´±íÖеĵÚÒ»¸ö½Úµã£¬²¢ÈÃnew->startµÄ³õʼֵµÈÓÚroot->start£¬È»ºóÓÃÒ»¸öforÑ»·¿ªÊ¼É¨ÃèchildÁ´±í£¬¶ÔÓÚÿһ¸ö±»É¨ÃèµÄ½Úµã£¬Ñ»·ÌåÖ´ÐÐÈçϲÙ×÷£º
¢ÙÊ×ÏÈ£¬ÅжÏthisÖ¸ÕëÊÇ·ñΪNULL¡£Èç¹û²»Îª¿Õ£¬¾ÍÈÃnew->endµÈÓÚthis->start£¬Ò²¼´ÈÃ×ÊÔ´new±íʾµ±Ç°×ÊÔ´½ÚµãthisÇ°ÃæÄÇÒ»¶ÎδʹÓõÄ×ÊÔ´Çø¼ä¡£
Ïà¹ØÐÅÏ¢
- 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°²È«Òþ»¼¼°¼ÓÇ¿°²È«¹ÜÀí
