·¢²¼Ê±¼ä : ÐÇÆÚÒ» ÎÄÕÂ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
c) dir
e) echo
±í·û¿ÉÄܱ»Ëõ¼õΪһ¸ö¿Õ¸ñ£©¡£
f) help¡ª¡ªÏÔʾÓû§Êֲᣬ²¢ÇÒʹÓÃmoreÃüÁî¹ýÂË¡£ g) pause¡ª¡ªÍ£Ö¹shell²Ù×÷Ö±µ½°´Ï»سµ¼ü¡£ h) quit¡ª¡ªÍƳöshell¡£
i) shellµÄ»·¾³±äÁ¿Ó¦¸Ã°üº¬shell=
2. ÆäËûµÄÃüÁîÐÐÊäÈë±»½âÊÍΪ³ÌÐòµÄµ÷Óã¬shell´´½¨²¢Ö´ÐÐÕÛ¸ö³ÌÐò£¬
²¢×÷Ϊ×Ô¼ºµÄ×Ó½ø³Ì¡£³ÌÐòµÄÖ´ÐеĻ·¾³±äÁ¿°üº¬ÔÚÒÔÏÂÌõÄ¿ÖУº parent=
3. Shell±ØÐëÄܹ»´ÓÎļþÖÐÌáÈ¡ÃüÁîÊäÈë ÀýÈçshellʹÓÃÒÔÏÂÃüÁîÐб»µ÷Óãº
programname arg1 arg2
Õâ¸öÅú´¦ÀíÎļþÓ¦¸Ã°üÀ¨Ò»×éÃüÁ£¬µ±µ½´ïÎļþ½áβʱshellÍ˳ö¡£ºÜÃ÷ÏÔ£¬Èç¹ûshell±»µ÷ÓÃÊÇûÓÐʹÓòÎÊý£¬Ëû»áÔÚÆÁÄ»ÉÏÏÔʾÌáʾ·ûÇëÇóÓû§ÊäÈë¡£
4. Shell±ØÐëÖ§³Öi/oÖض¨Ïò£¬stdinºÍstdout£¬»òÕßÆäÖÐÖ®Ò» a) ÀýÈçÃüÁîÐУº
programname arg1 arg2
ʹÓÃ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
#define SHELL \
int SysWrite(char*buffer ,int size,OpenFileId id) {