NachOSʵÑ鱨¸æ(4¸öÈ«) ÁªÏµ¿Í·þ

·¢²¼Ê±¼ä : ÐÇÆÚÒ» ÎÄÕÂNachOSʵÑ鱨¸æ(4¸öÈ«)¸üÐÂÍê±Ï¿ªÊ¼ÔĶÁ6bdecb2ccfc789eb172dc8e0

~/nachos-3.4$ make

µ±ÐèÒªµ¥¶À±àÒëÏ̹߳ÜÀí²¿·Öʱ£¬ÏȽøÈëthreads Ŀ¼£¬È»ºó²ÉÓÃÈçÏÂÃüÁ ~/nachos-3.4/threads$ make depend ~/nachos-3.4/threads$ make nachos

ʵ¼ÊÉÏ£¬¸÷²¿·ÖĿ¼Ï¶¼ÓÐÒ»¸öMakefile Îļþ£¬ÄÚÈÝ´óÌåÏàͬ£¬Çø±ðÔÚÓÚһЩÌõ¼þ±àÒëµÄ

²ÎÊý¡£±ÈÈçÔÚµ¥¶À±àÒëÏ̹߳ÜÀí²¿·Öʱ£¬Îļþ¹ÜÀí²¿·Ö¾Í±»ÆÁ±ÎÁË£¬ÕâÑù¶ÁÕ߶ÁÕ߾ͿÉÒÔר

ÐÄÓÚÏ̹߳ÜÀí²¿·ÖµÄµ÷ÊÔ¡£

ËÄ¡¢Ó¦ÓóÌÐòµÄ±àÒë

ÓÉÓÚLinux Ö¸ÁºÍR2/3000 Ö¸Á²»Í¬£¬Óû§±àдµÄÓ¦ÓóÌÐòÓÃLinux ϵͳÖбê×¼gcc ±à

Òëºó£¬²»ÄÜÖ±½ÓÔÚNachos ÐéÄâ»ú»·¾³ÏÂÔËÐС£ËùÒÔÐèÒª²ÉÓý»²æ±àÒë¼¼Êõ¡£Ëùν½»²æ±àÒë

¼¼ÊõÊÇÔÚÒ»¸ö²Ù×÷ϵͳϽ«Ô´Âë±àÒë³ÉÁíÒ»¸ö²Ù×÷ϵͳµÄÄ¿±êÂ룬ÕâÀï¾ÍÊÇÔÚLinux ÏÂͨ¹ý

gcc ½»²æ±àÒë°æ±¾½«Óû§³ÌÐòµÄÔ´Âë±àÒë³ÉR2/3000 Ö¸ÁµÄÄ¿±êÂë¡£

ÔÚLinux ÖУ¬Ã»ÓÐȱʡµÄ½»²æ±àÒ빤¾ß¡£¶ÁÕß¿ÉÒÔµ½ÉϺ£½»Í¨´óѧ¼ÆËã»úϵFTP ·þÎñÆ÷ÉÏ

ÏÂÔØ£¬URL Ϊ:

ftp://donkey.cs.sjtu.edu.cn/linux/cross-compiler.tgz

¸ÃÎļþµÄ½â¿ªÐèÒªÓг¬¼¶Óû§µÄȨÀû£¬½«½â¿ªÖÁ/usr/local/Ŀ¼Ï£º /# gzip -dc cross-compiler.tgz | tar xf -

ÔÚ±àÒëÓû§³ÌÐòʱ£¬Óý»²æ±àÒëÆ÷½«Ô´Âë±àÒë³ÉR2/3000 Ö¸ÁµÄÄ¿±ê´úÂ룬ÔÙ¾­¹ýÒ»¸ö¼ò

µ¥µÄת»»¾Í¿ÉÒÔÔÚNachos ÐéÄâ»úÉÏÔËÐС£×¢Ò⣬ÔÚ¶ÁÕßʵÏÖÐéÄâ´æ´¢Ö®Ç°£¬ÓÐЩӦÓóÌÐò

¿ÉÄÜ»áÒòΪʹÓùý¶àµÄÄÚ´æ¶ø²»ÄÜÔËÐС£

ʵÑéÄÚÈÝ£º

±¾ÏîÄ¿ÔÚʵ¼ùµÄ¹ý³ÌÖÐÐèҪעÒâÒÔÏÂÒªµã£º

ShellÏîÄ¿µÄÒªÇó

Ò»¡¢ Éè¼ÆÒ»¸ö¼òµ¥µÄÃüÁîÐÐshell£¬Âú×ãÏÂÃæµÄÊôÐÔ²¢ÇÒ¿ÉÒÔÔÚÖ¸¶¨µÄUNIX

ƽ̨ÏÂÖ´ÐС£

1. Õâ¸öshellÖ§³ÖÒ»ÏÂÄÚ²¿ÃüÁ

a) cd¡ª¡ª°Ñµ±Ç°Ä¬ÈÏĿ¼¸Ä±äΪ¡£Èç¹ûûÓÐ

²ÎÊý£¬ÔòÏÔʾµ±Ç°Ä¿Â¼¡£Èç¹û¸ÃĿ¼²»´æÔÚ£¬»á³öÏÖºÏÊʵĴíÎóÐÅÏ¢¡£ b) cle¡ª¡ªÇåÆÁ¡£

c) dir¡ª¡ªÁгöĿ¼µÄÄÚÈÝ¡£ d) environ¡ª¡ªÁгöËùÓеĻ·¾³±äÁ¿¡£

e) echo¡ª¡ªÔÚÆÁÄ»ÉÏÏÔʾ²¢ÇÒ»»ÐУ¨¶à¸ö¿Õ¸ñºÍÖÆ

±í·û¿ÉÄܱ»Ëõ¼õΪһ¸ö¿Õ¸ñ£©¡£

f) help¡ª¡ªÏÔʾÓû§Êֲᣬ²¢ÇÒʹÓÃmoreÃüÁî¹ýÂË¡£ g) pause¡ª¡ªÍ£Ö¹shell²Ù×÷Ö±µ½°´Ï»سµ¼ü¡£ h) quit¡ª¡ªÍƳöshell¡£

i) shellµÄ»·¾³±äÁ¿Ó¦¸Ã°üº¬shell=/myshell,ÆäÖÐ

/myshellÊÇ¿ÉÒÔÖ´ÐеÄshellÍêÕû·¾¶£¨¼°shellµÄ¿ÉÖ´Ðз¾¶£¬¶ø²»ÊÇËûÔÚĿ¼ÏµÄÓ²Á¬½Ó·Ïߣ©¡£

2. ÆäËûµÄÃüÁîÐÐÊäÈë±»½âÊÍΪ³ÌÐòµÄµ÷Óã¬shell´´½¨²¢Ö´ÐÐÕÛ¸ö³ÌÐò£¬

²¢×÷Ϊ×Ô¼ºµÄ×Ó½ø³Ì¡£³ÌÐòµÄÖ´ÐеĻ·¾³±äÁ¿°üº¬ÔÚÒÔÏÂÌõÄ¿ÖУº parent=/shell,ÆäÖÐ/myshellÒѾ­ÔÚ1.i)ÖÐÃèÊö¹ýÁË¡£

3. Shell±ØÐëÄܹ»´ÓÎļþÖÐÌáÈ¡ÃüÁîÊäÈë ÀýÈçshellʹÓÃÒÔÏÂÃüÁîÐб»µ÷Óãº

programname arg1 arg2 outputfile

Õâ¸öÅú´¦ÀíÎļþÓ¦¸Ã°üÀ¨Ò»×éÃüÁ£¬µ±µ½´ïÎļþ½áβʱshellÍ˳ö¡£ºÜÃ÷ÏÔ£¬Èç¹ûshell±»µ÷ÓÃÊÇûÓÐʹÓòÎÊý£¬Ëû»áÔÚÆÁÄ»ÉÏÏÔʾÌáʾ·ûÇëÇóÓû§ÊäÈë¡£

4. Shell±ØÐëÖ§³Öi/oÖض¨Ïò£¬stdinºÍstdout£¬»òÕßÆäÖÐÖ®Ò» a) ÀýÈçÃüÁîÐУº

programname arg1 arg2 outputfile

ʹÓÃarg1ÒÔ¼°arg2Ö´ÐгÌÐòprogramname£¬ÊäÈëÎļþÁ÷±»Ì滻Ϊinputfile£¬Êä³öÎļþÁ÷±»Ì滻Ϊoutputfile. b) stdoutÖض¨ÏòÓ¦¸ÃÖ§³ÖһϵÄÄÚ²¿ÃüÁ i. dir ii. environ iii. echo iv. help

ÒÔÉÏÄÚ²¿ÃüÁîÒÑÔÚ1ÖÐÓоßÌå½âÊÍ£¬±¾´¦±ÈÔÚÐðÊö¡£

ʹÓÃÊä³öÖض¨Ïòʱ£¬Èç¹ûÖض¨Ïò×Ö·ûΪ>,Ôò´´½¨Êä³öÎļþ£¬Èç¹û´æÔÚÔò¸²¸ÇÖ®£»Èç¹ûÖض¨Ïò×Ö·ûΪ¡µ¡µ£¬Ò²»á´´½¨Êä³öÎļþ£¬Èç¹û´æÔÚÔòÌí¼Óµ½Îļþβ¡£

5. shell±ØÐëÖ§³Öºǫ́³ÌÐòÖ´ÐС£Èç¹ûÔÚÃüÁîÐкóÃæÌí¼Ó&×Ö·û£¬ÔÚ¼ÓÔØ

Íê³ÌÐòºóÐèÒªÁ¢¿Ì·µ»ØÃüÁîÐеÄÌáʾ·û¡£ÃüÁîÐÐÌáʾ·û±ØÐë°üº¬µ±Ç°Â·¾¶¡£

¶þ¡¢ дһ¸ö¹ØÓÚʹÓÃÈçºÎʹÓÃshellµÄ¼òµ¥µÄÓû§ÊֲᣬÓû§ÊÖ²áÓ¦¸Ã°üÀ¨×ã

¹»µÄϸ½ÚÒÔ·½±ãUNIXµÄ³õѧÕß¼òµ¥·½±ãµÄʹÓÃÕâ¸öshell³ÌÐò¡£

ÀýÈ磺½âÊÍi/oÖض¨Ïò£¬³ÌÐò»·¾³ÒÔ¼°ºǫ́³ÌÐòÖ´ÐС£Óû§ÊÖ²á±ØÐëÃüÃûΪreadme£¬±ØÐëΪһ¸ö¿ÉÒÔ²¢×¼Îļþ±à¼­Æ÷¿ÉÒÔ´ò¿ªµÄ¼òµ¥µÄÎĵµ¡£

ÀýÈçÕâ¸öÃèÊöÀàÐͺÍÉî¶ÈµÄÀý×Ó£¬cahºÍtcshµÄÔÚÏß°ïÖú£¨man csh,man tcsh£©¡£ÕâÁ½¸öshellÃ÷ÏÔ±ÈÎÒÃÇËùνµÄshell¾ßÓиü¼ÓÇ¿´ó¹¦ÄÜ¡£ËùÒÔÓÃÓû§Êֲ᲻һ¶¨Òª·Ç³£ÅÓ´ó£¬Ò²²»Ó¦°üÀ¨±àÒëָʾ¡ª¡ª¼´ÎļþÁбíºÍÔ´´úÂ룬Õâ¸öÓû§ÊÖ²áÓ¦¸ÃÃæÏò²Ù×÷Óû§£¬ËùÒǪ̂Ӧ¸ÃÊÇÒ»¸ö²Ù×÷ÓÃÊÖ²á¶ø²»ÊÇÒ»¸ö³ÌÐòÔ±Êֲᡣ

Èý¡¢ Ô´´úÂë±ØÐëÓкÜÏêϸµÃ×¢ÊÍ£¬²¢ÇÒÒªÓкܺõÄ×éÖ¯½á¹¹ÒÔ·½±ã·ÇÖÆ×÷ÈËÔ±

µÄÔĶÁ£¬Î¬»¤»òÕßÐ޸ġ£½á¹¹ºÍ×¢ÊÍʹ³ÌÐò¸ú¸ü¼ÓÒ×ÓÚÔĶÁºÍÀí½â£¬²¢ÇÒ¿ÉÒÔ±£Ö¤Åú¸ÄÄãµÄ×÷ÒµµÄÈ˲»ÓúܷѾ¢µÄÈ¥¶ÁÄãµÄÔ´´úÂë¡£

ËÄ¡¢ ÔÚÌá½»µÄÔ´´úÂëÎļþÖУ¬°üÀ¨£º a) Ô­Îļþ b) makefile c) readme

²¢ÇÒÕâЩԴ´úÂëÓ¦¸ÃÄܹ»±àÒëÍê³ÉÍêÕûµÄ½á¹û¡£

Îå¡¢ makefile±ØÐë²úÉú¶þ½øÖÆδ¼ûmyshell¡£

ÀýÈçÒ»¸ömakefileÀý×Ó£º

#Joe Citizen,s1234567-Operating Systems Project 1 #CompLab1/01 tutor: Fred Bloggs

myshell:myshell.c utility,c myshell.h gcc-Wall myshell.c utility.c-o myshell

ÔÚÖ´ÐÐÃüÁî·û¼üÈëmake¾Í»á²úÉúmyshell³ÌÐò¡£ÉÏÊömakefile´ÓµÚ4ÐбØÐëÒÔÖƱí·û¿ªÊ¼¡£

Áù¡¢ ¸ù¾ÝÉÏÊöµÚ6µãµÄʵÀýÖУ¬Ìá½»µÄĿ¼ÖÐÓ¦¸Ã°üº¬ÒÔÏÂÎļþ£º

i. makefile ii. myshell.c

iii. iv. v. utility.c myshell.h readme

ÏîĿ˵Ã÷£º¿ÉÒÔͨ¹ýµ÷ÓÃLinuxϵÄ/bin/shÀ´ÊµÏÖ¸ÃÏîÄ¿shell£¬Ö÷ÒªÊÇʵÏÖ¼¸¸önachosϵͳµ÷ÓãºSysWrite,SysRead,SysExec,SysJoin,SysStrncmp È»ºó¾ÍÊÇÔÚexception.ccÖе÷ÓÃÕâЩϵͳµ÷Óà ÔÚshellÖÐËüÃǵÄ×÷Óãº

? SysWrite: ÏÔʾÌáʾ·ûÓëshellµÄ°æ±¾ÐÅÏ¢ ? SysRead£º¶ÁÈ¡n¸ö×Ö·ûµ½»º´æbuffer

? SysExec ÓëSysJoin£ºÖ÷ÒªÊÇÓÃÀ´Ö´ÐÐÃüÁÈçdir µÈ ¡£Èç¹û¸ÃÃüÁî²»´æÔÚÔò´òÓ¡´íÎóÐÅÏ¢

? SysStrncmp:±È½ÏÁ½¸ö×Ö·û´®µÄÇ°n¸ö×Ö·û£¬ Ö÷ÒªÓÃÀ´ÅжÏÓû§ÊÇ·ñÊäÈëÁËexitÃüÁîÒÔÍ˳öshell

NachosÖÐÐ޸ĵĵط½£º 1. syscall.h

Ìí¼ÓÁË´úÂ룺#define SC_Strncmp 43

int Strncmp(char *buffer,char*str,int size); 2. Ksyscall Ìí¼ÓµÄ´úÂ룺 #include #include #include #include #include #include #include #include #include #include #include #include #include

#define SHELL \

int SysWrite(char*buffer ,int size,OpenFileId id) {