Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
C++¶àºË¸ß¼¶±à³Ì - ¶à½ø³Ì
 
  9797  次浏览      29
 2018-10-23
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚcsdn£¬±¾ÎÄÖ÷Òª½éÉÜÁ˽ø³Ì¡¢PCB¡¢½ø³ÌµÄ´´½¨ÒÔ¼°Í¬²½½ø³ÌºÍÒì²½½ø³ÌµÈÏà¹ØÖªÊ¶¡£

Ò»£¬½ø³Ì¸ÅÄΪʲôÊÇ¶à½ø³Ì¶ø²»ÊǶàÏß³Ì

½ø³ÌÊÇÓɲÙ×÷ϵͳ´´½¨µÄ¹¤×÷µ¥Ôª¡£ÖµµÃ×¢ÒâµÄÊǽø³ÌºÍ³ÌÐòδ±ØÊǵÈͬµÄ¡£Ò»¸ö³ÌÐò¿ÉÄÜÓɶà¸öÈÎÎñ×é³É£¬¶øÃ¿¸öÈÎÎñ¿ÉÒÔºÍÒ»¸ö»ò¶à¸ö½ø³ÌÏà¹ØÁª¡£³ÌÐòÊÇÓɳÌÐòÔ±´´½¨µÄ£¬¶ø½ø³ÌÊÇÓɲÙ×÷ϵͳ´´½¨µÄ¡£Ò»¸ö¹¤×÷µ¥ÔªÒªÏë±»³Æ×÷½ø³Ì£¬Ëü±ØÐëÒªÓвÙ×÷ϵͳָÅɸøËûµÄµØÖ·¿Õ¼ä£¬±ØÐëÓµÓнø³ÌID£¬±ØÐëÓµÓÐ״̬ºÍ½ø³Ì±íÖеıíÏî¡£½ø³ÌºÍÏß³ÌÖ®¼ä×î´óµÄÇø±ðÊǽø³ÌÓÐ×Å×Ô¼ºµÄµØÖ·¿Õ¼ä£¬¶øÏ̹߳²Ïí´´½¨ËüÃǵĽø³ÌµÄµØÖ·¿Õ¼ä¡£

ÔÚ½«C++ÈÎÎñÓ³ÉäΪ²Ù×÷ϵͳÄܹ»Àí½âµÄÖ´Ðе¥ÔªÊ±£¬½á¹ûÖ¤Ã÷Ï̸߳üÒ×ÓÚ±à³Ì£¬ÆäÖ÷ÒªÔ­ÒòÊÇÏ̹߳²ÏíÏàͬµÄµØÖ·¿Õ¼ä£¬Ê¹µÃÏ̼߳äµÄͨÐźÍͬ²½¶¼ÒªÒ×ÓÚ½ø³Ì¡£´´½¨»òÖÕÖ¹Ïß³ÌËùÒª×öµÄ¹¤×÷¶¼ÒªÉÙÓÚ´´½¨½ø³ÌµÄÏà¹Ø¹¤×÷£¬¶øÇÒËÙ¶ÈÒ²Òª¿ìÓÚ½ø³Ì¡£

ÄÇΪʲô»¹ÓÐʹÓýø³ÌÄØ£¿

Ê×ÏÈ£¬½ø³ÌÓÐ×Ô¼ºµÄµØÖ·¿Õ¼ä£¬¿ÉÒÔÓÐЧµÄÌṩ°²È«ÐԺ͸ôÀëÐÔ£¬×èÖ¹Á÷Ã¥½ø³ÌµÄ¸ÉÈÅ¡£

Æä´Î£¬Ïß³ÌËùÄÜʹÓõĴò¿ªµÄÎļþÊýÄ¿ÊÜÏÞÓÚÒ»¸ö½ø³ÌÄÜÓµÓеĴò¿ªµÄÎļþÊýÄ¿¡£ÕâʹµÃʹÓýø³ÌʱÄܹ»¶Ô¸ü¶àµÄ×ÊÔ´½øÐзÃÎÊ¡£

µÚÈý£¬¶ÔÓÚ¶àÓû§µÄ³ÌÐò£¬Ã¿¸öÓû§³ÌÐò»¹ÊÇÓ¦¸Ã¸ü¶ÀÁ¢Ò»Ð©£¬Èç¹ûÒ»¸öÓû§½ø³Ìʧ°Ü£¬ÆäËûÓû§»¹ÊÇ¿ÉÒÔ¼ÌÐø¹¤×÷µÄ£¬µ«Èç¹ûÒ»¸öÓû§Ïß³Ìʧ°Ü£¬ÔòÓпÉÄÜÓ°ÏìËùÓÐÓû§µÄ²Ù×÷¡£

µ«Ê¹ÓÃ¶à½ø³Ìʱ½ø³Ì¼äͨÐÅºÍÆô¶¯Ê±¼äÊÇÖ÷ÒªµÄ´ú¼Û¡£

¶þ£¬ ¶Ô½ø³ÌµÄÏêϸÌÖÂÛ

µ±Ö´Ðнø³Ìʱ£¬²Ù×÷ϵͳ½«ËüÖ¸¶¨µ½Ò»¸ö´¦ÀíÆ÷ÉÏ¡£½ø³ÌÔÚÒ»¸öʱ¼äƬ(quantum)ÄÚÖ´ÐÐËûµÄÖ¸Áî¡£½ø³ÌÊÇ¿ÉÇÀÕ¼µÄ¡£·ÖΪ²Ù×÷ϵͳ½ø³ÌºÍÓû§½ø³Ì¡£

²Ù×÷ϵͳ½ø³Ì£ºÊÇÖ´ÐеÄϵͳ´úÂ룬Ҳ±»³Æ×÷Äں˽ø³Ì¡£Ö´ÐеÄÊÇϵͳ¹ÜÀíµÄÈÎÎñ¡£

Óû§ÏµÍ³½ø³Ì£ºÊÇÖ´ÐеÄÓû§´úÂë¡£

½ø³Ì¿ØÖÆ¿é PCB

½ø³ÌÓµÓÐһЩ±êʶÀ´ÃèÊöËûÃÇÔËÐеÄÌØÐÔ¡£ÄÚºËά»¤Êý¾Ý£¬²¢Ìṩ¿ÉÒÔÔÊÐíÓû§·ÃÎʵĽӿڡ£ÕâЩÐÅÏ¢±»±£´æÔÚ½ø³Ì¿ØÖÆ¿éÖÐ(Process Control Block)¡£

PCBÖеÄÐÅÏ¢£º

- ½ø³Ìµ±Ç°µÄ״̬ºÍÓÅÏȼ¶

- ½ø³Ì±êʶ£¬¸¸½ø³ÌµÄ±êʶ£¬×Ó½ø³ÌµÄ±êʶ

- Ö¸ÏòÒÔ·ÖÅä×ÊÔ´µÄÖ¸Õë

- Ö¸Ïò½ø³ÌÄÚ´æÎ»ÖõÄÖ¸Õë

- Ö¸Ïò¸¸½ø³ÌºÍ×Ó½ø³ÌµÄÖ¸Õë

- ½ø³ÌËùʹÓõĴ¦Àí Æ÷

- ¿ØÖƺÍ״̬¼Ä´æÆ÷

- Õ»Ö¸Õë

ÔÚ½ø³ÌµÄµØÖ·¿Õ¼äÄÚ·ÖΪ3¸öÂß¼­¶Î£º ´úÂë¶Î£¬Êý¾Ý¶Î£¬Õ»¶Î¡£

½ø³ÌµÄµØÖ·¿Õ¼äÊÇÐéÄâµÄ¡£ÐéÄâ´æ´¢Ê¹µÃÔÚÖ´ÐеĽø³ÌÖÐÒýÓõĵØÖ·Í¬ÄÚ´æÖеÄʵ¼Ê¿ÉÓõĵØÖ·ÊÇÎ޹صġ£ÕâʹµÃ¿ÉѰַµÄ´æ´¢¿Õ¼ä´óСԶԶ´óÓÚʵ¼ÊµÄÄÚ´æ´óС¡£½ø³ÌµÄÐéÄâµØÖ·¿Õ¼äµÄ¶ÎÊÇÁ¬ÐøµÄ¡£Ã¿¸ö¶Î¼°ÎïÀíµØÖ·¿Õ¼ä±»·Ö³ÉÒ³¡£Ã¿¸öÒ³ÓÐΨһµÄÖ¡ºÅ(page frame number)¡£ÐéÄâÒ³Ö¡ºÅ(virtual page frame number) ÓÃ×÷½ø³ÌÒ³±íÖеÄË÷Òý¡£ÐéÄâµØÖ·¿Õ¼äÊÇÁ¬ÐøµÄ£¬µ«¿ÉÒÔÒÔÈκÎ˳ÐòÓ³Éäµ½ÎïÀíÒ³Ãæ¡£ËäÈ»½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä¶¼Êܵ½±£»¤£¬µ«½ø³ÌµÄ´úÂë¶ÎÊÇ¿ÉÒÔÔÚ²»Í¬½ø³Ì¼ä¹²ÏíµÄ¡£

Èý£¬½ø³ÌµÄ´´½¨£¬ÓÅÏȼ¶µ÷¶È£¬É¾³ýºÍ½ø³ÌµÄ×ÊÔ´

3.1 ½ø³ÌµÄ´´½¨

ÒªÏëÔËÐÐÈκÎÒ»¸ö³ÌÐò£¬²Ù×÷ϵͳ±ØÐëÊ×ÏÈ´´½¨Ò»¸ö½ø³Ì¡£µ±´´½¨ÐµĽø³ÌÖ®ºó£¬ÔÚÖ÷½ø³Ì±íÖлá¼ÓÈëÒ»¸öеÄÌõÄ¿£¬´´½¨²¢³õʼ»¯Ò»¸öеÄPCB¡£PCBÖлá°üº¬½ø³Ìid£¬¸¸½ø³Ìid£¬½ø³ÌµÄÈë¿ÚµÈ¡£

´´½¨½ø³ÌÓÐ×Ų»Í¬µÄ·½·¨ fork() system() posix_spawn()£¬ÕâÀォÖ÷ÒªÌÖÂÛposix_spawn()·½·¨¡£

Ò»¸ö¼òµ¥µÄposix_spawn() µÄʾÀý£º

#include <spawn.h>
#include <iostream.h>
#include <pthread.h>


int main()
{
pid_t nPid;
posix_spawnattr_t X;
posix_spawn_file_actions_t Y;
char* argv[] = {"/bin/ps", "-lf", NULL};
char* envp[] = {"PROCESS=2"};

posix_spawnattr_init(&X);
posix_spawn_file_actions_init(&Y);

posix_spawn(&nPid, "/bin/ps", &Y, &X, argv, envp);

cout << "spawned PID" << nPid << endl;
return 0;
}

posix_spawn() º¯ÊýµÄ˵Ã÷£º

int posix_spawn(pid_t *restrict pid, 
                const char *restrict path,
                const posix_spawn_file_actions_t *file_actions,
                const posix_spawnattr_t *restrict attrp,
                char *const argv[restrict], char *const envp[restrict]);


int posix_spawnp(pid_t *restrict pid, 
                 const char *restrict file,
                 const posix_spawn_file_actions_t *file_actions,
                 const posix_spawnattr_t *restrict attrp,
                 char *const argv[restrict], char * const envp[restrict]); 

file_atction: °üº¬ÁËнø³Ì½«Òª¶ÔÎļþÃèÊö·ûÖ´Ðе͝×÷µÄÐÅÏ¢µÄÊý¾Ý½á¹¹¡£

struct posix_spawn_file_actions_t
{
int __allocated;
int __used;
struct __spawn_action *actions;
int __pad[16];
};

attrp ²ÎÊý: °üº¬¹ØÓÚнø³ÌµÄµ÷¶È²ßÂÔ£¬½ø³Ì×飬Ðźţ¬±êÖ¾µÈÐÅÏ¢¡£

struct posix_spawnattr_t
{
short int __flags; //ÓÃÓÚָʾÔÚнø³ÌÖн«ÒªÐÞ¸ÄÄĸöÊôÐÔ
pid_t __pgrp; //нø³Ì¼´½«¼ÓÈëµÄ½ø³Ì×éID
sigset_t __sd; //нø³Ì±»ÆÈĬÈÏʹÓõÄĬÈÏÐźŴ¦ÀíµÄÐźż¯ºÏ
sigset_t __ss; //нø³Ì½«ÒªÊ¹ÓõÄÐźÅÑÚÂë
struct sched_param __sp; //½«Òª¸³¸øÐ½ø³ÌµÄµ÷¶È²ÎÊý
int __policy; //нø³Ì½«ÒªÊ¹Óõĵ÷¶È²ßÂÔ
int __pad[16];
};

3.2 ½ø³ÌµÄµ÷¶È

½ø³ÌÔÚÔËÐÐÆÚ¼ä£¬»áÓв»Í¬µÄ״̬

ÔËÐÐ(Running)

¾ÍÐ÷(runnable, ready)

½©ËÀ(zombied)

µÈ´ý(waiting, block)

Í£Ö¹(stopped)

½ø³Ì״̬µÄ¸Ä±äÈ¡¾öÓÚ²Ù×÷ϵͳËù´´ÔìµÄ»·¾³¡£

µ±Ò»¸ö¾ÍÐ÷¶ÓÁаüº¬¶à¸ö½ø³Ìʱ£¬µ÷¶ÈÆ÷¾Í»á¾ö¶¨Ê×ÏȽ«ÄǸö½ø³ÌÖ¸Åɸø´¦ÀíÆ÷¡£Ã¿¸ö½ø³Ì¶¼»á±»¸³ÓèÒ»¸öÓÅÏȼ¶£¬ÓÐÏàͬÓÅÏȼ¶µÄ½ø³Ì±»·ÅÔÚÒ»¸ö¶ÓÁÐÖС£½ø³ÌµÄÓÅÏȼ¶¿ÉÄÜÊǾ²Ì¬µÄ£¬Ò²¿ÉÄÜÊǶ¯Ì¬µÄ¡£µ÷¶ÈÆ÷¸ù¾Ý²»Í¬µÄµ÷¶È²ßÂÔÀ´´¦Àí½ø³Ì¡£ÔÚPOSIX APIÖÐÖ÷Òª°üº¬2Öе÷¶È²ßÂÔ£¬FIFO(ÏȽøÏȳö)£¬RR(ÂÖѯ)

FIFO ÏȽøÏȳö£º½ø³ÌÊǸù¾Ýµ½´ï¶ÓÁеÄʱ¼ä±»Ö¸Åɸø´¦ÀíÆ÷µÄ¡£µ±ÕýÔÚÔËÐеĽø³Ìʱ¼äƬºÄ¾¡Ê±Ëû»á±»·Åµ½¶ÓÁеÄÍ·²¿£¬µ±Ò»¸öÐÝÃß½ø³Ì±äΪ¿ÉÔËÐÐʱ£¬Ëü½«±»·ÅÔÚ¶ÓÁеÄβ²¿¡£

RR ÂÖѯ£ºËùÓеĽø³Ì±»Í¬µÈ¶Ô´ý£¬µ±½ø³Ìʱ¼äƬ±»ºÄ¾¡ºó½ø³Ì±»·Åµ½¶ÓÁеĺó¶Ë¡£

3.3 ½ø³ÌµÄɾ³ý

½ø³ÌÖÕÖ¹ºóÆäPCB½«»á±»Çå³ý£¬¶øÇÒËüËùʹÓõÄ×ÊÔ´ºÍµØÖ·¿Õ¼ä½«È«²¿±»ÊÍ·Å¡£

¸¸½ø³Ì¸ºÔð×Ó½ø³ÌµÄÖÕÖ¹ºÍÊÍ·Å£¬¸¸½ø³ÌÓ¦´¦Óڵȴý״̬£¬Ö±µ½ËüËùÓеÄ×Ó½ø³ÌÒѾ­ÖÕÖ¹¡£µ±¸¸½ø³ÌÌáÈ¡×Ó½ø³ÌµÄÍ˳öÂëºó£¬×Ó½ø³Ì½«Õý³£µÄÍ˳öϵͳ¡£½ø³ÌÔÚ¸¸½ø³Ì½ÓÊÜÐźÅ֮ǰһֱ´¦ÓÚ½©ËÀ״̬¡£Èç¹û¸¸½ø³ÌÒ»Ö±²»½ÓÊÜÐźÅ(¸¸½ø³ÌÖÕÖ¹»òÍ˳ö)£¬ÄÇô×Ó½ø³Ì½«Ò»Ö±´¦ÓÚ½©ËÀ״̬¡£

½ø³ÌÖÕÖ¹º¯Êý exit() abort() kill()

º¯Êýexit()£º

½ø³Ì¿ÉÒÔ×ÔÉíµ÷Óøú¯ÊýÀ´ÖÕÖ¹×Ô¼º£¬ exit()»áµ¼Öµ÷ÓõĽø³ÌÕý³£µÄÖÕÖ¹¡£Óë½ø³ÌÏà¹ØµÄ±»´ò¿ªµÄÎļþÃèÊö·û¶¼»á±»¹Ø±Õ¡£

º¯Êýabort()£º

»áµ¼Öµ÷Óøú¯ÊýµÄ½ø³ÌÒì³£ÖÕÖ¹¡£

º¯Êýkill()

¿Éµ¼ÖÂÆäËûµÄ½ø³ÌÖÕÖ¹¡£

ËÄ£¬Í¬²½½ø³ÌºÍÒì²½½ø³Ì

Òì²½½ø³Ì¼äÊÇÏ໥¶ÀÁ¢µÄ¡£½ø³ÌAÔËÐе½½áÊø²»ÐèÒª¿¼ÂÇÆäËû½ø³Ì¡£

ͬ²½½ø³Ì¶¨ÒåΪ½»´í½ø³Ì£¬½ø³ÌAÔËÐÐÒ»¶Îʱ¼äºó½«»á¹ÒÆð×ÔÉí£¬µÈ´ý½ø³ÌBÔËÐнáÊø¡£fork() fork-exec() posix_spawnµÈº¯Êý´´½¨µÄ½ø³Ì¶¼ÊÇÒì²½½ø³Ì£¬¸¸½ø³ÌÔڳɹ¦´´½¨×Ó½ø³Ìºó²¢²»¹ÒÆð£¬Á½¸ö½ø³Ì½«»á¸÷×Ô¶ÀÁ¢µÄÔËÐС£

system() ´´½¨µÄ½ø³ÌÊÇͬ²½½ø³Ì£¬Ëü»á´´½¨Ò»¸öshellÀ´Ö´ÐÐÃüÁî»ò¿ÉÖ´ÐÐÎļþ¡£¸¸½ø³Ì½«»á±»¹ÒÆð£¬Ö±µ½×Ó½ø³Ì½áÊø£¬ÇÒsystem()µ÷Ó÷µ»Ø¡£

wait() º¯Êý£ºÒì²½½ø³Ì¿ÉÒÔͨ¹ýÖ´ÐÐËü½«×ÔÉí¹ÒÆð£¬µÈµ½×Ó½ø³Ì½áÊø¡£µ±×Ó½ø³Ì½áÊøºó£¬µÈ´ýÖеĸ¸½ø³ÌÊÕ¼¯×Ó½ø³ÌµÄÍ˳ö״̬£¬·ÀÖ¹³öÏÖ½©ËÀ½ø³Ì¡£

Î壬ν´Ê

ν´ÊÊÇÒ»¸ö·µ»ØboolÖµµÄº¯ÊýµÄ¶ÔÏó¡£Î½´Ê²»½ö½öÊǺ¯Êý£¬ËüÓÐ×ŶÔÏóµÄÓïÒ塣ν´ÊΪ¶¯×÷ÐòÁÐÌṩÁËÉùÃ÷ʽµÄ½âÊÍ¡£

ʹÓÃν´Ê¿ÉÒÔÊÇÓû§ÍÑÀë²¢Ðл¯µÄ¹ý³ÌʽËã·¨¡£

   
9797 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì