Ò׽ؽØÍ¼Èí¼þ¡¢µ¥Îļþ¡¢Ãâ°²×°¡¢´¿ÂÌÉ«¡¢½ö160KB
ÈÈÃűêÇ©£º c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 ×îÐÂÎÄÕ :

linux 2.6Ô´´úÂëÇé¾°·ÖÎö±Ê¼ÇÖ®½ø³Ì3

ΪÄÚºËѰÕÒнø³ÌÔÚcpuÉÏÔËÐÐʱ£¬±ØÐëÖ»¿¼ÂÇ¿ÉÔËÐнø³Ì£¨TASK_RUNNING£©¡£
Ìá¸ßµ÷¶È³ÌÐòÔËÐÐËٶȵľ÷ÇÏÊǽ¨Á¢¶à¸ö¿ÉÔËÐнø³ÌÁ´±í£¬Ã¿ÖÖ½ø³ÌÓÅÏÈȨ¶ÔÓ¦Ò»¸ö²»Í¬µÄÁ´±í¡£Ã¿¸ötask_structÃèÊö·û°üº¬Ò»¸ölist_headÀàÐ͵Ä×Ö¶Îrun_list¡£Èç¹û½ø³ÌµÄÓÅÏÈȨµÈÓÚk(0-139)£¬run_list×ֶΰѸýø³ÌÁ´ÈëÓÅÏÈȨΪkµÄ¿ÉÔËÐнø³ÌµÄÁ´±íÖС£
Äں˱ØÐëΪϵͳÖÐÿ¸öÔËÐжÓÁб£´æ´óÁ¿µÄÊý¾Ý£¬²»¹ýÔËÐжÓÁеÄÖ÷Òª½á¹¹»¹ÊÇ×é³ÉÔËÐжÓÁеĽø³ÌÃèÊö·û±í£¬ËùÓÐÕâЩÁ´±í¶¼ÓÉÒ»¸öµ¥¶ÀµÄprio_array_tÊý¾Ý½á¹¹À´ÊµÏÖ¡£
185 struct prio_array {
186         unsigned int nr_active;             Á´±íÖнø³ÌÃèÊö·ûµÄÊýÁ¿
187         unsigned long bitmap[BITMAP_SIZE];  ÓÅÏÈȨλͼ£ºµ±ÇÒ½öµ±Ä³¸öÓÅÏÈȨµÄ½ø³ÌÁ´±í²»Îª¿ÕʱÉèÖÃÏàÓ¦µÄλ±êÖ¾
188         struct list_head queue[MAX_PRIO];   140¸öÓÅÏÈȨ¶ÓÁеÄÍ·½áµã
189 };
static void enqueue_task(struct task_struct *p, prio_arra ......

linux 2.6Ô´´úÂëÇé¾°·ÖÎö±Ê¼ÇÖ®½ø³Ì4


É¢ÁУ¨hash£©º¯Êý²¢²»×ÜÄÜÈ·±£pidÓë±íË÷ÒýÒ»Ò»¶ÔÓ¦¡£Á½¸ö²»Í¬µÄpidÉ¢Áе½ÏàͬµÄ±íË÷Òý³ÆÎª³åÍ»£¨colliding£©,linuxÀûÓÃÁ´±íÀ´´¦Àí³åÍ»µÄpid,ÿһ¸ö±íÏîÊÇÓɳåÍ»µÄ½ø³ÌÃèÊö·û×é³ÉµÄË«ÏòÁ´±í¡£
pidÉ¢ÁбíµÄÊý¾Ý½á¹¹½â¾öÁËËùÓÐÕâЩÄÑÌ⣬ËûÃÇ¿ÉÒÔΪ°üº¬ÔÚÒ»¸öÉ¢ÁбíÖеÄÈκÎpidºÅ¶¨Òå½ø³ÌÁ´±í¡£×îÖ÷ÒªµÄÊý¾Ý½á¹¹ÊÇËĸöpid½á¹¹µÄÊý×飬ËüÔÚ½ø³ÌÃèÊö·ûµÄpid×Ö¶ÎÖС£
struct pid
{
        /* Try to keep pid_chain in the same cacheline as nr for find_pid */
        int nr;pidµÄÊýÖµ
        struct hlist_node pid_chain;/* list of pids with the same nr, only one of them is in the hash */Á´½ÓÉ¢ÁÐÁ´±íµÄÏÂÒ»¸öºÍǰһ¸öÔªËØ
        struct list_head pid_list;ÿ¸öpidµÄ½ø³ÌÁ´±íÍ·
};
»ù±¾ÔË×÷£ºpid_hashÖеÄËĸö»ù±¾ÀàÐͱíÍ·ÕÒµ½tgid¹þÏ£±í£¬È»ºóÕÒµ½¶ÔÓ¦±íÏîÔÙ½øÒ»²½ÕÒµ½½ø³ÌÃèÊö·ûÖеÄpid_chain×ֶΣ¬È»ºó½øÒ»²½ÕÒµ½process descriptorÖеÄpid_chain±íÏȻºóÕÒµ½¹þÏ£±í¡£
´¦ÀípidÉ¢ÁбíµÄº¯ÊýºÍºê£º ......

linux 2.6Ô´´úÂëÇé¾°·ÖÎö±Ê¼ÇÖ®½ø³Ì5

µÈ´ý¶ÓÁÐÔÚÄÚºËÖкܶàÓÃ;£¬ÓÈÆäÓÃÔÚÖжϴ¦Àí¡¢½ø³Ìͬ²½¼°¶¨Ê±¡£µÈ´ý¶ÓÁÐʵÏÖÁËÔÚʼþÉϵÄÌõ¼þµÈ´ý£ºÏ£ÍûµÈ´ýÌØ¶¨Ê¼þµÄ½ø³Ì°Ñ×Ô¼º·Å½øºÏÊʵĵȴý¶ÓÁУ¬²¢·ÅÆú¿ØÖÆÈ¨¡£Òò´Ë£¬µÈ´ý¶ÓÁбíʾһ×é˯ÃߵĽø³Ì£¬µ±Ä³Ò»Ìõ¼þ±äÎªÕæÊ±£¬ÓÉÄں˻½ÐÑËüÃÇ¡£
µÈ´ý¶ÓÁÐÓÉË«ÏòÁ´±íʵÏÖ£¬ÆäÔªËØ°üÀ¨Ö¸Ïò½ø³ÌÃèÊö·ûµÄÖ¸Õ롣ÿ¸ö¶ÓÁж¼ÓÐÒ»¸öµÈ´ý¶ÓÁÐÍ·£¬µÈ´ý¶ÓÁÐÍ·ÊÇÒ»¸öÀàÐÍΪwait_queue_head_tµÄÊý¾Ý½á¹¹¡£
struct __wait_queue_head {
        spinlock_t lock;
        struct list_head task_list;
};
typedef struct __wait_queue_head wait_queue_head_t;
µÈ´ý¶ÓÁÐÓÉÖжϴ¦Àí³ÌÐòºÍÖ÷ÒªÄں˺¯ÊýÐ޸ġ£Í¬²½ÊÇͨ¹ýµÈ´ý¶ÓÁÐÍ·ÖеÄlock×ÔÐýËø´ïµ½µÄ£¬task_list×Ö¶ÎÊǵȴý½ø³ÌÁ´±íµÄÍ·¡£
µÈ´ý¶ÓÁÐÁ´±íÖеÄÔªËØÀàÐÍΪwait_queue_t:
struct __wait_queue {
        unsigned int flags;
#define WQ_FLAG_EXCLUSIVE       0x01
        struct task_struct * task;
     & ......

linux 2.6Ô´´úÂëÇé¾°·ÖÎö±Ê¼ÇÖ®½ø³Ì6

ÿ¸ö½ø³Ì¶¼ÓÐÒ»×éÏà¹ØµÄ×ÊÔ´ÏÞÖÆ£¨resource limit£©£¬ÏÞÖÆÁËÖ¸¶¨½ø³ÌÄÜʹÓõÄϵͳ×ÊÔ´ÊýÁ¿¡£
¶Ôµ±Ç°½ø³ÌµÄ×ÊÔ´ÏÞÖÆ´æ·ÅÔÚcurrent->signal->rlim×ֶΣ¬½ø³ÌµÄÐźÅÃèÊö·ûµÄÒ»¸ö×ֶΡ£¸Ã×Ö¶ÎÀàÐÍΪrlimit½á¹¹µÄÊý×飬ÿ¸ö×ÊÔ´ÏÞÖÆ¶ÔÓ¦Ò»¸öÔªËØ¡£
struct rlimit {
        unsigned long   rlim_cur;
        unsigned long   rlim_max;
};
ÆäÖÐrlim_cur×Ö¶ÎÊÇ×ÊÔ´µÄµ±Ç°×ÊÔ´ÏÞÖÆ£¨current->signal->rlim[RLIMIT_CPU]£©¡£rlim_cur±íʾÕýÔËÐнø³ÌËùÕ¼ÓÃcpuʱ¼äµÄµ±Ç°ÏÞÖÆ
rlim_max×Ö¶ÎÊÇ×ÊÔ´ÏÞÖÆËùÔÊÐíµÄ×î´óÖµ¡£ÀûÓÃgetrlimit()ºÍsetrlimit()ϵͳµ÷Óã¬Óû§×ÜÄܰÑһЩ×ÊÔ´µÄrlim_curÏÞÖÆÔö¼Óµ½rlim_max¡£Ö»Óг¬¼¶Óû§£¨¾ßÓÐCAP_SYS_RESOURCEȨÄܵÄÓû§£©²ÅÄܸıärlim_max×ֶΣ¬»ò°Ñrlim_cur×Ö¶ÎÉèÖóɴóÓÚÏàÓ¦rlim_max×ֶεÄÒ»¸öÖµ¡£
´ó¶àÊý×ÊÔ´ÏÞÖÆ°üº¬ÊýÖµRLIM_INFINITY(0xffffffff),ËüÒâζ×ÅûÓжÔÏàÓ¦µÄ×ÊÔ´Ê©¼ÓÓû§ÏÞÖÆ¡£
#ifndef __ARCH_RLIMIT_ORDER
#define RLIMIT_CPU              ......

linux 0.11 copy_page_tables()º¯Êý

/* Ëûͨ¹ýÖ»¸´ÖÆÄÚ´æÒ³ÃæÀ´¸´ÖÆÒ»¶¨·¶Î§ÄÚµÄÏßÐÔµØÖ·µÄÄÚÈÝ*/
00150int copy_page_tables(unsigned long from,unsigned long to,long size)
00151 {
00152     unsigned long * from_page_table;
00153     unsigned long * to_page_table;
00154     unsigned long this_page;
00155     unsigned long * from_dir, * to_dir;
00156     unsigned long nr;
00157 //ÏÂÃæÊÇÅжÏfrom ºÍto ÊÇ·ñÔÚ£´£ÍµÄ±ß½ç´¦
00158     if ((from&0x3fffff) || (to&0x3fffff))
00159         panic("copy_page_tables called with wrong alignment");
¡¡¡¡¡¡¡¡//¸³給from_dir ҳĿ¼±íµÄԴĿ¼ÆðʼºÅ (from>>20)&oxfffc £½(from>>22)<<2
00160     from_dir = (unsigned long *) ((from>>20) & 0xffc); /* _pg_dir = 0 */
               //¸³給to_d ......

Linuxϸ÷Îļþ¼ÐµÄº¬Òå

 ÔÚ LinuxϵͳÀïÃæ£¬“·ÖÇø”£¬±»³Æ×÷“¹ÒÔØµã”£¬¼òµ¥Ã÷Á˵Ä˵£¬“¹ÒÔØµã”Òâ˼¾ÍÊÇ£º°ÑÒ»²¿·ÖÓ²ÅÌÈÝÁ¿£¬“·Ö”³ÉÒ»¸öÎļþ¼ÐµÄÐÎʽ£¬ÓÃÀ´¸ÉʲôÊÂÇé¡£Õâ¸öÎļþ¼ÐµÄÃû×Ö£¬¾Í½Ð×ö£º“¹ÒÔØµã”¡£ËùÒÔ£¬ºÍWindowsÓÐ×ű¾ÖÊÉϵij¬¼¶´óµÄÇø±ð£¬ÄãÔÚÈκÎlinux·¢ÐаæÏµÍ³ÀïÃæ£¬¾ø¶Ô²»»á¿´µ½CÅÌ£¬DÅÌ£¬E ÅÌÕâÑùµÄ£¬ÄãÄÜ¿´µ½µÄ£¬Ö»ÓГÎļþ¼Ð”ÐÎʽ´æÔڵē¹ÒÔØµã”¡£
      ÔÚLinux ϵͳÀïÃæ£¬ÓÐһЩÒѾ­¶¨ÒåºÃ£¬ÓÃÀ´¸ÉһЩÊÂÇéµÄ¹ÒÔØµã£¬³£¼ûµÄ“¹ÒÔØµã”ÓУº
/bin ¸ÃĿ¼Öдæ·ÅLinuxµÄ³£ÓÃÃüÁî¡£
/boot ¸ÃĿ¼ĬÈÏÏ´æ·ÅµÄÊÇLinuxµÄÆô¶¯ÎļþºÍÄںˡ£
/cdrom ¸ÃĿ¼ÔÚ¸Õ°²×°ÏµÍ³Ê±Êǿյģ¬Äã¿ÉÒÔ½«¹âÇýÎļþϵͳ¹ÒÔÚÕâ¸öĿ¼Ï¡£
/dev ¸ÃĿ¼°üº¬ÁËLinuxϵͳÖÐʹÓõÄËùÓÐÍⲿÉ豸£¬Ëüʵ¼ÊÉÏÊÇ·ÃÎÊÕâЩÍⲿÉ豸µÄ¶Ë¿Ú£¬Äã¿ÉÒÔ·ÃÎÊÕâЩÍⲿÉ豸£¬Óë·ÃÎÊÒ»¸öÎļþ»òÒ»¸öĿ¼ûÓÐÇø±ð¡£ÀýÈçÔÚϵͳÖмüÈë“cd /dev/cdrom”£¬¾Í¿ÉÒÔ¿´µ½¹âÇýÖеÄÎļþ£»¼üÈë“cd /dev/mouse”¼´¿É¿´Êó±êµÄÏà¹ØÎļþ¡£
/etc ¸ÃĿ¼´æ·Åϵͳ¹ÜÀíʱҪÓõ½µÄ¸÷ÖÖÅäÖÃÎ ......
×ܼǼÊý:40319; ×ÜÒ³Êý:6720; ÿҳ6 Ìõ; Ê×Ò³ ÉÏÒ»Ò³ [4290] [4291] [4292] [4293] 4294 [4295] [4296] [4297] [4298] [4299]  ÏÂÒ»Ò³ βҳ
© 2009 ej38.com All Rights Reserved. ¹ØÓÚE½¡ÍøÁªÏµÎÒÃÇ | Õ¾µãµØÍ¼ | ¸ÓICP±¸09004571ºÅ