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