多級(jí)目錄管理及l(fā)inux代碼分析 操作系統(tǒng)課程設(shè)計(jì)報(bào)告_(6)_第1頁(yè)
多級(jí)目錄管理及l(fā)inux代碼分析 操作系統(tǒng)課程設(shè)計(jì)報(bào)告_(6)_第2頁(yè)
多級(jí)目錄管理及l(fā)inux代碼分析 操作系統(tǒng)課程設(shè)計(jì)報(bào)告_(6)_第3頁(yè)
多級(jí)目錄管理及l(fā)inux代碼分析 操作系統(tǒng)課程設(shè)計(jì)報(bào)告_(6)_第4頁(yè)
多級(jí)目錄管理及l(fā)inux代碼分析 操作系統(tǒng)課程設(shè)計(jì)報(bào)告_(6)_第5頁(yè)
已閱讀5頁(yè),還剩74頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

哈爾濱理工大學(xué)課程設(shè)計(jì)(計(jì)算機(jī)操作系統(tǒng))題目多級(jí)目錄管理及LINUX代碼分析班級(jí)姓名指導(dǎo)教師系主任2014年03月01日目錄1多級(jí)目錄管理課程設(shè)計(jì)111題目分析112數(shù)據(jù)結(jié)構(gòu)113流程圖114實(shí)現(xiàn)技術(shù)215設(shè)計(jì)結(jié)論和心得22LINUX代碼分析321時(shí)鐘和定時(shí)器中斷422TVECS結(jié)構(gòu)及其實(shí)現(xiàn)423間隔定時(shí)器ITIMER424函數(shù)調(diào)用關(guān)系圖4哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告01多級(jí)目錄管理課程設(shè)計(jì)11題目分析在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,都要存儲(chǔ)大量的文件,為了能對(duì)這些文件實(shí)施有效的管理,必須對(duì)他們加以妥善組織,這主要是通過(guò)文件目錄來(lái)實(shí)現(xiàn)的。對(duì)于大型文件系統(tǒng),通常采用三級(jí)或三級(jí)以上的目錄結(jié)構(gòu),以提高對(duì)目錄的檢索速度和文件系統(tǒng)的性能。多級(jí)文件目錄又成為樹(shù)型目錄結(jié)構(gòu),主目錄在這里被成為根目錄,把數(shù)據(jù)文件成為樹(shù)葉,其他的目錄均作為樹(shù)的結(jié)點(diǎn)。本課程設(shè)計(jì)要求設(shè)計(jì)一個(gè)基于多級(jí)文件目錄的文件管理系統(tǒng)。通過(guò)具體的文件存儲(chǔ)空間的管理、文件的物理結(jié)構(gòu)、目錄結(jié)構(gòu)和文件操作的實(shí)現(xiàn),加深對(duì)文件系統(tǒng)內(nèi)部功能和實(shí)現(xiàn)過(guò)程的理解。主要要求有1在內(nèi)存中開(kāi)辟一個(gè)虛擬磁盤(pán)空間作為文件存儲(chǔ)器,在其上實(shí)現(xiàn)一個(gè)多級(jí)文件目錄的文件管理系統(tǒng);2文件物理結(jié)構(gòu)可采用顯式鏈接或其他方法;3文件目錄結(jié)構(gòu)采用多級(jí)目錄結(jié)構(gòu),每個(gè)目錄項(xiàng)包含文件名、物理地址、長(zhǎng)度等信息,還可以通過(guò)目錄項(xiàng)實(shí)現(xiàn)對(duì)文件的讀和寫(xiě)的保護(hù);4設(shè)計(jì)一個(gè)較實(shí)用的用戶界面,方便用戶使用。哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告112數(shù)據(jù)結(jié)構(gòu)1文件夾數(shù)據(jù)結(jié)構(gòu)體TYPEDEFSTRUCTMFD/主文件目錄CHARUSERNAME100CHARPASSWORD100FILEFP/文件目錄指針MFD2用戶文件數(shù)據(jù)結(jié)構(gòu)體TYPEDEFSTRUCTUFD/用戶文件目錄CHARFILENAME256CHARPROTECT/保護(hù)碼哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告2INTLENGTH/文件長(zhǎng)度UFD3功能實(shí)現(xiàn)命令數(shù)據(jù)結(jié)構(gòu)體TYPEDEFSTRUCTCOMM/命令串CHARSTRING256/用戶命令串STRUCTCOMMNEXT/后繼指針指向命令各參數(shù)所在的結(jié)點(diǎn)COMMMFDMAINFDN/主文件目錄數(shù)組UFDUSERFDM/用戶文件目錄數(shù)組OFDOPENFDL/打開(kāi)文件目錄數(shù)組COMMCOMMAND/命令串指針I(yè)NTNEXT哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告3DISK哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告413流程圖哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告5開(kāi)始輸入用戶判斷是否存在YESNO刪除文件創(chuàng)建子目錄改變子目錄列出子目錄關(guān)閉文件打開(kāi)文件創(chuàng)建文件讀文件寫(xiě)文件是否退出結(jié)束NOYES哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告6圖1程序流程圖14實(shí)現(xiàn)技術(shù)1運(yùn)行后主界面顯示圖2主界面哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告72輸入LOGIN命令用戶登陸,當(dāng)用戶賬號(hào)不存在時(shí),即可創(chuàng)建圖3創(chuàng)建用戶3創(chuàng)建用戶下文件功能實(shí)現(xiàn)哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告8圖4創(chuàng)建用戶4打開(kāi)文件OPEN命令功能的實(shí)現(xiàn)哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告9圖5打開(kāi)文件5讀文件READ命令功能實(shí)現(xiàn)圖6讀文件6寫(xiě)文件WRITE命令功能實(shí)現(xiàn),及對(duì)內(nèi)容中添加實(shí)現(xiàn)哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告10圖7寫(xiě)文件8退出文件LOGOUT操作圖8退出文件哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告1115設(shè)計(jì)結(jié)論和心得這次操作系統(tǒng)課程設(shè)計(jì),在編寫(xiě)過(guò)程中,遇到很多難題,特別是在操作系統(tǒng)實(shí)驗(yàn)中不曾注意到的問(wèn)題,也有許多新的問(wèn)題,在實(shí)際反復(fù)調(diào)試運(yùn)行中,不斷加深了對(duì)操作系統(tǒng)的理解,也很大地程度上提高了編程的能力,由于對(duì)重要概念的把握程度還不夠深入,在實(shí)際理解編寫(xiě)時(shí)遇到很多不該發(fā)生的問(wèn)題。不過(guò),都很好的解決并牢牢地掌握住了。通過(guò)做多級(jí)目錄文件系統(tǒng),我知道了多級(jí)目錄文件系統(tǒng)的工作原理,在打開(kāi)文件時(shí)系統(tǒng)是如何進(jìn)行操作的,并加深了理解。希望在以后的學(xué)習(xí)中,繼續(xù)保持這份昂揚(yáng)的斗志,繼續(xù)努力學(xué)習(xí)計(jì)算機(jī)方面的知識(shí),永不懈怠。通過(guò)這次課程設(shè)計(jì),不僅讓我了解了多級(jí)目錄文件系統(tǒng),更重要的還讓我學(xué)會(huì)了、或者說(shuō)是驗(yàn)證了“做事一定要有次序和對(duì)事物的總體把握”這句話。開(kāi)始我一味的進(jìn)行調(diào)試,急切的想僥幸調(diào)試出來(lái),但由于沒(méi)有進(jìn)行深入的考慮,我調(diào)試了很久都沒(méi)沒(méi)有成功,我仔細(xì)的分析題目,分析材料,在原由的基礎(chǔ)上我進(jìn)行了改正,我最后還是調(diào)試成功了,雖然還是經(jīng)過(guò)了一翻努力,當(dāng)然汗水還是留的很值,這次操作系統(tǒng)實(shí)習(xí),不僅讓我對(duì)操作系統(tǒng)這門(mén)課程有了更深入的研究、對(duì)很多重要的概念有了鞏固和掌握,還給了我今后做事的啟示。做事要塌實(shí),不能想著一步登天,要有計(jì)劃,有目的的進(jìn)行做事。盲目真的不應(yīng)該再在我們新一代的大學(xué)生身上出現(xiàn)了,我們應(yīng)該認(rèn)真找到自己的缺點(diǎn)并且及時(shí)改正。在這里,我如果不說(shuō)感謝的話,不知道要說(shuō)些什么好;首先感謝學(xué)校和父母,然后更重要的是感謝老師的教導(dǎo)?!盎畹嚼?,學(xué)到老”,這也是我整個(gè)學(xué)習(xí)過(guò)程中的一次經(jīng)驗(yàn)、一次總結(jié),我相信它肯定哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告12會(huì)給我今后的學(xué)習(xí)有所啟示和指導(dǎo)作用。附錄源程序代碼INCLUDEINCLUDE/里面有CLRSCR清屏函數(shù)INCLUDEINCLUDEINCLUDE/內(nèi)存分配函數(shù)INCLUDEINCLUDEDEFINEN30/用戶數(shù)DEFINEM20/一個(gè)用戶可保存M個(gè)文件DEFINEL5/用戶只能一次打開(kāi)L個(gè)文件TYPEDEFSTRUCTMFD/主文件目錄CHARUSERNAME100CHARPASSWORD100哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告13FILEFP/文件目錄指針MFDTYPEDEFSTRUCTUFD/用戶文件目錄CHARFILENAME256CHARPROTECT/保護(hù)碼INTLENGTH/文件長(zhǎng)度UFDTYPEDEFSTRUCTOFD/打開(kāi)文件目錄CHARFILENAME256CHAROPENCODE/打開(kāi)保護(hù)碼INTFP/讀寫(xiě)指針OFDTYPEDEFSTRUCTCOMM/命令串CHARSTRING256/用戶命令串STRUCTCOMMNEXT/后繼指針指向命令各參數(shù)所在的結(jié)點(diǎn)COMMMFDMAINFDN/主文件目錄數(shù)組UFDUSERFDM/用戶文件目錄數(shù)組哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告14OFDOPENFDL/打開(kāi)文件目錄數(shù)組COMMCOMMAND/命令串指針CHARUSERNAME100INTUSERNUM,SAVENUM,OPENNUMINTWORKFILEVOIDINIT/初始化主文件目錄數(shù)組VOIDINIT_UFDCHARUSERNAME/初始化用戶文件目錄VOIDMESGCHARSTR/輸出函數(shù)CHARGETUSER/設(shè)置用戶函數(shù)聲明CHARGETPASS/設(shè)置口令函數(shù)聲明COMMREADCOMMAND/讀命令串函數(shù)聲明VOIDLOGIN/用戶登錄VOIDSETPASS/設(shè)置口令VOIDCREATE/創(chuàng)建用戶文件VOIDMYDELETE/刪除VOIDMYREAD/讀VOIDMYOPEN/打開(kāi)VOIDMYCLOSE/關(guān)閉哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告15VOIDMYWRITE/寫(xiě)VOIDHELP/幫助VOIDMAININITPRINTF“NTT“PRINTF“NTT多級(jí)文件目錄的文件管理系統(tǒng)“PRINTF“NTT“PRINTF“NTT選擇命令“PRINTF“NTTLOGINSETPASSCREATE“PRINTF“NTTOPENREADWRITEDELETE“PRINTF“NTTHELPEXITCOPYRENAME“PRINTF“NTT首次使用請(qǐng)輸入HELP命令請(qǐng)求幫助“PRINTF“NTT使用中歡迎以HELP請(qǐng)求幫助“WHILE1READCOMMANDIFSTRCMPCOMMANDSTRING,“CREATE“0CREATEELSEIFSTRCMPCOMMANDSTRING,“DELETE“0哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告16MYDELETEELSEIFSTRCMPCOMMANDSTRING,“OPEN“0MYOPENELSEIFSTRCMPCOMMANDSTRING,“CLOSE“0MYCLOSEELSEIFSTRCMPCOMMANDSTRING,“READ“0MYREADELSEIFSTRCMPCOMMANDSTRING,“WRITE“0MYWRITEELSEIFSTRCMPCOMMANDSTRING,“LOGIN“0LOGINELSEIFSTRCMPCOMMANDSTRING,“SETPASS“0SETPASSELSEIFSTRCMPCOMMANDSTRING,“HELP“0HELPELSEIFSTRCMPCOMMANDSTRING,“EXIT“0BREAK哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告17ELSEMESG“BADCOMMAND“VOIDMESGCHARSTRPRINTF“NSN“,STRVOIDINIT/初始化主文件目錄數(shù)組FILEFP/文件指針CHARTEMPNAME20,TEMPPASS20USERNUM0/全局變量初始化SAVENUM0OPENNUM0STRCPYUSERNAME,“/用戶使用時(shí),建立一個(gè)MAINFILETXT文件,包括每個(gè)用戶的用戶名和口令/然后,才能運(yùn)行此程序IFFPFOPEN“MAINFILETXT“,“R“NULL/以讀方式打開(kāi)文件MAINFILETXT哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告18WHILEFEOFFP/若不是文件尾STRCPYTEMPNAME,“/清空數(shù)組操作FGETSTEMPNAME,20,FP/讀用戶名IFSTRCMPTEMPNAME,“0FGETSTEMPPASS,20,FPTEMPNAMESTRLENTEMPNAME10/設(shè)置串結(jié)束符TEMPPASSSTRLENTEMPPASS10STRCPYMAINFDUSERNUMUSERNAME,TEMPNAME/生成MAINFD數(shù)組STRCPYMAINFDUSERNUMPASSWORD,TEMPPASS/生成USERFD數(shù)組USERNUM/生成USERNUM的值IFUSERNUMNBREAKFCLOSEFPVOIDINIT_UFDCHARUSERNAME/初始化用戶文件目錄哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告19FILEFPCHARTEMPFILE100,TEMPPROTINTTEMPLENGTHSAVENUM0OPENNUM0WORKFILE1IFFPFOPENUSERNAME,“R“NULLWHILEFEOFFPSTRCPYTEMPFILE,“FGETSTEMPFILE,50,FPIFSTRCMPTEMPFILE,“0FSCANFFP,“C“,FSCANFFP,“D“,TEMPFILESTRLENTEMPFILE10STRCPYUSERFDSAVENUMFILENAME,TEMPFILE/文件名USERFDSAVENUMPROTECTTEMPPROT/保護(hù)碼USERFDSAVENUMLENGTHTEMPLENGTH/文件長(zhǎng)度哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告20SAVENUMFGETSTEMPFILE,50,FPCHARGETUSER/設(shè)置用戶函數(shù)聲明CHARUSERNAME20CHARTEMPINTIUSERNAME00FORI0I“GETSLINE/輸入一個(gè)命令串FORI0I0/對(duì)命令行中的子串進(jìn)行處理哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告24TEMPEND0NEWPCOMMMALLOCSIZEOFCOMMSTRCPYNEWPSTRING,TEMPNEWPNEXTNULLIFCOMMANDNULLCOMMANDNEWP/把各子串鏈成一個(gè)鏈表ELSEPCOMMANDWHILEPNEXTNULLPPNEXTPNEXTNEWPPCOMMANDRETURNCOMMAND哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告25VOIDLOGIN/用戶注冊(cè)FILEFPINTICHARPASSWORD20,CONFIRM20,TEMPNAME20IFCOMMANDNEXTNULLPRINTF“NUSERNAME“STRCPYTEMPNAME,GETUSER/輸入用戶名并且返回之ELSEIFCOMMANDNEXTNEXTNULLMESG“TOOMANYPARAMETERS“RETURNELSESTRCPYTEMPNAME,COMMANDNEXTSTRINGFORI0IUSERNUM/新用戶哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告26PRINTF“N新用戶賬號(hào),輸入你的密碼兩次“PRINTF“N密碼“STRCPYPASSWORD,GETPASS/輸入口令并且返回之PRINTF“N密碼“STRCPYCONFIRM,GETPASS/第二次輸入口令I(lǐng)FSTRCMPPASSWORD,CONFIRM0/兩次輸入的口令是否相同的處理情況IFUSERNUMN/用戶數(shù)不能超過(guò)NMESG“創(chuàng)建新賬號(hào)錯(cuò)誤用戶賬號(hào)字符超過(guò)限制N登陸失敗“ELSESTRCPYMAINFDUSERNUMUSERNAME,TEMPNAME/把新用戶和口令填入MAINFD中STRCPYMAINFDUSERNUMPASSWORD,PASSWORDUSERNUMSTRCPYUSERNAME,TEMPNAMEMESG“創(chuàng)建新用戶N登陸成功恭喜“INIT_UFDUSERNAME/初始化用戶文件目錄FPFOPEN“MAINFILETXT“,“W“/把新用戶填入MAINFILETXT文件中FORI0INEXTNULLMESG“TOOFEWPARAMETERS“ELSE/存在2個(gè)或3個(gè)參數(shù)的處理STRCPYTEMPFILE,“TEMPCODERIFSTRCMPCOMMANDNEXTSTRING,“/R“0TEMPCODERTYPE1ELSEIFSTRCMPCOMMANDNEXTSTRING,“/W“0TEMPCODEWTYPE1哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告32ELSEIFSTRCMPCOMMANDNEXTSTRING,“/D“0TEMPCODEDTYPE1ELSEIFCOMMANDNEXTSTRING0/MESG“ERROR/R/W/DREQUEST“ELSEIFCOMMANDNEXTNEXTNULLMESG“TOOMANYPARAMETERS“ELSESTRCPYTEMPFILE,COMMANDNEXTSTRINGIFTYPE1/三個(gè)參數(shù)的情況補(bǔ)充IFCOMMANDNEXTNEXTNULLIFCOMMANDNEXTNEXTNEXTNULLMESG“TOOMANYPARAMETERS“ELSESTRCPYTEMPFILE,COMMANDNEXTNEXTSTRINGELSEMESG“TOOFEWPARAMETERS“IFSTRCMPTEMPFILE,“0哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告33FORI0ISAVENUMMESG“FILENOTEXISTED“ELSE/文件存在的情況FORI0IL/打開(kāi)的文件已經(jīng)占滿了5個(gè)名額MESG“ERRORCANNOTOPENFILENIMBEROFOPENEDFILESLIMITED“ELSE/打開(kāi)處理STRCPYOPENFDOPENNUMFILENAME,TEMPFILEOPENFDOPENNUMOPENCODETEMPCODEWORKFILEOPENNUMOPENNUMMESG“FILEOPENSUCCESS“VOIDMYCLOSE/關(guān)閉文件INTI,JCHARTEMPFILE100IFSTRCMPUSERNAME,“0哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告35MESG“NOUSERLOGIN“ELSEIFCOMMANDNEXTNULLMESG“TOOFEWPARAMETERS“ELSEIFCOMMANDNEXTNEXTNULLMESG“TOOMANYPARAMETERS“ELSESTRCPYTEMPFILE,COMMANDNEXTSTRINGFORI0ISAVENUM/文件不存在MESG“文件不存在“ELSEFORJ0JOPENNUM/文件存在了但是沒(méi)有打開(kāi)MESG“文件存在了但是沒(méi)有打開(kāi)“ELSE/文件存在并且打開(kāi)STRCPYOPENFDJFILENAME,“OPENFDJOPENCODEOPENNUMMESG“文件關(guān)閉成功“VOIDMYDELETE/刪除文件INTI,JINTTEMPSAVE/用于確定被刪除文件在數(shù)組USERFDM中的位置CHARTEMPFILE100FILEFPIFSTRCMPUSERNAME,“0哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告37MESG“沒(méi)有用戶登陸“ELSEIFCOMMANDNEXTNULLMESG“TOOFEWPARAMETERS“ELSEIFCOMMANDNEXTNEXTNULLMESG“太多參數(shù)導(dǎo)致錯(cuò)誤“ELSESTRCPYTEMPFILE,COMMANDNEXTSTRINGFORI0ISAVENUM/文件不存在MESG“THEFILEDONOTEXISTED“ELSEFORJ0JNEXTNULL哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告40MESG“參數(shù)太少導(dǎo)致錯(cuò)誤“ELSEIFCOMMANDNEXTNEXTNULLMESG“參數(shù)太多導(dǎo)致錯(cuò)誤“ELSESTRCPYTEMPFILE,COMMANDNEXTSTRINGFORI0ISAVENUMMESG“文件不存在“ELSETEMPSAVEIFORI0IOPENNUMMESG“文件沒(méi)有打開(kāi)“ELSE哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告41IFUSERFDTEMPSAVELENGTHNEXTNULLMESG“參數(shù)太少導(dǎo)致錯(cuò)誤“ELSEIFCOMMANDNEXTNEXTNULLMESG“參數(shù)太多導(dǎo)致錯(cuò)誤“ELSESTRCPYTEMPFILE,COMMANDNEXTSTRINGFORI0ISAVENUMMESG“文件不存在“ELSETEMPSAVEIFORI0IOPENNUMMESG“文件沒(méi)有打開(kāi)“ELSEIFUSERFDTEMPSAVELENGTH“,“命令格式SETPASS“,“命令格式CREATE“,“命令格式OPEN/R|/W|/D“,“命令格式READ“,“命令格式WRITE“,“命令格式TDELETE“,“命令格式HELP“,“命令格式EXIT“,“命令格式COPY“,“命令格式RENAME“STATICCHARDETAIL“解說(shuō)用戶進(jìn)入多用戶多級(jí)目錄文件系統(tǒng)“,“解說(shuō)修改用戶密碼“,“解說(shuō)用戶退出多用戶多級(jí)目錄文件系統(tǒng)“,哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告45“解說(shuō)創(chuàng)建新文件“,“解說(shuō)/R只讀DEFLAUTNT/W讀和修改NT/D讀、修改和刪除“,“解說(shuō)讀文件“,“解說(shuō)修改新文件“,“解說(shuō)刪除新文件“,“解說(shuō)/U列出用戶賬號(hào)NT/O列出打開(kāi)文件NT/F列出用戶文件DEFLAUT“,“解說(shuō)列出命令詳細(xì)格式和解說(shuō)NTDEFLAUT列出命令“,“解說(shuō)退出文件系統(tǒng)“,“解說(shuō)復(fù)制一個(gè)文件到另一個(gè)文件“,“解說(shuō)修改文件名“INTHELPNUM13INTIIFCOMMANDNEXTNULLMESGCMDHLP9MESGDETAIL9MESG“步驟1用LOGIN命令登陸“PRINTF“T輸入用戶名是舊用戶就直接登陸,否則就創(chuàng)建新用戶“哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告46MESG“步驟2打開(kāi)OPEN命令)文件再讀(READ命令),寫(xiě)(WRITE命令),刪除(DELETE命令)“PRINTF“你可以打開(kāi)一個(gè)或多個(gè)文件,一個(gè)命令能打開(kāi)一個(gè)文件“MESG“步驟3讀(READ命令),寫(xiě)(WRITE命令)或刪除(DELETE命令)一些文件“PRINTF“你可以操作打開(kāi)文件中的一個(gè),一個(gè)命令能操作一個(gè)文件“MESG“步驟4關(guān)閉(CLOSE命令)打開(kāi)文件“PRINTF“你能關(guān)閉(CLOSE命令)一個(gè)打開(kāi)的文件,一個(gè)命令能打開(kāi)一個(gè)文件“MESG“步驟5用戶退出關(guān)閉所有用戶打開(kāi)的文件“PRINTF“N可輸入的命令清單“FORI0INEXTNEXTNULLMESG“參數(shù)太多“ELSEFORI0INEXTSTRING,CMDI0BREAKIFIHELPNUMMESG“這命令不存在“ELSEMESGCMDHLPIMESGDETAILI哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告482LINUX代碼分析操作系統(tǒng)需要一種機(jī)制,使它能夠在未來(lái)某個(gè)相當(dāng)精確的時(shí)間里調(diào)度激活某項(xiàng)活動(dòng),這種機(jī)制稱(chēng)之為定時(shí)器(TIMER)。任何希望支持操作系統(tǒng)的微處理器都必須有一個(gè)能夠周期中斷處理器的可編程的間隔計(jì)時(shí)器ITIMER。這種周期的中斷就象節(jié)拍一樣,組織起系統(tǒng)活動(dòng)的大合唱。分析了SYS_GETITIMER、SYS_SETITIMER和SYS_ALARM三個(gè)系統(tǒng)調(diào)用并了解了定時(shí)器的工作機(jī)制。21時(shí)鐘和定時(shí)器中斷系統(tǒng)啟動(dòng)核心時(shí),調(diào)用START_KERNAL繼續(xù)各方面的初始化,在這之前,各種中斷都被禁止,只有在完成必要的初始化后,直到執(zhí)行完KMALLOC_INIT后,才允許中斷(INITMAINC)。與時(shí)鐘中斷有關(guān)的部分初始化如下(1)調(diào)用TRAP_INIT設(shè)置各種TRAP入口,如SYSTEM_CALL、GDTENTRY、LDTENTRY、CALL哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告49GATE等。其中,017為各種錯(cuò)誤入口,1847保留。(2)調(diào)用INIT_IRQ函數(shù)設(shè)置核心系統(tǒng)的時(shí)鐘周期為10MS,即100HZ,它是以后按照輪轉(zhuǎn)法進(jìn)行CPU調(diào)度時(shí)所依照的基準(zhǔn)時(shí)鐘周期。每10MS產(chǎn)生的時(shí)鐘中斷信號(hào)直接輸入到第一塊8259A的INT0(即IRQ0)。初始化中斷矢量表中從0X20起的17個(gè)中斷矢量,用BAD_IRQ_INTERRUPT函數(shù)的地址(為中斷號(hào))填寫(xiě)。(3)調(diào)用SCHED_INIT函數(shù),設(shè)置啟動(dòng)第一個(gè)進(jìn)程INIT_TASK。設(shè)置用于管理BOTTOM_HALF機(jī)制的數(shù)據(jù)結(jié)構(gòu)BH_BASE,規(guī)定三類(lèi)事件的中斷處理函數(shù),即時(shí)鐘TIMER_BH、設(shè)備TQUEUE_BH和IMMEDIATE_BH。(4)調(diào)用TIME_INIT函數(shù),首先讀取當(dāng)時(shí)的CMOS時(shí)間,最后調(diào)用SETUP_X86_IRQ0,/中斷服務(wù)函數(shù)入口/UNSIGNEDLONGFLAGS/服務(wù)允中與否標(biāo)記/UNSIGNEDLONGMASKCONSTCHARNAMEVOIDDEV_IDSTRUCTIRQACTIONNEXT其中,若FLAGSA_INTERRUPT,則中斷矢量改為FAST_IRQ_INTERRUPT,在執(zhí)行中斷服務(wù)的過(guò)程中不允許出現(xiàn)中斷,若為其它標(biāo)記,則中斷矢量為IRQ_INTERRUPT,在執(zhí)行中斷服務(wù)的哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告51過(guò)程中,允許出現(xiàn)中斷。IRQ_ACTION的定義與初始化如下STATICVOIDINTERRUPT17VOIDIRQ_INTERRUPTSTATICVOIDFAST_INTERRUPT16VOIDFAST_IRQ_INTERRUPTSTATICVOIDBAD_INTERRUPT16VOIDBAD_IRQ_INTERRUPT以上為中斷號(hào)STATICSTRUCTIRQACTIONIRQ_ACTION16NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULLIRQ_ACTION是一個(gè)全局?jǐn)?shù)組,每個(gè)元素指向一個(gè)IRQ隊(duì)列,共16個(gè)IRQ隊(duì)列,時(shí)鐘中斷請(qǐng)哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告52求隊(duì)列在第一個(gè)隊(duì)列,即IRQ_ACTION0。當(dāng)每個(gè)中斷請(qǐng)求到來(lái)時(shí),都調(diào)用SETUP_X86_IRQ把該請(qǐng)求掛到相應(yīng)的隊(duì)列的后面。以后,系統(tǒng)每10MS產(chǎn)生一次時(shí)鐘中斷信號(hào),該信號(hào)直接輸入到第一塊8259A的INT0(即IRQ0)。CPU根據(jù)中斷矢量表和中斷源,找到中斷矢量函數(shù)入口IRQ0_INTERRUPT(程序運(yùn)行過(guò)程中允許中斷)或者FAST_IRQ0_INTERRUPT(程序運(yùn)行過(guò)程中不允許中斷)或者BAD_IRQ0_INTERRUPT(不執(zhí)行任何動(dòng)作,直接返回),這些函數(shù)由宏BUILD_TIMER_IRQ(CHIP,NR,MASK)展開(kāi)定義。宏BUILD_TIMER_IRQ(CHIP,NR,MASK)的定義如下DEFINEBUILD_TIMER_IRQCHIP,NR,MASKASMLINKAGEVOIDIRQ_NAMENRASMLINKAGEVOIDFAST_IRQ_NAMENRASMLINKAGEVOIDBAD_IRQ_NAMENR_ASM_哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告53“N“_ALIGN_STR“N“SYMBOL_NAME_STRFAST_IRQNR“_INTERRUPTNT“SYMBOL_NAME_STRBAD_IRQNR“_INTERRUPTNT“SYMBOL_NAME_STRIRQNR“_INTERRUPTNT“PUSHL“NR“2NT“SAVE_ALLENTER_KERNELACK_CHIPMASK,NR其中NR為中斷請(qǐng)求類(lèi)型,取值015。在IRQC中通過(guò)語(yǔ)句BUILD_TIMER_IRQFIRST,0,0X01調(diào)用該宏,在執(zhí)行宏的過(guò)程中處理時(shí)鐘中斷響應(yīng)程序DO_IRQ。函數(shù)DO_IRQ的第一個(gè)參數(shù)是中斷請(qǐng)求隊(duì)列序號(hào),時(shí)鐘中斷請(qǐng)求傳進(jìn)來(lái)的該參數(shù)是0。于是程序根據(jù)參數(shù)0找到請(qǐng)求隊(duì)列IRQ_ACTION0,逐個(gè)處理該隊(duì)列上HANDLER所指的時(shí)鐘中斷請(qǐng)求的服務(wù)函數(shù)。由于已經(jīng)指定時(shí)鐘中斷請(qǐng)求的服務(wù)函數(shù)是TIMER_INTERRUPT,在函數(shù)TIMER_INTERRUPT中,立即哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告55調(diào)用DO_TIMER函數(shù)。函數(shù)DO_TIMER把JIFFIES和LOST_TICKS加1,接著就執(zhí)行MARK_BHTIMER_BH函數(shù),把BOTTOM_HALF中時(shí)鐘隊(duì)列對(duì)應(yīng)的位置位,表示該隊(duì)列處于激活狀態(tài)。在做完這些動(dòng)作后,程序從函數(shù)DO_IRQ中返回,繼續(xù)執(zhí)行以后的匯編代碼。于是,程序在執(zhí)行語(yǔ)句JMPRET_FROM_SYS_CALL后,跳到指定的位置處繼續(xù)執(zhí)行。代碼段JMPRET_FROM_SYS_CALL及其相關(guān)的代碼段如下ALIGNGLOBLRET_FROM_SYS_CALLRET_FROM_SYS_CALLCMPL0,SYMBOL_NAMEINTR_COUNTJNE2F9MOVLSYMBOL_NAMEBH_MASK,EAX哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告56ANDLSYMBOL_NAMEBH_ACTIVE,EAXJNEHANDLE_BOTTOM_HALFIFDEF_SMP_CMPBNO_PROC_ID,SYMBOL_NAMESAVED_ACTIVE_KERNEL_PROCESSORJNE2FENDIFMOVLEFLAGSESP,EAXCHECKVM86FLAGCS/SSARETESTLVM_MASK,EAXDIFFERENTTHENJNE1FCMPWKERNEL_CS,CSESPWASOLDCODESEGMENTSUPERVISORJE2F1STI哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告57ORLIF_MASK,EAXTHESEJUSTTRYTOMAKESUREANDLNT_MASK,EAXTHEPROGRAMDOESNTDOANYTHINGMOVLEAX,EFLAGSESPSTUPIDCMPL0,SYMBOL_NAMENEED_RESCHEDJNERESCHEDULEIFDEF_SMP_GET_PROCESSOR_OFFSETEAXMOVLSYMBOL_NAMECURRENT_SET,EAX,EAXELSEMOVLSYMBOL_NAMECURRENT_SET,EAXENDIFCMPLSYMBOL_NAMETASK,EAXTASK0CANNOTHAVESIGNALS哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告58JE2FMOVLBLOCKEDEAX,ECXMOVLECX,EBXSAVEBLOCKEDINEBXFORSIGNALHANDLINGNOTLECXANDLSIGNALEAX,ECXJNESIGNAL_RETURN2RESTORE_ALLALIGNSIGNAL_RETURNMOVLESP,ECXPUSHLECXTESTLVM_MASK,EFLAGSECX哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告59JNEV86_SIGNAL_RETURNPUSHLEBXCALLSYMBOL_NAMEDO_SIGNALPOPLEBXPOPLEBXRESTORE_ALLALIGNV86_SIGNAL_RETURNCALLSYMBOL_NAMESAVE_V86_STATEMOVLEAX,ESPPUSHLEAXPUSHLEBX哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告60CALLSYMBOL_NAMEDO_SIGNALPOPLEBXPOPLEBXRESTORE_ALLHANDLE_BOTTOM_HALFINCLSYMBOL_NAMEINTR_COUNTCALLSYMBOL_NAMEDO_BOTTOM_HALFDECLSYMBOL_NAMEINTR_COUNTJMP9FALIGNRESCHEDULEPUSHLRET_FROM_SYS_CALL哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告61JMPSYMBOL_NAMESCHEDULETEST上述匯編代碼用流程圖表示如下哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告62哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告63另外,一些與時(shí)鐘中斷及BOTTOMHALF機(jī)制有關(guān)的數(shù)據(jù)結(jié)構(gòu)介紹如下DEFINEHZ100UNSIGNEDLONGVOLATILEJIFFIES0系統(tǒng)每隔10MS自動(dòng)把它加1,它是核心系統(tǒng)計(jì)時(shí)的單位。ENUMTIMER_BH0,CONSOLE_BH,TQUEUE_BH,DIGI_BH,SERIAL_BH,RISCOM8_BH,SPECIALIX_BH,哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告64BAYCOM_BH,NET_BH,IMMEDIATE_BH,KEYBOARD_BH,CYCLADES_BH,CM206_BH現(xiàn)在只定義了13個(gè)BOTTOMHALF隊(duì)列,將來(lái)可擴(kuò)充到32個(gè)隊(duì)列。UNSIGNEDLONGINTR_COUNT0相當(dāng)于信號(hào)量的作用。只有其等于0,才可以DO_BOTTOM_HALF。INTBH_MASK_COUNT32用來(lái)計(jì)算BOTTOMHALF隊(duì)列被屏蔽的次數(shù)。只有某隊(duì)列的BH_MASK_COUNT數(shù)為0,才能ENABLE該哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告65隊(duì)列。UNSIGNEDLONGBH_ACTIVE0BH_ACTIVE是32位長(zhǎng)整數(shù),每一位表示一個(gè)BOTTOMHALF隊(duì)列,該位置1,表示該隊(duì)列處于激活狀態(tài),隨時(shí)準(zhǔn)備在CPU認(rèn)為合適的時(shí)候執(zhí)行該隊(duì)列的服務(wù),置0則相反。UNSIGNEDLONGBH_MASK0BH_MASK也是32位長(zhǎng)整數(shù),每一位對(duì)應(yīng)一個(gè)BOTTOMHALF隊(duì)列,該位置1,表示該隊(duì)列可用,并把處理函數(shù)的入口地址賦給BH_BASE,置0則相反。VOIDBH_BASE32VOIDBOTTOMHALF服務(wù)函數(shù)入口地址數(shù)組。定時(shí)器處理函數(shù)擁有最高的優(yōu)先級(jí),它的地址存放在BH_BASE0,總是最先執(zhí)行它所指向的函數(shù)。BOTTOMHALF機(jī)制的圖示如下我們注意到,在IRQ_INTERRUPT和FAST_IRQ_INTERRUPT中斷函數(shù)處理返回前,都通過(guò)語(yǔ)句JMPRET_FROM_SYS_CALL,跳到系統(tǒng)調(diào)用的返回處(見(jiàn)IRQH),如果BOTTOMHALF隊(duì)列不為空,則在那里哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告66做類(lèi)似IFBH_ACTIVEDO_BOTTOM_HALFINTR_COUNT0該判斷的匯編代碼見(jiàn)ENTRYS的判斷,調(diào)用DO_BOTTOM_HALF函數(shù)。在CPU調(diào)度時(shí),通過(guò)SCHEDULE函數(shù)執(zhí)行上述的判斷,再調(diào)用DO_BOTTOM_HALF函數(shù)??偠灾谙铝腥N時(shí)機(jī)1CPU調(diào)度時(shí)2系統(tǒng)調(diào)用返回前3中斷處理返回前哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告67都會(huì)作判斷調(diào)用DO_BOTTOM_HALF函數(shù)。DO_BOTTOM_HALF函數(shù)依次掃描32個(gè)隊(duì)列,找出需要服務(wù)的隊(duì)列,執(zhí)行服務(wù)后把對(duì)應(yīng)該隊(duì)列的BH_ACTIVE的相應(yīng)位置0。由于BH_ACTIVE標(biāo)志中TIMER_BH對(duì)應(yīng)的BIT為1,因而系統(tǒng)根據(jù)服務(wù)函數(shù)入口地址數(shù)組BH_BASE找到函數(shù)TIMER_BH的入口地址,并馬上執(zhí)行該函數(shù),在函數(shù)TIMER_BH中,調(diào)用函數(shù)RUN_TIMER_LIST()和函數(shù)RUN_OLD_TIMERS()函數(shù),定時(shí)執(zhí)行服務(wù)。22TVECS結(jié)構(gòu)及其實(shí)現(xiàn)有關(guān)TVECS結(jié)構(gòu)的一些數(shù)據(jù)結(jié)構(gòu)定義如下DEFINETVN_BITS6DEFINETVR_BITS8DEFINETVN_SIZE1TVN_BITSDEFINETVR_SIZE1TVR_BITSDEFINETVN_MASKTVN_SIZE1哈爾濱理工大學(xué)課程設(shè)計(jì)報(bào)告68DEFINETVR_MASKTVR_SIZE1D

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論