ICS計(jì)算機(jī)基礎(chǔ)教學(xué)課件第八章習(xí)題答案202307062317199297043_第1頁(yè)
ICS計(jì)算機(jī)基礎(chǔ)教學(xué)課件第八章習(xí)題答案202307062317199297043_第2頁(yè)
ICS計(jì)算機(jī)基礎(chǔ)教學(xué)課件第八章習(xí)題答案202307062317199297043_第3頁(yè)
ICS計(jì)算機(jī)基礎(chǔ)教學(xué)課件第八章習(xí)題答案202307062317199297043_第4頁(yè)
ICS計(jì)算機(jī)基礎(chǔ)教學(xué)課件第八章習(xí)題答案202307062317199297043_第5頁(yè)
已閱讀5頁(yè),還剩1頁(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)介

習(xí)題1.給出以下概念的解釋說(shuō)明。I/O硬件I/O軟件用戶I/O軟件設(shè)備驅(qū)動(dòng)程序I/O端口系統(tǒng)I/O軟件中斷服務(wù)程序控制端口系統(tǒng)調(diào)用處理程序流緩沖區(qū)系統(tǒng)調(diào)用服務(wù)例程設(shè)備控制器狀態(tài)端口數(shù)據(jù)端口I/O地址空間I/O指令獨(dú)立編址統(tǒng)一編址存儲(chǔ)器映射I/O中斷控制I/O中斷嵌套程序直接控制I/O中斷請(qǐng)求寄存器中斷處理優(yōu)先級(jí)設(shè)備無(wú)關(guān)I/O軟件就緒狀態(tài)中斷屏蔽字中斷響應(yīng)優(yōu)先級(jí)DMA控制器多重中斷可編程中斷控制器簡(jiǎn)單回答下列問(wèn)題。DMA方式2.(1)I/O子系統(tǒng)的層次結(jié)構(gòu)是怎樣的?(2)系統(tǒng)調(diào)用的封裝函數(shù)對(duì)應(yīng)的機(jī)器級(jí)代碼結(jié)構(gòu)是怎樣的?(3)為什么系統(tǒng)調(diào)用的開(kāi)銷(xiāo)很大?(4)C標(biāo)準(zhǔn)I/O庫(kù)函數(shù)是在用戶態(tài)執(zhí)行還是在內(nèi)核態(tài)執(zhí)行?(5)與I/O操作相關(guān)的系統(tǒng)調(diào)用函數(shù)是在用戶態(tài)執(zhí)行還是內(nèi)核態(tài)執(zhí)行?(6)I/O端口的編址方式有哪兩種?各有何特點(diǎn)?(7)什么是程序直接控制I/O方式?說(shuō)明其工作原理。(8)什么是中斷控制I/O方式?說(shuō)明其工作原理。(9)為什么中斷控制器把中斷類型號(hào)放I/O總線的數(shù)據(jù)線上而不是放在地址線上?(10)為什么在保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的過(guò)程中,CPU必須關(guān)中斷?(11)DMA方式能夠提高成批數(shù)據(jù)交換效率的主要原因何在?(12)DMA控制器在什么情況下發(fā)出中斷請(qǐng)求信號(hào)?3.以下是在IA-32/Linux系統(tǒng)中執(zhí)行的用戶程序P的匯編代碼:1#hello.s#2#displayastring"Hello,world."345.section.rodatamsg:6.ascii"Hello,world.\n"789.section.text.globl_start_start:1011121314151617181920movl$4,%eaxmovl$1,%ebxmovl$msg,%ecxmovl$14,%edxint$0x80#系統(tǒng)調(diào)用號(hào)(sys_write)#filedescriptor(參數(shù)一):文件描述符(stdout)#stringaddress(參數(shù)二):要顯示的字符串#stringlength(參數(shù)三):字符串長(zhǎng)度#調(diào)用內(nèi)核功能movl$1,%eaxmovl$0,%ebxint$0x80#系統(tǒng)調(diào)用號(hào)(sys_exit)#參數(shù)一:退出代碼#調(diào)用內(nèi)核功能針對(duì)上述匯編代碼,回答下列問(wèn)題。(1)程序的功能是什么?272

(2)執(zhí)行到哪些指令時(shí)會(huì)發(fā)生從用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)執(zhí)行的情況?(3)該用戶程序調(diào)用了哪些系統(tǒng)調(diào)用?參考答案:(1)程序的功能是在標(biāo)準(zhǔn)輸出設(shè)備(文件描述符為stdout)上顯示字符串“Hello,world.”。(2)執(zhí)行到第16行和20行的“int$0x80”指令時(shí)會(huì)發(fā)生從用戶態(tài)轉(zhuǎn)到內(nèi)核態(tài)執(zhí)行的情況。(3)該用戶程序調(diào)用了4號(hào)系統(tǒng)調(diào)用write和1號(hào)系統(tǒng)調(diào)用exit。4.第3題中用戶程序的功能可以用以下C語(yǔ)言代碼來(lái)實(shí)現(xiàn):12345intmain(){write(1,"Hello,world.\n",14);exit(0);}針對(duì)上述C代碼,回答下列問(wèn)題或完成下列任務(wù)。(1)執(zhí)行write()函數(shù)時(shí),傳遞給write()的實(shí)參在main棧幀中的存放情況怎樣?要求畫(huà)圖說(shuō)明。(2)從執(zhí)行write()函數(shù)開(kāi)始到調(diào)出write系統(tǒng)調(diào)用服務(wù)例程sys_write()執(zhí)行的過(guò)程中,其函數(shù)調(diào)用關(guān)系是怎樣的?要求畫(huà)圖說(shuō)明。(3)就程序設(shè)計(jì)的便捷性和靈活性以及程序執(zhí)行性能等方面,與第3題中的實(shí)現(xiàn)方式進(jìn)行比較,并說(shuō)明哪個(gè)執(zhí)行時(shí)間更短?參考答案:(1)用“objdump-d”命令將對(duì)應(yīng)的可執(zhí)行文件反匯編后,其main()函數(shù)對(duì)應(yīng)的機(jī)器級(jí)指令序列如下圖所示(左圖是動(dòng)態(tài)鏈接生成,右圖是靜態(tài)鏈接生成)。從上述指令序列可看出,在使用call指令調(diào)用write()函數(shù)之前,main函數(shù)在自身?xiàng)袀鬟f了三個(gè)參數(shù),首先在地址R[esp]+8處存放了14(0xe),然后在R[esp]+4處存放了0x8048510(動(dòng)態(tài)鏈接)或0x80aa848(靜態(tài)鏈接),這個(gè)是指向字符串"Hello,world.\n"的指針,最后在R[esp]處存放了0x1。根據(jù)上述指令可以畫(huà)出如右圖所示的實(shí)參在main棧幀中的存放情況。EBPEBP在P中的舊值main棧幀14(2)從執(zhí)行write()函數(shù)開(kāi)始到調(diào)出write系統(tǒng)調(diào)用服務(wù)例程sys_write()執(zhí)行的過(guò)程中,首先通過(guò)call指令進(jìn)入write封裝函數(shù)執(zhí)行。上述左圖中的指令“call8048350<write@plt>”(動(dòng)0x8048510ESP1態(tài)鏈接情況下)或右圖中的指令“call804f8d0<__libc_write>”(靜態(tài)鏈接情況下)執(zhí)行后,便進(jìn)入封裝函數(shù)write執(zhí)行。在進(jìn)入write()封裝后,執(zhí)行如下指令(靜態(tài)鏈接情況下),可以看出,在執(zhí)行陷阱指令(軟中斷指令)“int$0x80”之前,有4條MOV指令,其中有三條MOV指令用來(lái)將main棧幀中的三個(gè)參數(shù):字符串長(zhǎng)度(0xe)、指向字符串"Hello,world.\n"的指針、文件描述符(0x1),分別送EDX、ECX、EBX。還有一273

條MOV指令用來(lái)將調(diào)用號(hào)(4)送EAX。這樣,當(dāng)執(zhí)行到完“int$0x80”指令后,就從用戶態(tài)陷入內(nèi)核態(tài),調(diào)出系統(tǒng)調(diào)用處理程序system_call()執(zhí)行。在system_call()中,根據(jù)系統(tǒng)調(diào)用號(hào)為4,再跳轉(zhuǎn)到相應(yīng)的系統(tǒng)調(diào)用服務(wù)例程sys_write()執(zhí)行,以完成將一個(gè)字符串寫(xiě)入文件的功能,其中,字符串的首地址由ECX指定,字符串的長(zhǎng)度由EDX指出,寫(xiě)入文件的文件描述符由EBX指出。system_call()執(zhí)行結(jié)束時(shí),從內(nèi)核返回的參數(shù)存放在EAX中。(3)顯然,對(duì)于第3題給出的實(shí)現(xiàn)方式,其程序設(shè)計(jì)的便捷性和靈活性都不如本題給出的實(shí)現(xiàn)方式,第3題采用匯編程序設(shè)計(jì)方式,只要參數(shù)不同,就需要重新編寫(xiě)不同的指令;而本題采用高級(jí)語(yǔ)言程序設(shè)計(jì)方式,只要在write函數(shù)中改變不同的實(shí)參,就可以完成不同的功能。不過(guò),第3題實(shí)現(xiàn)方式下的程序執(zhí)行性能比本題實(shí)現(xiàn)方式好,因?yàn)橛脜R編實(shí)現(xiàn)時(shí),省去了高級(jí)語(yǔ)言程序中大量的函數(shù)調(diào)用,因而它的執(zhí)行時(shí)間更短。5.第3題和第4題中用戶程序的功能可以用以下C語(yǔ)言代碼來(lái)實(shí)現(xiàn):12345#include<stdio.h>intmain(){printf("Hello,world.\n");}假定源程序文件名為hello.c,可重定位目標(biāo)文件名為hello.o,可執(zhí)行目標(biāo)文件名為hello,程序用GCC編譯驅(qū)動(dòng)程序處理,在IA-32/Linux系統(tǒng)中執(zhí)行。回答下列問(wèn)題或完成下列任務(wù)。(1)為什么在hello.c的開(kāi)頭需加“#include<stdio.h>”?為什么hello.c中沒(méi)有定義printf()函數(shù),也沒(méi)它的原型聲明,但main()函數(shù)引用它時(shí)沒(méi)有發(fā)生錯(cuò)誤?(2)需要經(jīng)過(guò)哪些步驟才能在機(jī)器上執(zhí)行hello程序?要求詳細(xì)說(shuō)明各個(gè)環(huán)節(jié)的處理過(guò)程。(3)為什么printf()函數(shù)中沒(méi)有指定字符串的輸出目的地,但執(zhí)行hello程序后會(huì)在屏幕上顯示字符串?(4)字符串"Hello,world.\n"在機(jī)器中對(duì)應(yīng)的0/1序列(機(jī)器碼)是什么?這個(gè)0/1序列存放在hello.o文件的哪個(gè)節(jié)中?這個(gè)0/1序列在可執(zhí)行目標(biāo)文件hello的哪個(gè)段中?(5)若采用靜態(tài)鏈接,則需要用到printf.o模塊來(lái)解析hello.o中的外部引用符號(hào)printf,printf.o模塊在哪個(gè)靜態(tài)庫(kù)中?靜態(tài)鏈接后,printf.o中的代碼部分(.text節(jié))被映射到虛擬地址空間的哪個(gè)段中?若采用動(dòng)態(tài)鏈接,則函數(shù)printf()的代碼在虛擬地址空間中的何處?(6)假定printf()函數(shù)最終調(diào)用的write系統(tǒng)調(diào)用的封裝函數(shù)為write(),其對(duì)應(yīng)的匯編代碼如下:274

請(qǐng)給出以上每條匯編指令的注釋,并說(shuō)明該Linux系統(tǒng)中系統(tǒng)調(diào)用返回的最大錯(cuò)誤號(hào)是多少?(7)就程序設(shè)計(jì)的便捷性和靈活性以及程序執(zhí)行性能等方面,與第3題和第4題中的實(shí)現(xiàn)方式分別進(jìn)行比較,并分析說(shuō)明哪個(gè)執(zhí)行時(shí)間更短?參考答案:(1)為什么在hello.c的開(kāi)頭需加“#include<stdio.h>”?為什么hello.c中沒(méi)有定義printf()函數(shù),也沒(méi)它的原型聲明,但main()函數(shù)引用它時(shí)沒(méi)有發(fā)生錯(cuò)誤?(2)需要經(jīng)過(guò)哪些步驟才能在機(jī)器上執(zhí)行hello程序?要求詳細(xì)說(shuō)明各個(gè)環(huán)節(jié)的處理過(guò)程。(3)為什么printf()函數(shù)中沒(méi)有指定字符串的輸出目的地,但執(zhí)行hello程序后會(huì)在屏幕上顯示字符串?(4)字符串"Hello,world.\n"在機(jī)器中對(duì)應(yīng)的0/1序列(機(jī)器碼)是什么?這個(gè)0/1序列存放在hello.o文件的哪個(gè)節(jié)中?這個(gè)0/1序列在可執(zhí)行目標(biāo)文件hello的哪個(gè)段中?(5)若采用靜態(tài)鏈接,則需要用到printf.o模塊來(lái)解析hello.o中的外部引用符號(hào)printf,printf.o模塊在哪個(gè)靜態(tài)庫(kù)中?靜態(tài)鏈接后,printf.o中的代碼部分(.text節(jié))被映射到虛擬地址空間的哪個(gè)段中?若采用動(dòng)態(tài)鏈接,則函數(shù)printf()的代碼在虛擬地址空間中的何處?(6)假定printf()函數(shù)最終調(diào)用的write系統(tǒng)調(diào)用的封裝函數(shù)為write(),其對(duì)應(yīng)的匯編代碼如下:請(qǐng)給出以上每條匯編指令的注釋,并說(shuō)明該Linux系統(tǒng)中系統(tǒng)調(diào)用返回的最大錯(cuò)誤號(hào)是多少(4095)?(7)就程序設(shè)計(jì)的便捷性和靈活性以及程序執(zhí)行性能等方面,與第3題和第4題中的實(shí)現(xiàn)方式分別進(jìn)行比較,并分析說(shuō)明哪個(gè)執(zhí)行時(shí)間更短?從以下匯編代碼(條件轉(zhuǎn)移指令JAE)可知,若返回參數(shù)大于等于0xfffff001(按無(wú)符號(hào)數(shù)比較),則說(shuō)明在內(nèi)核中執(zhí)行系統(tǒng)調(diào)用時(shí)發(fā)生錯(cuò)誤,程序?qū)⑥D(zhuǎn)到__syscall_error進(jìn)行6.假定采用中斷控制I/O方式,則以下各項(xiàng)工作是在4個(gè)I/O軟件層的哪一層完成的?(1)根據(jù)邏輯塊號(hào)計(jì)算磁盤(pán)物理地址(柱面號(hào)、磁頭號(hào)、扇區(qū)號(hào))(2)檢查用戶是否有權(quán)讀寫(xiě)文件(3)將二進(jìn)制整數(shù)轉(zhuǎn)換為ASCII碼以便打印輸出(4)CPU向設(shè)備控制器寫(xiě)入控制命令(如“啟動(dòng)工作”命令)(5)CPU從設(shè)備控制器的數(shù)據(jù)端口讀取數(shù)據(jù)參考答案:(1)根據(jù)邏輯塊號(hào)計(jì)算磁盤(pán)物理地址(柱面號(hào)、磁頭號(hào)、扇區(qū)號(hào)):在內(nèi)核的設(shè)備驅(qū)動(dòng)程序?qū)?。?)檢查用戶是否有權(quán)讀寫(xiě)文件:在內(nèi)核的與設(shè)備無(wú)關(guān)軟件層。(3)將二進(jìn)制整數(shù)轉(zhuǎn)換為ASCII碼以便打印輸出:在用戶I/O軟件層,例如,對(duì)于printf()函數(shù)中指定的需要輸出的二進(jìn)制整數(shù)變量,通常在調(diào)用write封裝函數(shù)之前先轉(zhuǎn)換為用ASCII表示的字符串,因?yàn)閣rite系統(tǒng)調(diào)出的???(4)CPU向設(shè)備控制器寫(xiě)入控制命令(如“啟動(dòng)工作”命令):在內(nèi)核的設(shè)備驅(qū)動(dòng)程序?qū)?。?)CPU從設(shè)備控制器的數(shù)據(jù)端口讀取數(shù)據(jù):在內(nèi)核的中斷服務(wù)程序?qū)印?.假設(shè)某計(jì)算機(jī)帶有20個(gè)終端同時(shí)工作,在運(yùn)行用戶程序的同時(shí),能接受來(lái)自任意一個(gè)終端輸入的字符信息,并將字符回送顯示(或打?。?。每一個(gè)終端的鍵盤(pán)輸入部分有一個(gè)數(shù)據(jù)緩沖寄存器RDBRi(i=1~20),當(dāng)在鍵盤(pán)上按下某一個(gè)鍵時(shí),相應(yīng)的字符代碼即進(jìn)入RDBRi,并使它的“完成”狀態(tài)標(biāo)志Donei(i=1~20)置275

1,要等CPU把該字符代碼取走后,Donei標(biāo)志才置0。每個(gè)終端顯示(或打?。┹敵霾糠忠灿幸粋€(gè)數(shù)據(jù)緩沖寄存器TDBRi(i=1~20),并有一個(gè)Readyi(i=1~20)狀態(tài)標(biāo)志,該狀態(tài)標(biāo)志為1時(shí),表示相應(yīng)的TDBRi是空著的,準(zhǔn)備接收新的輸出字符代碼,當(dāng)TDBRi接收了一個(gè)字符代碼后,Readyi標(biāo)志才置0,并將字符代碼送到終端顯示(或打?。?,為了接收終端的輸入信息,CPU為每個(gè)終端設(shè)計(jì)了一個(gè)指針PTRi(i=1~20)指向?yàn)樵摻K端保留的主存輸入緩沖區(qū)。CPU采用下列兩種方案輸入鍵盤(pán)代碼,同時(shí)回送顯示(或打印)。(1)每隔一固定時(shí)間T轉(zhuǎn)入一個(gè)狀態(tài)檢查程序DEVCHC,順序地檢查全部終端是否有任何鍵盤(pán)信息要輸入,如果有,則順序完成之。(2)允許任何有鍵盤(pán)信息輸入的終端向處理器發(fā)出中斷請(qǐng)求。全部終端采用共同的向量地址,利用它使處理器在響應(yīng)中斷后,轉(zhuǎn)入一個(gè)中斷服務(wù)程序DEVINT,由后者詢問(wèn)各終端狀態(tài)標(biāo)志,并為最先遇到的請(qǐng)求中斷的終端服務(wù),然后轉(zhuǎn)向用戶程序。要求畫(huà)出DEVCHC和DEVINT兩個(gè)程序的流程圖。8.某臺(tái)打印機(jī)每分鐘最快打印6個(gè)頁(yè)面,頁(yè)面規(guī)格為50行×80字符。已知某計(jì)算機(jī)主頻為500MHz,若采用中斷方式進(jìn)行字符打印,則每個(gè)字符申請(qǐng)一次中斷且中斷響應(yīng)和中斷處理時(shí)間合起來(lái)為1000個(gè)時(shí)鐘周期。請(qǐng)問(wèn)該計(jì)算機(jī)系統(tǒng)能否采用中斷控制I/O方式來(lái)進(jìn)行字符打印輸出?為什么?9.假定某計(jì)算機(jī)的CPU主頻為500MHz,所連接的某個(gè)外設(shè)的最大數(shù)據(jù)傳輸率為20KBps,該外設(shè)接口中有一個(gè)16位的數(shù)據(jù)緩存器,相應(yīng)的中斷服務(wù)程序的執(zhí)行時(shí)間為500個(gè)時(shí)鐘周期,則是否可以用中斷方式進(jìn)行該外設(shè)的輸入輸出?假定該外設(shè)的最大數(shù)據(jù)傳輸率改為2MBps,則是否可以用中斷方式進(jìn)行該外設(shè)的輸入輸出?10.若某計(jì)算機(jī)有5級(jí)中斷,中斷響應(yīng)優(yōu)先級(jí)為1>2>3>4>5,而中斷處理優(yōu)先級(jí)為1>4>5>2>3。要求:(1)設(shè)計(jì)各級(jí)中斷處理程序的中斷屏蔽位(假設(shè)1為屏蔽,0為開(kāi)放);(2)若在運(yùn)行主程序時(shí),同時(shí)出現(xiàn)第2、4級(jí)中斷請(qǐng)求,而在處理第2級(jí)中斷過(guò)程中,又同時(shí)出現(xiàn)1、3、5級(jí)中斷請(qǐng)求,試畫(huà)出此程序運(yùn)行過(guò)程示意圖。11.假定某計(jì)算機(jī)字長(zhǎng)16位,沒(méi)有cache,運(yùn)算器一次定點(diǎn)加法時(shí)間等于100ns,配置的磁盤(pán)旋轉(zhuǎn)速度為每分鐘3000轉(zhuǎn),每個(gè)磁道上記錄兩個(gè)數(shù)據(jù)塊,每一塊有8000個(gè)字節(jié),兩個(gè)數(shù)據(jù)塊之間間隙的越過(guò)時(shí)間為2ms,主存周期為500ns,存儲(chǔ)器總線寬度為16位,總線帶寬為4MBps,假定磁盤(pán)采用DMA方式進(jìn)行I/O,CPU時(shí)鐘周期等于主存周期?;卮鹣铝袉?wèn)題。(1)磁盤(pán)讀寫(xiě)數(shù)據(jù)時(shí)的最大數(shù)據(jù)傳輸率是多少?(2)當(dāng)磁盤(pán)按最大數(shù)據(jù)傳輸率與主機(jī)交換數(shù)據(jù)時(shí),主存周期空閑百分比是多少?(3)直接尋址的“存儲(chǔ)器-存儲(chǔ)器”SS型加法指令在無(wú)磁盤(pán)I/O操作打擾時(shí)的執(zhí)行時(shí)間為多少?當(dāng)磁盤(pán)I/O操作與一連串這種SS型加法指令執(zhí)行同時(shí)進(jìn)行時(shí),則這種SS型加法指令的最快和最慢執(zhí)行時(shí)間各是多少?12.假設(shè)某計(jì)算機(jī)所有指令都在兩個(gè)總線周期內(nèi)完成,一個(gè)總線周期用來(lái)取指令,另一個(gè)總線周期用來(lái)存取數(shù)據(jù)

溫馨提示

  • 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)論