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

Linux vmallocµÄʵÏÖ

Äں˰汾:2.6.28
linuxÈçºÎÀûÓûï°éϵͳ,slab·ÖÅäÆ÷·ÖÅäÄÚ´æ,ÓÃÕâЩ·½·¨µÃµ½µÄÄÚ´æÔÚÎïÀíµØÖ·É϶¼ÊÇÁ¬ÐøµÄ, È»¶ø,ÓÐЩʱºò,ÿ´ÎÇëÇóÄÚ´æʱ,ϵͳ¶¼·ÖÅäÎïÀíµØÖ·Á¬ÐøµÄÄÚ´æ¿éÊDz»ºÏÊʵÄ,¿ÉÒÔÀûÓÃС¿éÄÚ´æ“Á¬½Ó”³É´ó¿é¿ÉʹÓõÄÄÚ´æ.ÕâÔÚ²Ù×÷ϵͳÉè¼ÆÖÐÒ²±»³ÆΪ “ÄÚ´æÆ´½Ó”,ÏÔÈ»,ÄÚ´æÆ´½ÓÔÚÐèÒª½Ï´óÄÚ´æ,¶øÄÚ´æ·ÃÎÊÏà±È֮ϲ»ÊǺÜƵ·±µÄÇé¿öÏÂÊDZȽÏÓÐЧµÄ.
¡¡¡¡ÔÚlinuxÄÚºËÖÐÓÃÀ´¹ÜÀíÄÚ´æÆ´½ÓµÄ½Ó¿ÚÊÇvmalloc/vfree.ÓÃvmalloc·ÖÅäµÃµ½µÄÄÚ´æÔÚÏßÐÔµØÖ·ÊÇƽ»¬µÄ,µ«ÊÇÎïÀíµØÖ·ÉÏÊÇ·ÇÁ¬ÐøµÄ.
º¯ÊývmallocÁгöÈçÏÂ:(mm/vmalloc.c)
size: ·ÖÅäµÄÐéÄâ¿Õ¼äµÄ´óС.
gfp_mask: Ò³¼¶·ÖÅäÆ÷µÄ±êÖ¾.
prot: ÒÑ·ÖÅäµÄ±£»¤ÑÚÂë.
void *__vmalloc(unsigned long size, gfp_t gfp_mask, pgprot_t prot)
{
    return __vmalloc_node(size, gfp_mask, prot, -1,
                __builtin_return_address(0));
}
º¯Êý_vmalloc·ÖÅä×ã¹»µÄÒ³ÊýÓësizeÏàÅä,°ÑËüÃÇÓ³Éä½øÁ¬ÐøµÄÄÚºËÐéÄâ¿Õ¼ä,µ«·ÖÅäµÄÄÚ´æ¿é²»Ò»¶¨Á¬Ðø.ÔÚº¯ÊýÖеÚÒ»²½ÊÇÔÚvmlistÖÐÑ°ÕÒµ½Ò»¸ö´óСºÏÊʵÄÐéÄâÄÚ´æ¿é(_get_vm_area_node(...)).
static void *__vmalloc_node(unsigned long size, gfp_t gfp_mask, pgprot_t prot,
                        int node, void *caller)
{
    struct vm_struct *area;
    //¼ì²éÇëÇó·ÖÅäµÄÄÚ´æ´óСÓÐûÓг¬¹ý×î´óµÄÎïÀíÒ³ÃæÊý¡£Èç¹û³¬¹ý·µ»Ø 0 £¬±íʾ·ÖÅäʧ°Ü¡£
    size = PAGE_ALIGN(size);
    //ÓÐЧÐÔ¼ì²é
    if (!size || (size >> PAGE_SHIFT) > num_physpages)
        return NULL;
    //È¡µÃÒ»¸öÓÐЧµÄvma
    area = __get_vm_area_node(size, VM_ALLOC, VMALLOC_START, VMALLOC_END,
                        node, gfp_mask, caller);
    //Èç¹ûÉêÇëµÄÎÞЧ£¬·µ»ØÒ»¸öNULLÖ¸Õë
&nb


Ïà¹ØÎĵµ£º

Linux 2.6 ×Ö·ûÉ豸Çý¶¯³ÌÐò

¡ð
¡¢ËµÃ÷
±Ê¼ÇÊÊÓÃÓÚ
Linux
µÄ
2.6.10
ÒÔºóµÄÄںˡ£
±Ê¼ÇÒÔ
Linux
Device
Driver3
ÌṩµÄ
scull
³ÌÐò
(scull
Ŀ¼ÖеÄ
main.c
ºÍ
scull.h)
Ϊ¼Ç¼Ö÷Ïߣ¬²¢ÒÔ¸ÃÇý¶¯³ÌÐòÖеĸ÷ÖÖϵͳµ÷Óúͺ¯Êýµ÷ÓÃÁ÷³ÌΪ¼Ç
¼˳Ðò¡£±ÈÈ磬
module_init( )
ºÍ
module_exit(
)
ΪÏà¶ÔÓ¦µÄÒ»¶Ôϵͳµ÷Óã¬Ò»°ãÊé¼®Öж ......

LINUX C Á´±í·â×°


main.c
//³õʼ»¯¶ÓÁÐ
void InitQueue(LiQueue *q)
{
  q=(LiQueue*)malloc(sizeof(LiQueue));
    q->front=q->rear=NULL;
}
//ÅжÏÊÇ·ñΪ¿Õ
int QueueEmpty(LiQueue *q)
{
 if(q->rear==NULL)
 {
  return 1;
 }
 else
 {
  ......

Linux¶¨Ê±ÈÎÎñϵͳCronÈëÃÅ

cronÊÇÒ»¸ölinuxϵĶ¨Ê±Ö´Ðй¤¾ß£¬¿ÉÒÔÔÚÎÞÐèÈ˹¤¸ÉÔ¤µÄÇé¿öÏÂÔËÐÐ×÷Òµ¡£ÓÉÓÚCron ÊÇLinuxµÄÄÚÖ÷þÎñ£¬µ«Ëü²»×Ô¶¯ÆðÀ´£¬¿ÉÒÔÓÃÒÔϵķ½·¨Æô¶¯¡¢¹Ø±ÕÕâ¸ö·þÎñ£º
¡¡¡¡/sbin/service crond start //Æô¶¯·þÎñ
¡¡¡¡/sbin/service crond stop //¹Ø±Õ·þÎñ
¡¡¡¡/sbin/service crond restart //ÖØÆô·þÎñ
¡¡¡¡/sbin/service cron ......

LinuxϼӹÒÎļþϵͳ

LinuxϼӹÒÎļþϵͳµÄС½á
ѧϰ²Ù×÷ϵͳʱÎÒÃǶ¼Á˽⵽ÎļþϵͳÊDzÙ×÷ϵͳµÄÖØÒª×é³É²¿·ÖÖ®Ò»¡£ÎļþϵͳÓкܶàÖÖÀàÐÍ£¬±È
windowsµÄfat¡¢fat32£»LinuxµÄext¡¢ext2»òext3£»FreeBSDµÄufsµÈµÈ¡£ÔÚʹÓÃLinuxµÄ¹ý³Ì£¬Ò²³£³£Linux
²Ù×÷ϵͳʹÓÃÐéÄâÎļþϵͳVFS£¬Í¨¹ýVFS¿ÉÒÔÖ±½Ó´æÈ¡ÆäËüÒѱ»ÄÚºËÖ§³ÖµÄ¸÷ÖÖÎļþϵͳ£¬ÓÃÆðÀ´¾Í ......
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØͼ | ¸ÓICP±¸09004571ºÅ