版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、華北電力大學(xué)實(shí)驗(yàn)報(bào)告華蛀電力*孑綜合實(shí)驗(yàn)報(bào)告(20132014年度第一學(xué)期)名稱:題目:計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)院系:班級(jí):學(xué)號(hào):學(xué)生姓名:指導(dǎo)教師:設(shè)計(jì)周數(shù):2>成績(jī):日期:2013年11月實(shí)驗(yàn)1實(shí)驗(yàn)環(huán)境的使用一、實(shí)驗(yàn)?zāi)康?、熟悉操作系統(tǒng)集成實(shí)驗(yàn)環(huán)境OSLab的基本使用方法。2、練習(xí)編譯、調(diào)試E0操作系統(tǒng)內(nèi)核以及E0應(yīng)用程序。二、預(yù)備知識(shí)閱讀本書第1章,對(duì)EOS操作系統(tǒng)和OSLab集成實(shí)驗(yàn)環(huán)境有一個(gè)初步的了解。重點(diǎn)學(xué)習(xí)第1.3節(jié),掌握EOS操作系統(tǒng)內(nèi)核和EOS應(yīng)用程序的源代碼是如何生成可執(zhí)行文件的,以及OSLab是如何將這些可執(zhí)行文件寫入軟盤鏡像文件并開始執(zhí)行的。三、實(shí)驗(yàn)內(nèi)容1、啟動(dòng)OSLa
2、b1. 在安裝有OSLab的計(jì)算機(jī)上,可以使用兩種不同的方法來啟動(dòng)OSLab:在桌面上雙擊"TevationOSLab”圖標(biāo)?;蛘唿c(diǎn)擊“開始“菜單,在“程序“中的“TevationOSLab”中選擇“Tevat中nOSLab”。2. OSLab每次啟動(dòng)后都會(huì)首先彈出一個(gè)用于注冊(cè)用戶信息的對(duì)話框(可以選擇對(duì)話框標(biāo)題欄上的“幫助”按鈕獲得關(guān)于此對(duì)話框的幫助信息)。在此對(duì)話框中填入學(xué)號(hào)和姓名后,點(diǎn)擊“確定”按鈕完成本次注冊(cè)。3. 觀察OSLab主窗口的布局。OSLab主要由下面的若干元素組成:菜單欄、工具欄以及??吭谧髠?cè)和底部的各種工具窗口,余下的區(qū)域用來放置編輯器窗口。2、學(xué)習(xí)OSLab
3、的基本使用方法2.1 新建Windows控制臺(tái)應(yīng)用程序項(xiàng)目新建一個(gè)Windows控制臺(tái)應(yīng)用程序項(xiàng)目的步驟如下:1. 在“文件”菜單中選擇“新建”,然后單擊“項(xiàng)目”。2. 在“新建項(xiàng)目”對(duì)話框中,選擇項(xiàng)目模板“控制臺(tái)應(yīng)用程序(c)”。3. 在“名稱”中輸入新項(xiàng)目使用的文件夾名稱“oslabo4. 在“位置”中輸入新項(xiàng)目保存在磁盤上的位置“C:test"o項(xiàng)目首理器質(zhì)目有點(diǎn)文 件夾節(jié)點(diǎn)丈 件有盧5. 點(diǎn)擊“確定”按鈕。m頭文件-hconsole.K旦console,c2.2 生成項(xiàng)目使用“生成項(xiàng)目”功能可以將程序的源代碼文件編譯為可執(zhí)行的二進(jìn)制文件,方法十分簡(jiǎn)單:在“生成”菜單中選擇“生
4、成項(xiàng)目”O(jiān)在項(xiàng)目生成過程中,“輸出”窗口會(huì)實(shí)時(shí)顯示生成的進(jìn)度和結(jié)果。如果源代碼中不包含語法錯(cuò)誤,會(huì)在最后提示生成成功,如圖:輸出生成我正在編譯,己?jiǎn)⒐ι桑篶onsole,配置:Debug正在鏈椀console-統(tǒng)計(jì)到。個(gè)錯(cuò)誤,Q個(gè)警告=-理康:成功=2.3 執(zhí)行項(xiàng)目在OSLab中選擇“調(diào)試”菜單中的“開始執(zhí)行(不調(diào)試)”,可以執(zhí)行剛剛生成的Windows控制臺(tái)應(yīng)用程序。啟動(dòng)執(zhí)行后會(huì)彈出一個(gè)Windows控制臺(tái)窗口,顯示控制臺(tái)應(yīng)用程序輸出的內(nèi)容。按任意鍵即可關(guān)閉此Windows控制臺(tái)窗口。2.4 調(diào)試項(xiàng)目在開始練習(xí)各種調(diào)試功能之前,首先需要對(duì)剛剛創(chuàng)建的例子程序進(jìn)行必要的修改,步驟如下:1. 右
5、鍵點(diǎn)擊”項(xiàng)目管理器”窗口中的“源文件”文件夾節(jié)點(diǎn),在彈出的快捷菜單中選擇“添力廠中的“添加新文件”。2. 在彈出的“添加新文件”對(duì)話框中選擇“C源文件”模板。3. 在“名稱”中輸入文件名稱“func”。4. 點(diǎn)擊“添加”按鈕,添加并自動(dòng)打開文件func.c,此時(shí)的“項(xiàng)目管理器”窗口會(huì)如圖:頂目昔理盞ux并將黃色箭頭指向下一個(gè)要執(zhí)行的代碼行。頭用陵00241使用斷點(diǎn)中斷執(zhí)行1. 在main函數(shù)中定義變量n的代碼行intn = 0;上點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“插入/刪除斷點(diǎn)”,會(huì)在此行左側(cè)的空白處顯示一個(gè)紅色圓點(diǎn),表示已經(jīng)成功在此行代碼添加了一 個(gè)斷點(diǎn),如圖:int Func (int
6、 n); / 聲明 Func 函數(shù)int n - O'n - Func(lO); pTintf (AHello World* nA);2.在“調(diào)試”菜單中選擇“啟動(dòng)調(diào)試”,Windows控制臺(tái)應(yīng)用程序開始執(zhí)行,隨后OSLab窗口被自動(dòng)激活,并且在剛剛添加斷點(diǎn)的代碼行左側(cè)空白中顯示一個(gè)黃色箭頭,表示程序已經(jīng)在此行代碼處中斷執(zhí)行(也就是說下一個(gè)要執(zhí)行的就是此行代碼),如圖:int Func (int n); / 聲明 Func 函數(shù)int n = 0,n 二 Func (10);printf ( Hell World!nn);2.4.2 單步調(diào)試按照下面的步驟練習(xí)使用“逐過程”功能:1.
7、在OS Lab的“調(diào)試”菜單中選擇“逐過程”,“逐過程”功能會(huì)執(zhí)行黃色箭頭當(dāng)前指向的代碼行,2. 按F10(“逐過程”功能的快捷鍵),黃色箭頭就指向了調(diào)用printf函數(shù)的代碼行。查看控制臺(tái)應(yīng)用程序窗口,仍然沒有任何輸出。3. 再次按F10執(zhí)行printf函數(shù),查看控制臺(tái)應(yīng)用程序窗口,可以看到已經(jīng)打印出了內(nèi)容。4. 在“調(diào)試”菜單中選擇“停止調(diào)試”,結(jié)束此次調(diào)試。243查看變量的值在調(diào)試的過程中,OSLab提供了三種查看變量值的方法,按照下面的步驟練習(xí)這些方法:1. 按F5啟動(dòng)調(diào)試,仍然會(huì)在之前設(shè)置的斷點(diǎn)處中斷。2. 將鼠標(biāo)移動(dòng)到源代碼編輯器中變量n的名稱上,此時(shí)會(huì)彈出一個(gè)窗口顯示出變量n當(dāng)前
8、的值(由于此時(shí)還沒有給變量n賦值,所以是一個(gè)隨機(jī)值)。3. 在源代碼編輯器中變量n的名稱上點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“快速監(jiān)視”,可以使用“快速監(jiān)視”對(duì)話框查看變量n的值。然后,可以點(diǎn)擊“關(guān)閉”按鈕關(guān)閉“快速監(jiān)視”對(duì)話框。4. 在源代碼編輯器中變量n的名稱上點(diǎn)擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“添加監(jiān)視”,變量n就被添加到了“監(jiān)視”窗口中。使用“監(jiān)視”窗口可以隨時(shí)查看變量的值和類型。此時(shí)按F10進(jìn)行一次單步調(diào)試,可以看到“監(jiān)視”窗口中變量n的值會(huì)變?yōu)?,如圖2.4.4調(diào)用堆棧1. 按F5啟動(dòng)調(diào)試,仍然會(huì)在之前設(shè)置的斷點(diǎn)處中斷。2. 選擇“調(diào)試”菜單“窗口”中的“調(diào)用堆?!?,激活“調(diào)用
9、堆?!贝翱凇?梢钥吹疆?dāng)前“調(diào)用堆?!贝翱谥兄挥幸粋€(gè)main函數(shù)(顯示的內(nèi)容還包括了參數(shù)值和函數(shù)地址)。3. 按F11(“逐語句”功能的快捷鍵)調(diào)試,直到進(jìn)入Func函數(shù),查看“調(diào)用堆?!贝翱诳梢园l(fā)現(xiàn)在堆棧上有兩個(gè)函數(shù)Func和main。其中當(dāng)前正在調(diào)試的Func函數(shù)在棧頂位置,main函數(shù)在棧底位置。說明是在main函數(shù)中調(diào)用了Func函數(shù)。3、EOS內(nèi)核項(xiàng)目的生成和調(diào)試3.1 新建EOS內(nèi)核項(xiàng)目新建一個(gè)EOSA核項(xiàng)目的步驟如下:1. 在“文件”菜單中選擇“新建”,然后單擊“項(xiàng)目”。2. 在“新建項(xiàng)目”對(duì)話框中,選擇項(xiàng)目模板“EOSKernelo3. 在“名稱”中輸入新項(xiàng)目使用的文件夾名稱“e
10、os”。4. 在“位置”中輸入新項(xiàng)目保存在磁盤上的位置“”。5. 點(diǎn)擊“確定”按鈕。3.2 生成項(xiàng)目1. 按F7生成項(xiàng)目,同時(shí)查看“輸出”窗口中的內(nèi)容,確認(rèn)生成成功。2. 打開C:eosdebug文件夾,查看生成的對(duì)象文件和目標(biāo)文件。找至ijboot.bin、loader.bin和kernel.dll三個(gè)二進(jìn)制文件,這三個(gè)文件就是EOS作系統(tǒng)在運(yùn)行時(shí)需要的可執(zhí)行文件。3.3 調(diào)試項(xiàng)目1. 在“項(xiàng)目管理器”窗口的心文件夾中找到start.c文件節(jié)點(diǎn),雙擊此文件節(jié)點(diǎn)使用源代碼編輯器打開start.c文件。2.在 start.c 添加一個(gè)斷點(diǎn),如圖文件中KiSystemStartup函數(shù)的“Kiln
11、itializePic();”語句所在行(第61行)9-7。EOSB動(dòng)時(shí)執(zhí)行的第一個(gè)內(nèi)核函數(shù)就是KiSystemStartup函數(shù)。/KilnitializePicO;KilnitializePit();3.4 查看軟盤鏡像文件中的內(nèi)容在“項(xiàng)目管理器”窗口中雙擊軟盤鏡像文件Floppy.img,就會(huì)使用FloppylmageEditor工具打開此文件(在FloppylmageEd讓。r工具中按F1可以查看此工具的幫助文件)。在FloppylmageEditor工具的文件列表中可以找到loader.bin文件和kernel.dll文件,這兩個(gè)文件都是在啟動(dòng)調(diào)試時(shí)被寫入軟盤鏡像文件的(可以查看這兩
12、個(gè)文件的修改日期)像的。boot.bin文件在啟動(dòng)調(diào)試時(shí)被寫入了軟盤鏡引導(dǎo)扇區(qū)中,不受軟盤文件系統(tǒng)的管理,所以在文件列表中找不到此文件。關(guān)閉FloppylmageEditor工具。3.5 查看EOSSDK(SoftwareDevelopmentKit)文件夾1. 點(diǎn)擊OS Lab工具欄上的“項(xiàng)目配置”下拉列表,選擇下拉列表中的“Release”項(xiàng)目配置,“ Release”項(xiàng)目配置被設(shè)置為新的活動(dòng)項(xiàng)目配置(原來的活動(dòng)項(xiàng)目配置是“Debug”)。如,二 j申 write_port.圖:.UCHAR + .J g 4、EOS應(yīng)用程序項(xiàng)目的生成和調(diào)試4.1 新建EOS應(yīng)用程序項(xiàng)目1. 在“文件”菜單
13、中選擇“新建”,然后單擊“項(xiàng)目”。2. “新建項(xiàng)目”對(duì)話框中,選擇項(xiàng)目模板“EOS應(yīng)用程序”。3. “名稱”中輸入新項(xiàng)目使用的文件夾名稱eosapp。4. “位置”中輸入新項(xiàng)目保存在磁盤上的位置5. 點(diǎn)擊“確定”按鈕。4.2 生成項(xiàng)目1. 按F7生成項(xiàng)目,同時(shí)查看“輸出”窗口中的內(nèi)容,確認(rèn)生成成功。2. 打開C:eosappdebug文件夾,查看生成的對(duì)象文件和目標(biāo)文件。其中的EOSApp.exe就是EOS應(yīng)用程序的可執(zhí)行文件。4.3 調(diào)試項(xiàng)目4.4 查看軟盤鏡像文件中的內(nèi)容4.5 修改EO磁用程序項(xiàng)目名稱CONSDLE-1(PressCtr1+F1*F8toswitchconsoleuiiv
14、uloid.e.WelcometoEOSshell>AntoninA:MyApp.exe5、退出OSLab1. 在“文件”菜單中選擇“退出”。2. 在OSLab關(guān)閉前會(huì)彈出一個(gè)保存數(shù)據(jù)對(duì)話框(可以選擇對(duì)話框標(biāo)題欄上的“幫助”按鈕獲得幫助信息),核對(duì)學(xué)號(hào)和姓名無誤后點(diǎn)擊“保存”按鈕,OSLab關(guān)閉。3. 在OSLab關(guān)閉后默認(rèn)會(huì)自動(dòng)使用Windows資源管理器打開數(shù)據(jù)文件所在的文件夾,并且選中剛剛保存的數(shù)據(jù)文件(OU文件)。將數(shù)據(jù)文件備份保存在自己的文件中。實(shí)驗(yàn)2操作系統(tǒng)的啟動(dòng)一、實(shí)驗(yàn)?zāi)康? 、跟蹤調(diào)試E0在PC機(jī)上從加電復(fù)位到成功啟動(dòng)的全過程,了解操作系統(tǒng)的啟動(dòng)過程。2 、查看E0啟動(dòng)后
15、的狀態(tài)和行為,理解操作系統(tǒng)啟動(dòng)后的工作方式。二'預(yù)備知識(shí)閱讀本書第3章,了解EOS攘作系統(tǒng)的啟動(dòng)過程。閱讀第2章中的第2.4節(jié),復(fù)習(xí)匯編語言的相關(guān)知識(shí),并掌握NAS匯編代碼的特點(diǎn)。閱讀附錄A,了解Bochs和VirtualPC這兩款虛擬機(jī)軟件的特點(diǎn),重點(diǎn)熟悉Bochs的調(diào)試命令。三、實(shí)驗(yàn)內(nèi)容3.1 準(zhǔn)備實(shí)驗(yàn)1. 啟動(dòng)OSLab。2. 新建一個(gè)EOSKernel項(xiàng)目。3. 在"項(xiàng)目管理器”窗口中打開boot文件夾中的boot.asm和loader.asm兩個(gè)匯編文件。boot.asm是軟盤引導(dǎo)扇區(qū)程序的源文件,loader.asm是loader程序的源文件。簡(jiǎn)單閱讀一下這兩個(gè)文
16、件中的NASMC編代碼和注釋。4. 按F7生成項(xiàng)目。3. 2調(diào)試EOS操作系統(tǒng)的啟動(dòng)過程3.1.1 使用Bochs做為遠(yuǎn)程目標(biāo)機(jī)1. 在“項(xiàng)目管理器”窗口中,右鍵點(diǎn)擊項(xiàng)目節(jié)點(diǎn),在彈出的快捷菜單中選擇“屬性”。2. 在彈出的“屬性頁”對(duì)話框右側(cè)的屬性列表中找到“遠(yuǎn)程目標(biāo)機(jī)”屬性,將此屬性值修改為“BochsDebug"(此時(shí)按F1可以獲得關(guān)于此屬性的幫助)。3. 點(diǎn)擊“確定”按鈕關(guān)閉“屬性頁”對(duì)話框。接下來就可以使用Bochs模擬器調(diào)試BIOS程序和軟盤引導(dǎo)扇區(qū)程序了。3.1.2 調(diào)試BIOS程序<0>OxFFFffffOvimk,ctxt>:jrapFar<b
17、oehs:1>在Console窗口中輸入調(diào)試命令sreg后按回車<bochs:1>sregcs:s=0xF008,dh=0x££0093ff.dl=0x9000£f£f,ualid=7ds =s =0x0000 tss : s =0x0000 es:s =0x0000. fS=0X0000, gs:s =0x0000,dh=0x00009300, dh=0x00009300 dh=0x00009300, dh=0x00009300, dh=0x000093 00dl=0x0000Ffff. dl=0x0000ffff, dl=0x000
18、0£fff, dl=0x0000Fff£, dl=0x0000ffff,ualid=7 ualid=7 valid=7 ualid=7 ualid=7:ldtr:s=0x0000dh=0x00008200d1=0x0000fffF,ualid=lk;i*:s=0x0000,dh-0x00008b00,dl=0x0000f£f£,valid=1gdtr:base=0x00080000,limit=0xfffflidtr:base=0x00000000,limit=0xffffKbochs:2>_2.輸入調(diào)試命令r后按回車第頁共頁Kbochs:raxr
19、d k:080000000nQ&&QQQQ&2a&0&&0&&0x00000000U0000036 0x00000000-00000003 0X00000000 = 00000000 0 0000000:00000000 0x00303000:00000000 0X00000000:0000fff0巾巾rdr?v/;rls>>00000000x00000000:000000000X00000080-000000000X00000000: 000000000x00000000:00000000OXOOOOQOOQ: 00
20、000003|riptiflags 0x08000002id vip vif ac um i'f nt IOPL=0 <l»chst: 3>11 on E di t CD Fl opp y HelpI x|CONSOLE*1 CPress Ctrl4-F1HF8 to switch console vvindow« ».J Ue leone to EOS s>iel I>verTenation EOS LUersion Number LGJ OSFC - aierosoft V±r«*LL FC 20DTicti
21、on Edit £D Loppy U*lpPress CtrI*Fl Fa to suiten cansole uindou)to EOS shellTeurtt iani EDS Uers ion rtunber 1.01>ptProcess List (1 Process)ID i System? ! Prior Itg I ThreiidCount! Prii«AryThread ID 1 InagefiAne 1 Y 10 2e teh? iYParentProcess ID I StartAddressOxBOOlSESA 0x00018Z6D 0x8001
22、8Z6D 0xB001826D 6x800182600x8001626110x80018Z6DThresh List (19 I Z424242>r80000000:00000000)0303000:&&&&0/2&WThread)ISt«teIReadyWaitingRunningUaitingUaitingWaitingWaitingUaitinAfWaitingWaiting實(shí)驗(yàn)3進(jìn)程的創(chuàng)建、實(shí)驗(yàn)?zāi)康?、練習(xí)使用EOSAP函數(shù)CreateProcess創(chuàng)建一個(gè)進(jìn)程,掌握創(chuàng)建進(jìn)程的方法,理解進(jìn)程和程序的區(qū)別。2、調(diào)試跟蹤C(jī)reateP
23、rocess函數(shù)的執(zhí)行過程,了解進(jìn)程的創(chuàng)建過程,理解進(jìn)程是資源分配的單位。二、預(yù)備知識(shí)閱讀本書第5.1節(jié),重點(diǎn)理解程序和進(jìn)程的關(guān)系,熟悉進(jìn)程控制塊結(jié)構(gòu)體以及進(jìn)程創(chuàng)建的過程。仔細(xì)學(xué)習(xí)CreateProcess函數(shù)和其它與創(chuàng)建進(jìn)程相關(guān)的函數(shù)的說明,注意理解這些函數(shù)的參數(shù)和返回值的意義。三、實(shí)瞼內(nèi)容3.1準(zhǔn)備實(shí)驗(yàn)按照下面的步驟準(zhǔn)備本次實(shí)驗(yàn):1 .啟動(dòng)OSLab。2 .新建一個(gè)EOSKernel項(xiàng)目。3 .分別使用Debug配置和Release配置生成此項(xiàng)目,從而在該項(xiàng)目文件夾中生成完全版本的EOSSDI文件夾。4 .新建一個(gè)E0磁用程序項(xiàng)目。5 .使用在第3步生成的SDI文件夾覆蓋E0磁用程序項(xiàng)目文
24、件夾中的SDK文件夾。32練習(xí)使用控制臺(tái)命令創(chuàng)建EOS應(yīng)用程序的進(jìn)程1 .在E0應(yīng)用程序項(xiàng)目的“項(xiàng)目管理器”窗口中雙擊Floppy.img文件,使用FloppylmageEd讓or工具打開此軟盤鏡像文件。2 .將本實(shí)驗(yàn)文件夾中的Hello.exe文件拖動(dòng)到FloppylmageEditor工具窗口的文件列表中釋放,Hello.exe文件即被添加到軟盤鏡像文件中。Hello.exe一個(gè)EOS應(yīng)用程序,其源代碼可以參見本實(shí)驗(yàn)文件夾中的Hello.c源文件。3 .在FloppylmageEdtor中選擇“文件"菜單中的“保存"后關(guān)閉FloppylmageEditoro4 .按F7
25、生成E0磁用項(xiàng)目。ONSOLE-1 (Press Ctr1*F1F8 e 1 come t,o EOS she I 1>Aut;onun A :、EOSApp . exe e1lo wonId ?to S3 itch console u* i ndoui.)3i h 0x00000000.Id?Id?.exe.exe17 91:NEOSApp>A:、HeIloe1lo.wone1lo,womeIlo>30re1lo.wone1lo>uioruebye?:XHello.exeexi±.ujixh0x00000000.3. 3練習(xí)通過編程的方式讓應(yīng)用程序創(chuàng)建另一個(gè)
26、應(yīng)用程序的進(jìn)程1 .使用NewProc.c文件中的源代碼替換之前創(chuàng)建的E0舷用程序項(xiàng)目中的EOSApp(文件內(nèi)的源代碼。2 .按F7生成修改后的E0應(yīng)用程序項(xiàng)目。3 .按F5啟動(dòng)調(diào)試。OSLab會(huì)首先彈出一個(gè)調(diào)試異常對(duì)話框。4 .在調(diào)試異常對(duì)話框中選擇“否”,繼續(xù)執(zhí)行。p)N30LE-1(PressCtrl+Fl-F8tosuitchconsoleuiindou.)UelcDhetoEOSshell>Autoru.TiA:E0SApp,exeCreateAprocessanduaitfortheprocessexit.Hellojvvorld*1HelLojuorld!2HellOjbi
27、orld!3Hellojvvorld!4HelLojuorld!5Bye-bye?TheprocessexitMithGLA:EOSApp.exeexitwith0x00060000.3. 4調(diào)試CreateProcess函數(shù)1 .按F5啟動(dòng)調(diào)試EOS應(yīng)用程序,OSLab會(huì)首先彈出一個(gè)調(diào)試異常對(duì)話框。2 .選擇“是”調(diào)試異常,調(diào)試會(huì)中斷。3 .在main函數(shù)中調(diào)用CreateProcess函數(shù)的代碼行(第57行)添加一個(gè)斷點(diǎn)。4 .按F5繼續(xù)調(diào)試,在斷點(diǎn)處中斷。5 .按F11調(diào)試進(jìn)入CreateProcess函數(shù)。此時(shí)已經(jīng)開始進(jìn)入EO胴核進(jìn)行調(diào)試。3. 5調(diào)試PsCreateProcess函數(shù)
28、1 .在PsCreateProcess函數(shù)中找到調(diào)用PspCreateProcessEnvironment函數(shù)的代碼行(create©文件的第163行),并在此行添加一個(gè)斷點(diǎn)。2 .按F5繼續(xù)調(diào)試,到此斷點(diǎn)處中斷。3 .按F11調(diào)試進(jìn)入PspCreateProcessEnvironment函數(shù)。4 .6練習(xí)通過編程的方式創(chuàng)建應(yīng)用程序的多個(gè)進(jìn)程使用OSLab打開本實(shí)驗(yàn)文件夾中的參考源代碼文件NewTwoProc.c,仔細(xì)閱讀此文件中的源代碼。使用NewTwoProc.c文件中的源代碼替換EOS應(yīng)用程序項(xiàng)目中EOSApp.c文件內(nèi)的源代碼,生成后啟動(dòng)調(diào)試,查看多個(gè)進(jìn)程并發(fā)執(zhí)行的結(jié)果。OS
29、LabPC-MicrosoftVirtualPC2007OSLabPC-MicrosoftVirtualPC2007實(shí)驗(yàn)4線程的狀態(tài)和轉(zhuǎn)換一、實(shí)驗(yàn)?zāi)康? 、調(diào)試線程在各種狀態(tài)間的轉(zhuǎn)換過程,熟悉線程的狀態(tài)和轉(zhuǎn)換。2 、通過為線程增加掛起狀態(tài),加深對(duì)線程狀態(tài)的理解。二、預(yù)備知識(shí)閱讀本書第523節(jié),了解線程都有哪些狀態(tài)以及EOS是如何定義這些狀態(tài)的。了解線程是如何在這些狀態(tài)之間進(jìn)行轉(zhuǎn)換的,特別是要閱讀一下EOS中用于線程轉(zhuǎn)換的相關(guān)函數(shù)的源代碼。閱讀本書第5.2.4節(jié),了解EOS為線程添加的掛起狀態(tài),以及Suspend和Resum原語操作。線程狀態(tài)的轉(zhuǎn)換和線程的同步、線程的調(diào)度是不可分割的,所以建議讀
30、者簡(jiǎn)單學(xué)習(xí)一下第5.3和5.4節(jié)中的內(nèi)容。三、實(shí)驗(yàn)內(nèi)容3.1準(zhǔn)備實(shí)驗(yàn)按照下面的步驟準(zhǔn)備實(shí)驗(yàn):1 .啟動(dòng)OSLab。2 .新建一個(gè)EOSKernel項(xiàng)目。3 .2調(diào)試線程狀態(tài)的轉(zhuǎn)換過程1 .按F7生成在本實(shí)驗(yàn)3.1中創(chuàng)建的EOSKernel項(xiàng)目。2 .按F5啟動(dòng)調(diào)試。3 .待EO啟動(dòng)完畢,在EOS控制臺(tái)中輸入命令“l(fā)oop”后按回車。4 .結(jié)束此次調(diào)試。loop命令執(zhí)行的效果可以參見圖:3.2.1 線程由阻塞狀態(tài)進(jìn)入就緒狀態(tài)3.2.2 線程由運(yùn)行狀態(tài)進(jìn)入就緒狀態(tài)3.2.3 線程由就緒狀態(tài)進(jìn)入運(yùn)行狀態(tài)3.2.4 線程由運(yùn)行狀態(tài)進(jìn)入阻塞狀態(tài)3.3為線程增加掛起狀態(tài)1 .刪除之前添加的所有斷點(diǎn)。2 .
31、按F5啟動(dòng)調(diào)試。3 .待EO啟動(dòng)完畢,在EOS控制臺(tái)中輸入命令“l(fā)oop”后按回車。此時(shí)可以看到loop線程的執(zhí)行計(jì)數(shù)在不停增長,說明loop線程正在執(zhí)行。記錄下loop線程的ID。4 .按Ctrl+F2切換到控制臺(tái)2,輸入命令"suspend31"(如果loop線程的ID是31)后按回車。命令執(zhí)行成功的結(jié)果如圖12-2所小。5 .按Ctrl+1切換回控制臺(tái)1,可以看到由于loop線程已經(jīng)成功被掛起,其執(zhí)行計(jì)數(shù)已經(jīng)停止增長了。此時(shí)占用處理器的是EOS中的空閑線程。實(shí)驗(yàn)5進(jìn)程的同步一、實(shí)驗(yàn)?zāi)康? 、使用EOS勺信號(hào)量,編程解決生產(chǎn)者一消費(fèi)者問題,理解進(jìn)程同步的意義。2 、調(diào)試
32、跟蹤EOS!號(hào)量的工作過程,理解進(jìn)程同步的原理。3 、修改EOS勺信號(hào)量算法,使之支持等待超時(shí)喚醒功能(有限等待),加深理解進(jìn)程同步的原理。二、預(yù)備知識(shí)閱讀本書第5章中的5.3節(jié),學(xué)習(xí)E0內(nèi)核提供的三種同步對(duì)象(該實(shí)驗(yàn)沒有涉及到Event同步對(duì)象)。重點(diǎn)理解各種同步對(duì)象的狀態(tài)與使用方式。同時(shí)學(xué)習(xí)經(jīng)典的生產(chǎn)者一消費(fèi)者問題。閱讀5.2節(jié),學(xué)習(xí)在EOS應(yīng)用程序中調(diào)用EOSAPI函數(shù)CreateThread創(chuàng)建線程的方法。三、實(shí)驗(yàn)內(nèi)容3.1 準(zhǔn)備實(shí)驗(yàn)1 .啟動(dòng)OSLab。2 .新建一個(gè)EOSKernel項(xiàng)目。3 .生成EOSKernel項(xiàng)目,從而在該項(xiàng)目文件夾中生成SD政件夾。4 .新建一個(gè)E0磁用程
33、序項(xiàng)目。5 .使用在第3步生成的SD政件夾覆蓋EOS應(yīng)用程序項(xiàng)目文件夾中的SD政件夾。3.2使用EOS勺信號(hào)量解決生產(chǎn)者-消費(fèi)者問題生產(chǎn)者一消費(fèi)者同步執(zhí)行的過程p)NSOLE-1(PressCtrl+FKFntosnitcliconsolewindow)UeleonetoEOSshell>Au.toruinA:EOSApp.exeProducea0Producea1ProduceaZProducea3Producea4Producea5Producea6Producea7Producea8Producea9Producea10Producea11Producea1ZProducea13P
34、roducea143. 3調(diào)試EOS信號(hào)量的工作過程3.3.1創(chuàng)建信號(hào)量332等待、釋放信號(hào)量3.321等待信一號(hào)量(不阻塞)1.1 .2.2釋放信一3.323 等待信號(hào)量(阻塞)3.324 釋放信一號(hào)量(喚醒)3.4修改EOS的信號(hào)量算法在目前EOSKernel項(xiàng)目的ps/semaphore.c文件中,PsWaitForSemaphore函數(shù)的Milliseconds參數(shù)只能是INFINITE,PsReleaseSemaphore函數(shù)的ReleaseCount參數(shù)只能是1?,F(xiàn)在要求同時(shí)修改PsWaitForSemaphore函數(shù)和PsReleaseSemaphore函數(shù)中的代碼,使這兩個(gè)參數(shù)
35、能夠真正起到作用,使信號(hào)量對(duì)象支持等待超時(shí)喚醒功能和批量釋放功能。(a)main函數(shù)流程圖;(b)Producer函數(shù)流程圖;(c)Consumer函數(shù)流程圖Cowr函數(shù)開財(cái) 13-li(b)田 t (b)Prt>Aw#r(c)(c)C«w«r 圖實(shí)驗(yàn)6時(shí)間片輪轉(zhuǎn)調(diào)度一、實(shí)驗(yàn)?zāi)康?、調(diào)試EOS勺線程調(diào)度程序,熟悉基于優(yōu)先級(jí)的搶先式調(diào)度。2、為E0添加時(shí)間片輪轉(zhuǎn)調(diào)度,了解其它常用的調(diào)度算法。二'預(yù)備知識(shí)閱讀本書第5章中的第5.4節(jié)。重點(diǎn)理解EOS當(dāng)前使用的基于優(yōu)先級(jí)的搶先式調(diào)度,調(diào)度程序執(zhí)行的時(shí)機(jī)和流程,以及實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度的細(xì)節(jié)。三、實(shí)驗(yàn)內(nèi)容3.1準(zhǔn)備實(shí)驗(yàn)按
36、照下面的步驟準(zhǔn)備實(shí)驗(yàn):1 .啟動(dòng)OSLab。2 .新建一個(gè)EOSKernel項(xiàng)目。3 .2閱讀控制臺(tái)命令“rr相關(guān)的源代碼閱讀ke/sysproc.c文件中第690行的ConsoleCmdRoundRobin函數(shù),及該函數(shù)用到的第649行的ThreadFunction函數(shù)和第642行的THREAD_PARAMETE構(gòu)體,學(xué)習(xí)“it”命令是如何測(cè)試時(shí)間片輪轉(zhuǎn)調(diào)度的。沒有時(shí)間片輪轉(zhuǎn)調(diào)度時(shí)“什命令的執(zhí)行效果4 .3調(diào)試線程調(diào)度程序4.1.1 調(diào)試當(dāng)前線程不被搶先的情況正像上圖中顯示的,新建的第0個(gè)線程會(huì)一直運(yùn)行,而不會(huì)被其它同優(yōu)先級(jí)的新建線程或者低優(yōu)先級(jí)的線程搶先。按照下面的步驟調(diào)試這種情況在Psp
37、SelectNextThread函數(shù)中處理的過程。1 .結(jié)束之前的調(diào)試。2 .在ke/sysproc.c文件的ThreadFunction函數(shù)中,調(diào)用fprintf函數(shù)的代碼行(第680行)添加一個(gè)斷點(diǎn)。3 .按F5啟動(dòng)調(diào)試。4 .待EOSB動(dòng)完畢,在EO腔制臺(tái)中輸入命令“rr”后按回車。“rr”命令開始執(zhí)行后,會(huì)在斷點(diǎn)處中斷。5 .查看ThreadFunction函數(shù)中變量pThreadParameter->Y的值應(yīng)該為0,說明正在調(diào)試的是第0個(gè)新建的線程。6 .激活虛擬機(jī)窗口,可以看到第0個(gè)新建的線程還沒有在控制臺(tái)中輸出任何內(nèi)容,原因是fprintf函數(shù)還沒有執(zhí)行。7 .激活OSLa
38、b窗口后按F5使第0個(gè)新建的線程繼續(xù)執(zhí)行,又會(huì)在斷點(diǎn)處中斷。再次激活虛擬機(jī)窗口,F(xiàn)5查看每輪循可以看到第0個(gè)新建的線程已經(jīng)在控制臺(tái)中輸出了第一輪循環(huán)的內(nèi)容??梢远喟磶状苇h(huán)輸出的內(nèi)容。332調(diào)試當(dāng)前線程被搶先的情況3.4為EOS添加時(shí)間片輪轉(zhuǎn)調(diào)度(行時(shí)間片輪轉(zhuǎn)調(diào)度時(shí)“rr命令的執(zhí)行效果)修改ps/sched.c文件中的PspRoundRobin函數(shù)(第337行),在其中實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度算法。1 .代碼修改完畢后,按F7生成E0胴核項(xiàng)目。2 .按F5啟動(dòng)調(diào)試。3 .在EO腔制臺(tái)中輸入命令“rr”后按回車。應(yīng)能看到20個(gè)線程輪流執(zhí)行的效果,如圖。OSLabPC-licrosoftVirtualPC
39、200TActionEdit£DFloppyHelpC0MS0LE-1 Thread 0 Thread 1 Thread Z Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Thread 8 Thread 9 Thread 10 Thread 11 Thread 12 Thread 13 Thread 14 Thread 15 Thread 16 Thread 17 Thread 18 Thread 19VB/ oo oo CO oo CO 00 0 00 oo 8 8 8 B 8 8 8 B 8 OO ( /V ( ( ( ( ( ( (
40、-)7O497Z4Z15 336014-67690539853485 4Z9O34-3798Z9Z6586710 61Z7O763394343333333 3444444443switch console uindou,.)實(shí)驗(yàn)7物理存儲(chǔ)器與進(jìn)程邏輯地址空間的管理一、實(shí)驗(yàn)?zāi)康? 、通過查看物理存儲(chǔ)器的使用情況,并練習(xí)分配和回收物理內(nèi)存,從而掌握物理存儲(chǔ)器的管理方法。2 、通過查看進(jìn)程邏輯地址空間的使用情況,并練習(xí)分配和回收虛擬內(nèi)存,從而掌握進(jìn)程邏輯地址空間的管理方法。二、預(yù)備知識(shí)閱讀本書第6章。重點(diǎn)閱讀第6.3節(jié)和第6.6節(jié),了解物理存儲(chǔ)器的管理方式和進(jìn)程邏輯地址空間的管理方式。三、實(shí)驗(yàn)內(nèi)容3
41、.1準(zhǔn)備實(shí)驗(yàn)按照下面的步驟準(zhǔn)備實(shí)驗(yàn):1 .啟動(dòng)OSLab。2 .新建一個(gè)EOSKernel項(xiàng)目。3 .2閱讀控制臺(tái)命令“pm”目關(guān)的源代碼,并查看其執(zhí)行的結(jié)果(pm”命令的執(zhí)行結(jié)果)按照下面的步驟執(zhí)行控制臺(tái)命令“pm”,查看物理存儲(chǔ)器的信息:1 .按F7生成在本實(shí)驗(yàn)3.1中創(chuàng)建的EOSKernel項(xiàng)目。2 .按F5啟動(dòng)調(diào)試。3 .待EOSB動(dòng)完畢,在E0腔制臺(tái)中輸入命令“pm”后按回車。觀察命令執(zhí)行的結(jié)果,如圖所示,可以了解當(dāng)前物理存儲(chǔ)器的使用情況。(IOSLabPC-lieraEoftVirtualFC200TActionEditFloppy.JCalpCONSOLE-L(PressCtrl
42、*FVF8toswitcliCDIISO1Euindou)LJel匚巳t-oEOSsliel1>pmFageCount:6L?6-MemoryCount::817fe*409&=334888%Byte.ZeroedPageCouv)t:QFreePageCount:7126.sectPageCount:1&50-3.3分配物理頁和釋放物理頁(配物理頁或者釋放物理頁后物理存儲(chǔ)器的變化情況)接下來,在pm命令函數(shù)中添加分配物理頁和釋放物理頁的代碼,單步調(diào)試管理物理頁的方法。按照下面的步驟修改pm命令的源代碼:1 .使用OSLab打開本實(shí)驗(yàn)文件夾中的pm.c文件(將文件拖動(dòng)到O
43、SLab窗口中釋放即可打開)。此文件中有一個(gè)修改后的ConsoleCmdPhysicalMemory函數(shù),主要是在原有代碼的后面增加了分配物理頁和釋放物理頁的代碼。2 .使用pm.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體替換ke/sysproc.c文件中ConsoleCmdPhysicalMemory函數(shù)的函數(shù)體。3 .按F7生成修改后的EOSKernel項(xiàng)目。OSLabPC-lieroEaftTirtaalFC200TCON30LE-1(PressCtrl+fl*F8toswitchconsoleuindou.)Melcanet-oEOSsBe!1>pmFs
44、geCount:8176.rtemoryCount:0176*405b二334888%Byte-ZeroedPageCount-:0,FreePageCount:7126.UsedPageCount:105Q.AfterAllocateOneZeroedPageCount:0.FreePageCount:7125.UsedPageCount:1051*注HwKAfterFreeOneFaje疑i&-2eroedPageCount!0.FreePageGaunt:71Z6.UsedPageGaunt:1950.* OS Lfib FC - lierasaf-t Tirtual FC 20
45、0TCONSOLE-!(PressCtrl*FlF8tosuitchCDDSOleuindou.24V24Idait-imgf10x800182&DZ59Uaitivigi10x8001BZ6DZb凸Uniting10x80018Z6DZ7Y24Uaitling10x80018Z6D2024Uaitiing1Ox8G0182&DTotdl I Jpn fron1# Uad Include 1 Sit Uad Include 2Uad Include Z 4# Uad Include 2 5tt Uad Include 2 Gtt Uad I include 2. 7tf Uad
46、 Include Z 8tt UAd Include 2 9# Uad Include 2to 657107Upn From 655360Upn Frort 655361Upn From 655365Upn Fron 655367Upn Fron 655369Upn From 655371Upn Fron 655373Upn From &55375Upn Fron 655377(OxftOOOOOO rto 655360 to 65536Z.to 655366.to 6553&8, to 655370.to 65537Z t 655374.to &5537&.t
47、o 655373.-6xAa?FFFTF)(Oxrt&OOOOOO(OxAOOOlOOO - (0xA9665606 -(OxfiOO?G0O - (Qxrt0009000 - (OxAOOOBOOG (OxAOOODOOO (OxAQOOFOGO (CbcAM 11690 -OxAGOOOFFGxAQ602FFF) xAOOO&FFF xAOeoeFFFJ OxAOOOftFFF OxAOOOCFF OxAOOOEFFF OxAOQlOFFF) GxAGGlZFFF)>um1lOttVadInclude2VpnIron65537?to655380-COxAOOlJOOO
48、-OxAOOHrFDliftUadInclude2UpnKron6553B1to65530Z.COxrtOOlSOOO-0xA0O16rFrJTata1UpnGaunt:2048.AllocatedUpnCchmtC:#1*FreeUpwiCourt:20Z7.-Z(FressCtrl*Flconsoleuindou.F8toitch*ProcessUsi(2)1System?¥N!Priority24,8Proccss)-f*1ThreadCount10iFrinaryThreadID”233NW“1FirGacwicv以11¥YY¥YVVYVfl24出Z4Z4
49、齊24Z4肥248UIOIF.TReadyMaltingWaitingRunningUaitinAMailingUaitingUaitfTigMaltingMailingR«4yParentProcessIDi111111111131StartAddressOx8061817C0x80015E9A0x8001BA6DOx80G18Z6DOxBDOlBZ6D0x6001BZ6D0x8001826Ddx8001826D0x80018Z6D9x&00182ADAxeoeievvcI>vm31TotalUpnfron655369to657407e(QxAOOeOOOO-Oxft
50、eTFFFFF)IttVmIZttUad#5«bit7#HitlOtnnIZ11»UadUddU«dUadUadUadUad3dVddtUadUedInoIncludeIncludeIncludeIncludeInnIncludeZinclude2Include2IncludeZinclude2UpnUpnUpnUpnUpnUpnUpnUpnUpnUpUpFromFromFromfromFromFronFromFromFrom655360to655361tn65536Jto655365tob553&7to65&3&9to655371to65
51、5373to65537Sto655360.6553626553636553&6.65S3&8(oxfteeeeooe-(OzAOOOlOOC-(QjcAOoeaoo©-(OxftOQOSOO©-exAQOOOFFF)O/AOGOZFFF)9xA0003FFF)Qx八OOObfrF)(OxAOOOVOO©Ox八QOOSFFF)&55370(OxADOeAOOO-OxAOOOAFFFJiFronfeS5377tofroh6SS379tcpniFroh6S8381tcUpFronG5S393tc6S5A72.655374.655376.65537
52、6.i65S38C.I655382.(OxADOOEOaO-OxAOOGCFFF)(OxAOOODOOC-OxAOOGEFFF)(OxAElGOFeOO-OxAOOlOFfFJ*砧(OxAGOllOCO.(0xAW13CW9-toxfioeisooo1-(0xA0017000-GxfiOO12FFF)exfiOOHfFF)exftOOl&fFF)OxAOGIBFFF)TotalUpnCount:2048>AllocatedVpnCount:凸.Free<JpnCemTotdlUpnfron16to£2427L10x10000-9x7FFEFFFF)1UUadInc
53、lude5UpnFrom1GZ4to1028.(0x4000006x4G4FFF)TotalUpnCount;524256.AllocatedUpnCount:5*FreeVpnCount:5Z4Z5L3.5在系統(tǒng)進(jìn)程中分配虛擬頁和釋放虛擬頁TotQ.Vfinrincira打亍亍事內(nèi)to苗了IQ呂氣gOgClQQxMlTFfTFF)¥ad1-ha1ude-IVwiKVKnira.les若2八3HQUIOx.A(XKICK00-OxAgQgFF.JVad1nciudpPDPVIFran1635361to疤"3Q_IChtAgC11000Ok/0003TF>"J
54、VadInci_»:"WaiFrxitiitiS53S5toIOx.a«C|aOCJOI*I:人OACICIOtiFFFJVncl1me”Iwic*iteviFrora旺筍*7to(XK1jICJOO一dxAonown八Vad1fKiudeA2,賽anFran6SS3SBto©S537I0LlOOOOSKJOOGAQOT.W1FF>_Vad1mcri_»:l2!VkinlAflromi65S3TIf-1JTw*(CUSXIgg0>l<C1IOCI«TF>_IVVsadln(r|WlC-lADVIFrara6SS
55、373t;o6S5374.IcnjTM3ao0000Vfid1fK2ud芒VonFrora65S3TSto石茅3RB.roAoooraoo1O*v«)OHFF>0JgVad1TKaudb2.MillAlrora6££277ILOi召呂呂37%LoAoaiioocjOk.WOHFF1F>JCmladlorJudeZVmFrcn055379to85CO)sVAJInc;luek:2¥wiFrAnIOk.«O13000.Ox.WO6SS3&1toSS3.3S2.Ofc.WOUSOOCITotalI'DinCount:30悔.Al1extrate?clWEARCoUEnt.t121.FirkbV(wiiMNrui電-Ze?roe-d1thymiu41UKrwruCent:O.Frw*。xicnlCount:71N瓜VWEtrase-iicltire*S=EZOx_4lt9CJtJ3OCJCJLS-i-zAe-AOx1C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 技術(shù)說明書樣本
- 整體廚房裝修設(shè)計(jì)承包范本
- 2024混凝土道路施工合同樣本
- 2024品牌代理經(jīng)營合同版
- 廣西壯族自治區(qū)七年級(jí)上學(xué)期語文期中測(cè)試試卷10套【附答案】
- 廣告設(shè)計(jì)制作合作方案
- 保健食品委托代理銷售協(xié)議書
- 設(shè)備維修承包合同2024年
- 2023年高考地理第一次模擬考試卷-(湖北B卷)(考試版)
- 2023年高考地理專題復(fù)習(xí)新題典題精練-洋流(解析版)
- 新產(chǎn)品試制流程管理辦法
- 通用橫版企業(yè)報(bào)價(jià)單模板
- 潛油泵及潛油泵加油機(jī)講義
- 物業(yè)服務(wù)公司各崗位規(guī)范用語
- 醫(yī)患溝通內(nèi)容要求記錄模板(入院、入院三日、術(shù)前、術(shù)后、出院)
- 航海學(xué)天文定位第四篇第6章天文定位
- 淺談深度教學(xué)中小學(xué)數(shù)學(xué)U型學(xué)習(xí)模式
- 物理電學(xué)暗箱專題30道
- 裝修公司員工勞動(dòng)合同
- 江西上饒鉛山汽車駕駛科目三考試線路
- 通過一起放火案件淺析放火案件的移交工作
評(píng)論
0/150
提交評(píng)論