版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一、進(jìn)程與線程1 在對(duì)進(jìn)程或線程做壓力測(cè)試時(shí),測(cè)試結(jié)果有什么差別,為什么會(huì)有這種差別?進(jìn)行壓力測(cè)試時(shí),會(huì)造成系統(tǒng)的死機(jī);(1) 創(chuàng)建多個(gè)進(jìn)程時(shí)很容易導(dǎo)致系統(tǒng)崩潰(2) 在一個(gè)進(jìn)行中創(chuàng)建多個(gè)線程時(shí),系統(tǒng)崩潰程度比前者低因?yàn)榫€程是共享進(jìn)程中的資源的,線程間的通訊要比進(jìn)程與進(jìn)程間的通訊簡(jiǎn)單,從而前者易死機(jī)2 在對(duì)進(jìn)程創(chuàng)建進(jìn)行計(jì)時(shí)的過(guò)程中,有幾種計(jì)時(shí)方法,哪種比較合理?(1) 調(diào)用GetTickCount();(2) 調(diào)用Ctime();(3) 調(diào)用GetSystemDate();采用Ctime()較好,因?yàn)樗〉搅撕撩爰?jí)的時(shí)間,方便時(shí)間上的統(tǒng)計(jì);3 在不同系統(tǒng)負(fù)荷下的結(jié)果分別有什么區(qū)別,造成該差別的
2、原因是什么?(1) 當(dāng)系統(tǒng)負(fù)荷較低時(shí),創(chuàng)建的進(jìn)程能運(yùn)行,進(jìn)程間的通訊也順利進(jìn)行;(2) 當(dāng)系統(tǒng)負(fù)荷重時(shí),很容易造成系統(tǒng)的崩潰,進(jìn)程間的通訊效率明顯下降;在不同的系統(tǒng)負(fù)荷下,結(jié)果具有不可知性,由于CPU中當(dāng)前運(yùn)行的進(jìn)程、線程數(shù)不同及它的不確定性,導(dǎo)致出不同的測(cè)試結(jié)果;線程可以減小并發(fā)執(zhí)行的時(shí)間和空間開(kāi)銷(線程的創(chuàng)建、退出和調(diào)度),因此容許在系統(tǒng)中建立更多的線程來(lái)提高并發(fā)度線程的創(chuàng)建時(shí)間比進(jìn)程短線程的終止時(shí)間比進(jìn)程短同進(jìn)程內(nèi)的線程切換時(shí)間比進(jìn)程短由于同進(jìn)程內(nèi)線程間共享內(nèi)存和文件資源,可直接進(jìn)行不通過(guò)內(nèi)核的通信原因:搶占系統(tǒng)的資源4 進(jìn)程與線程的概念是什么,在實(shí)現(xiàn)上有何種差別?這種差別會(huì)帶來(lái)何種影響
3、?進(jìn)程是具有獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配和調(diào)度的獨(dú)立單位u 線程的優(yōu)點(diǎn) 減小并發(fā)執(zhí)行的時(shí)間和空間開(kāi)銷(線程的創(chuàng)建、退出和調(diào)度),因此容許在系統(tǒng)中建立更多的線程來(lái)提高并發(fā)度 線程的創(chuàng)建時(shí)間比進(jìn)程短 線程的終止時(shí)間比進(jìn)程短 同進(jìn)程內(nèi)的線程切換時(shí)間比進(jìn)程短 由于同進(jìn)程內(nèi)線程間共享內(nèi)存和文件資源,可直接進(jìn)行不通過(guò)內(nèi)核的通信5 在創(chuàng)建進(jìn)程或線程的過(guò)程中系統(tǒng)需要做那些特殊處理(比如對(duì)調(diào)度和中斷的處理),為什么?創(chuàng)建進(jìn)程或線程時(shí),系統(tǒng)由用戶態(tài)轉(zhuǎn)入核心態(tài);中斷時(shí)保護(hù)現(xiàn)場(chǎng)IC寄存器的值,為了將來(lái)的恢復(fù).CPU調(diào)度、進(jìn)程切換通過(guò)系統(tǒng)調(diào)用Create函數(shù)創(chuàng)建進(jìn)程或線程的過(guò)程中,
4、系統(tǒng)需要像其他系統(tǒng)調(diào)用一樣由用戶態(tài)切入核心態(tài),這個(gè)步驟由中斷實(shí)現(xiàn),并通過(guò)系統(tǒng)服務(wù)調(diào)度表找到相應(yīng)的創(chuàng)建函數(shù)。這樣做的目的是為了在內(nèi)核中產(chǎn)生相應(yīng)的進(jìn)程或線程對(duì)象和一些內(nèi)部的數(shù)據(jù)結(jié)構(gòu)。6 進(jìn)程和線程啟動(dòng)后進(jìn)入睡眠狀態(tài)或者死循環(huán),這兩種情況對(duì)結(jié)果分別有什么影響?進(jìn)入睡眠狀態(tài):系統(tǒng)相對(duì)穩(wěn)定,不占用系統(tǒng)資源;進(jìn)入死循環(huán)狀態(tài):造成系統(tǒng)崩潰7 賦予不同的優(yōu)先級(jí)對(duì)測(cè)試結(jié)果會(huì)有什么影響?創(chuàng)建時(shí)間的不一致性;創(chuàng)建效率的高低8 系統(tǒng)負(fù)載的不同會(huì)對(duì)測(cè)試結(jié)果有什么影響? 當(dāng)系統(tǒng)負(fù)荷較低時(shí),創(chuàng)建的進(jìn)程能運(yùn)行,進(jìn)程間的通訊也順利進(jìn)行;當(dāng)系統(tǒng)負(fù)荷重時(shí),很容易造成系統(tǒng)的崩潰,進(jìn)程間的通訊效率明顯下降9 該實(shí)驗(yàn)中用到的重要函數(shù)及其
5、參數(shù),名稱及含義。 CreateProcess()函數(shù)用于創(chuàng)建新進(jìn)程及其主線程,以執(zhí)行指定的程序u ExitProcess()或TerminateProcess(),則進(jìn)程包含的線程全部終止u ExitProcess()終止一個(gè)進(jìn)程和它的所有線程;它的終止操作是完整的,包括關(guān)閉所有對(duì)象句柄、它的所有線程等u TerminateProcess()終止指定的進(jìn)程和它的所有線程;它的終止操作是不完整的(如:不向相關(guān)DLL通報(bào)關(guān)閉情況),通常只用于異常情況下對(duì)進(jìn)程的終止u CreateThread()函數(shù)在調(diào)用進(jìn)程的地址空間上創(chuàng)建一個(gè)線程,以執(zhí)行指定的函數(shù);返回值為所創(chuàng)建線程的句柄u ExitThre
6、ad()函數(shù)用于結(jié)束本線程u SuspendThread()函數(shù)用于掛起指定的線程u ResumeThread()函數(shù)遞減指定線程的掛起計(jì)數(shù),掛起計(jì)數(shù)為0時(shí),線程恢復(fù)執(zhí)行二、多線程快速排序 1對(duì)數(shù)據(jù)分割的均勻程度對(duì)排序的時(shí)間有何影響,為什么會(huì)有這種影響?(1)數(shù)據(jù)分割均勻時(shí),排序效率較高,歷時(shí)較短;(2)數(shù)據(jù)分割不均勻時(shí),排序效率不高,歷時(shí)較長(zhǎng);原因:分割不均勻時(shí),文件間的交換頻繁,換進(jìn)換出內(nèi)存頻繁,從而嚴(yán)重影響系統(tǒng)效率。2分解到每個(gè)線程的排序算法不應(yīng)采用快速排序算法,為什么?快速排序算法對(duì)數(shù)據(jù)量很大的時(shí)候才有效,而在線程處理的數(shù)據(jù)量相對(duì)來(lái)說(shuō)比較小,從而效率不明顯.3如何通過(guò)數(shù)據(jù)量和邊界條件來(lái)
7、控制參與排序的線程數(shù)?每個(gè)進(jìn)程(線程)處理的數(shù)據(jù)小于1000以后不再分割(控制產(chǎn)生的進(jìn)程在20個(gè)左右)可以利用一些技巧使分割盡可能均勻4在多線程協(xié)同工作的過(guò)程中,進(jìn)程之間有幾種辦法實(shí)現(xiàn)通信?各有什么特點(diǎn)?u 同步互斥問(wèn)題u 信號(hào)量及P、V操作u 進(jìn)程間高級(jí)通信(1)進(jìn)程的同步:synchronism指系統(tǒng)中多個(gè)進(jìn)程中發(fā)生的事件存在某種時(shí)序關(guān)系,需要相互合作,共同完成一項(xiàng)任務(wù)。具體說(shuō),一個(gè)進(jìn)程運(yùn)行到某一點(diǎn)時(shí)要求另一伙伴進(jìn)程為它提供消息,在未獲得消息之前,該進(jìn)程處于等待狀態(tài),獲得消息后被喚醒進(jìn)入就緒態(tài),由于各進(jìn)程要求共享資源,而有些資源需要互斥使用,因此各進(jìn)程間競(jìng)爭(zhēng)使用這些資源,進(jìn)程的這種關(guān)系為進(jìn)
8、程的互斥(2)以上介紹的各種算法都存在問(wèn)題,它們是平等進(jìn)程間的一種協(xié)商機(jī)制,需要一個(gè)地位高于進(jìn)程的管理者來(lái)解決公有資源的使用問(wèn)題操作系統(tǒng)可從進(jìn)程管理者的角度來(lái)處理互斥的問(wèn)題,信號(hào)量就是操作系統(tǒng)提供的管理公有資源的有效手段(3)共享內(nèi)存: 相互通信的進(jìn)程間設(shè)有公共內(nèi)存,一組進(jìn)程向該公共內(nèi)存中寫(xiě),另一組進(jìn)程從公共內(nèi)存中讀,通過(guò)這種方式實(shí)現(xiàn)兩組進(jìn)程間的信息交換(4)消息傳遞:系統(tǒng)為進(jìn)程提供了兩個(gè)高級(jí)通訊原語(yǔ)send和receive(5)消息傳遞模式:u 消息緩沖 在內(nèi)存中開(kāi)設(shè)緩沖區(qū),發(fā)送進(jìn)程將消息送入緩沖區(qū),接收進(jìn)程接收傳遞來(lái)的緩沖區(qū)u 信箱通信(6)共享文件模式:管道通信(7)內(nèi)存映射機(jī)制u 共享
9、存儲(chǔ)區(qū)(shared memory)可用于進(jìn)程間的大數(shù)據(jù)量通信u 進(jìn)行通信的各進(jìn)程可以任意讀寫(xiě)共享存儲(chǔ)區(qū),也可在共享存儲(chǔ)區(qū)上 使用任意數(shù)據(jù)結(jié)構(gòu)u 在使用共享存儲(chǔ)區(qū)時(shí),需要進(jìn)程互斥和同步機(jī)制的輔助來(lái)確保數(shù)據(jù) 一致性u(píng) Windows 2000/XP采用文件映射(file mapping)機(jī)制來(lái)實(shí)現(xiàn)共享存儲(chǔ)區(qū),用戶進(jìn)程可以將整個(gè)文件映射為進(jìn)程虛擬地址空間的一部分來(lái)加以訪問(wèn)5在windows中,內(nèi)存映射文件是如何使用的(步驟)。u CreateFileMapping為指定文件創(chuàng)建一個(gè)文件映射對(duì)象,返回對(duì)象指 針u OpenFileMapping打開(kāi)一個(gè)命名的文件映射對(duì)象,返回對(duì)象指針u MapVie
10、wOfFile把文件映射到本進(jìn)程的地址空間,返回映射地址空 間的首地址u FlushViewOfFile可把映射地址空間的內(nèi)容寫(xiě)到物理文件中u UnmapViewOfFile拆除文件映射與本進(jìn)程地址空間間映射關(guān)系u CloseHandle可關(guān)閉文件映射對(duì)象。當(dāng)完成文件到進(jìn)程地址空間的映射后,就可利用首地址進(jìn)行讀寫(xiě)6 建立內(nèi)存映射文件的過(guò)程中使用的命令OpenFileMapping需要哪些參數(shù),表達(dá)什么含義?HANDLE OpenFileMapping( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName);dwDesiredAc
11、cess in Access to the file mapping object. This access is checked against any security descriptor on the target file mapping object. For a list of values,bInheritHandle in If this parameter is TRUE, the new process inherits the handle. Otherwise, it does not. lpName in Pointer to a string that names
12、 the file mapping object to be opened. If there is an open handle to a file mapping object by this name and the security descriptor on the mapping object does not conflict with the dwDesiredAccess parameter, the open operation succeeds7 進(jìn)程和線程在處理數(shù)據(jù)通信上有何差別,為什么會(huì)有這種差別?線程可以共享進(jìn)程中的資源。效率較高8 用多進(jìn)程實(shí)現(xiàn)和用多線程實(shí)現(xiàn)有哪些
13、不同,產(chǎn)生這些不同的原因是什么?每一次運(yùn)行結(jié)果都有很大的不確定性,雖然原則上線程因?yàn)楦鱾€(gè)之間共享系統(tǒng)的資源,他們只是cpu的調(diào)度單位,而進(jìn)程不但是cpu的調(diào)度單位還是各種資源的分配單位.好像線程應(yīng)該大大快于進(jìn)程的排序速度,可從結(jié)果可以看出就本題來(lái)說(shuō)兩者都相差不是太大.原因可能是在數(shù)量不是很大且交換數(shù)據(jù)不是非常頻繁的情況下,線程的優(yōu)勢(shì)沒(méi)有得到充分的發(fā)揮9 本實(shí)驗(yàn)用到的重要函數(shù)及其參數(shù),名稱及含義。(1)CreateProcess( NULL, / No module name (use command line). "MyChildProcess", / Command li
14、ne. NULL, / Process handle not inheritable. NULL, / Thread handle not inheritable. FALSE, / Set handle inheritance to FALSE. 0, / No creation flags. NULL, / Use parent's environment block. NULL, / Use parent's starting directory. &si, / Pointer to STARTUPINFO structure. &pi ) / Point
15、er to PROCESS_INFORMATION structure. ) (2) = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)(QuickSort), &thread_infoi,0,&thread_ID);(3) = CreateFile("quicksort1.dat", GENERIC_WRITE, FILE_SHARE_READ, NULL,CREATE_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL);(4) CreateFileMapping(hFile, NU
16、LL, PAGE_READWRITE, 0, 128, "Mu_texRunning"); if(hMap=NULL) (5)ViewOfFile(hMap,FILE_MAP_WRITE,0,0,0)(6) UnmapViewofFile(lpMem);(7)CloseHandle(hMap);三、船閘問(wèn)題1實(shí)現(xiàn)互斥的過(guò)程中,哪個(gè)對(duì)象效率比較高?為什么?Semaphore east=1 /向東方向(同步對(duì)象)初始方向?yàn)橄驏|臨界區(qū)效率比較高,因?yàn)樗恍枰袚Q到內(nèi)核執(zhí)行臨界段的效率較高,因?yàn)槌伺R界段是個(gè)結(jié)構(gòu)體之外,其他互斥對(duì)象都是內(nèi)核對(duì)象,因此,產(chǎn)生這樣的對(duì)象消耗資源比較多2
17、船閘的級(jí)數(shù)對(duì)結(jié)果有什么樣的影響,什么原因造成的? semaphore doorN /各級(jí)船閘(互斥對(duì)象)當(dāng)N越大時(shí),則互斥通過(guò)船閘越困難,效率越低船閘的級(jí)數(shù)過(guò)多可能會(huì)引起饑餓問(wèn)題,因?yàn)榧?jí)數(shù)過(guò)多,一方通過(guò)的時(shí)間將會(huì)很長(zhǎng),這樣另一方長(zhǎng)時(shí)間不能通過(guò)而只能等待,這樣就造成了饑餓問(wèn)題。3如果用事件來(lái)實(shí)現(xiàn)同步操作,應(yīng)該怎么做?用SendMessage()或PostMessage()進(jìn)行發(fā)消息,當(dāng)向東方向船支通過(guò)船閘時(shí),則對(duì)向西方向的等待般支發(fā)送一個(gè)消息,表示其可以通過(guò)船閘簡(jiǎn)單的講,首先Create一個(gè)Event對(duì)象,同步線程睡在wait函數(shù)上等待目標(biāo)線程觸發(fā)事件的發(fā)生,當(dāng)目標(biāo)線程處理完自己的任務(wù)后,調(diào)用S
18、etEvent,觸發(fā)事件,這樣同步線程被喚醒而開(kāi)始工作。最后Close。4在該問(wèn)題中存在哪些同步問(wèn)題,哪些互斥問(wèn)題?(1)同步:Semaphore east=1 /向東方向(同步對(duì)象)Semaphore west=1 /向西方向(同步對(duì)象)(2)互斥:semaphore doorN /各級(jí)船閘(互斥對(duì)象)互斥問(wèn)題:每個(gè)時(shí)刻只能有一艘船通過(guò)一個(gè)船閘同步對(duì)象:同一時(shí)刻只能有同一個(gè)方向的船只通過(guò)船閘,當(dāng)同一個(gè)方向所有船只通過(guò)后,應(yīng)通知相反方向的船只通航5在該問(wèn)題中,兩個(gè)方向的優(yōu)先級(jí)是相等的,如果優(yōu)先級(jí)不同,需要加入什么樣的控制當(dāng)兩個(gè)方向的優(yōu)先級(jí)不同時(shí),則分以下兩種情況:(1)向東方向優(yōu)先(2)向西方
19、向優(yōu)先假定反面船只優(yōu)先,可以象寫(xiě)者優(yōu)先程序一樣,再增加一個(gè)臨界區(qū),第一只反面船只到來(lái)時(shí)就申請(qǐng)這個(gè)臨界區(qū)的所有權(quán),直到所有反面船只都通過(guò)了才釋放這個(gè)臨界區(qū);而正面船只必須每一只船只都要申請(qǐng)這個(gè)臨界區(qū)的所有權(quán),如果發(fā)現(xiàn)有反面船只在這個(gè)臨界區(qū)等待,那這只正面船就必須等待反面船只釋放這個(gè)臨界區(qū),而后面到來(lái)的正面船只由于前面那只正面船未釋放互斥對(duì)象mutex而都在mutex隊(duì)列等待,這樣就可以實(shí)現(xiàn)反面船只優(yōu)先通過(guò)了。6船閘級(jí)數(shù)很多時(shí),可能會(huì)產(chǎn)生饑餓問(wèn)題,請(qǐng)?zhí)岢鲆环N解決饑餓的方案。每通過(guò)一級(jí)船閘后,放開(kāi)鎖權(quán)限,讓另一方向船支通過(guò)此船閘可以限制每方每次允許通過(guò)的最多船只數(shù),比如每方每次最多允許通過(guò)10只船,
20、那么可以加一條判斷語(yǔ)句,判斷當(dāng)船只數(shù)到達(dá)10的時(shí)候就釋放臨界區(qū),然后把船只數(shù)清零。7何謂死鎖,死鎖產(chǎn)生的原因,預(yù)防或消除的方法。死鎖:是各方循環(huán)等待各方占用的資源情況;原因:互相占用對(duì)方想用的資源,但又不放開(kāi)自己占據(jù)的資源。預(yù)防:防止造成死鎖的四個(gè)必要條件;消除:避免及采取相關(guān)算法(如銀行家算法。) 兩個(gè)或多個(gè)進(jìn)程無(wú)休止的等待發(fā)生一個(gè)事件,而這個(gè)事件只能由等待中的某個(gè)進(jìn)程引發(fā),當(dāng)達(dá)到這樣的一個(gè)狀態(tài)時(shí),我們稱這些進(jìn)程被死鎖。產(chǎn)生原因:在系統(tǒng)中,如果如下四個(gè)條件同時(shí)成立,那么死鎖能夠發(fā)生: 1). 互斥條件:必須至少有一個(gè)資源以非共享的方式被進(jìn)程持有;更確切的說(shuō), 同時(shí)只有一個(gè)進(jìn)程可以使用該資源。
21、如果另一個(gè)進(jìn)程請(qǐng)求這個(gè)資源,那么該進(jìn)程必須等待這個(gè)資源被釋放。 2). 持有并等待條件:進(jìn)程必須持有至少一個(gè)資源且等待獲取另外的當(dāng)前被其它進(jìn)程持有的資源。 3). 不可搶占條件:不可以搶占資源;也就是說(shuō),資源的釋放只可以是由持有它的進(jìn)程完成工作后自動(dòng)釋放。 4). 循環(huán)等待條件:對(duì)一組等待進(jìn)程P0, P1, , Pn來(lái)說(shuō),必須:P0等待P1持有的資源,P1等待P2持有的資源,Pn-1等待Pn持有的資源,而Pn等待P0持有的資源。預(yù)防:只有四個(gè)必要條件同時(shí)成立才會(huì)發(fā)生死鎖。只要確保其中的一個(gè)條件不會(huì)成立,我們就可以預(yù)防死鎖。讓我們逐個(gè)測(cè)試這四個(gè)必要條件來(lái)詳細(xì)說(shuō)明這中方法。互斥條件:必須確保對(duì)不可
22、共享資源(nonsharable resource)的互斥條件。例如,多個(gè)進(jìn)程不可以共享一臺(tái)打印機(jī)。換句話說(shuō),可共享資源(sharable resource)不要求互斥訪問(wèn),這樣,可共享資源也不會(huì)包含在死鎖中。只讀文件是一個(gè)非常好的可共享資源的例子。如果同時(shí)有多個(gè)進(jìn)程試圖打開(kāi)同一個(gè)只讀文件,那么它們同時(shí)被獲準(zhǔn)訪問(wèn)這個(gè)文件。進(jìn)程從不需要等待可共享資源。然而,我們通常難以通過(guò)阻止互斥條件來(lái)預(yù)防死鎖:有些資源本來(lái)就是不可共享的。持有和等待條件:為了確保系統(tǒng)中不會(huì)發(fā)生持有和等待條件,我們必須確保:不論進(jìn)程何時(shí)請(qǐng)求資源,它都不可以持有其它任何資源。不可搶占條件:第三個(gè)必要條件是不可搶占已經(jīng)分配給進(jìn)程的資
23、源。為了確保這個(gè)條件不會(huì)成立,我們可以采用如下的協(xié)議。如果一個(gè)進(jìn)程持有一些資源并請(qǐng)求另外的資源,而不能夠立刻獲取所請(qǐng)求的資源(也就是說(shuō),這個(gè)進(jìn)程必須等待),那么當(dāng)前持有的所有資源被搶占。換句話說(shuō),這些資源隱含的被釋放了。被搶占的資源被添加到這個(gè)進(jìn)程所等待的資源列表。只有當(dāng)這個(gè)進(jìn)程可以重新獲取它的舊資源和所請(qǐng)求的新資源時(shí),它才可以重新開(kāi)始運(yùn)行。循環(huán)等待條件:循環(huán)等待條件是死鎖的第四個(gè)也是最后一個(gè)條件。確保這個(gè)條件不會(huì)成立的一種方法是對(duì)所有的資源類型進(jìn)行總的排序,并要求進(jìn)程以遞增的順序請(qǐng)求資源。消除方法:當(dāng)確定系統(tǒng)中存在死鎖時(shí),可以有多種選擇??梢酝ㄖ僮鲉T死鎖發(fā)生,讓操作員手工解除死鎖。也可以使
24、系統(tǒng)自動(dòng)從死鎖中恢復(fù)。有兩種解除死鎖的方法。一種方法是簡(jiǎn)單的異常終止(abort)一個(gè)或多個(gè)進(jìn)程來(lái)打斷這個(gè)循環(huán)等待。另一種方法是從一個(gè)或多個(gè)死鎖的進(jìn)程中搶占資源。8何謂饑餓,請(qǐng)說(shuō)出饑餓產(chǎn)生的原因,以及確保進(jìn)程盡可能公平獲得資源的方法饑餓:是指一方總不能分配到資源,總處于等待狀態(tài);原因:算法不正確排除方法:采用正確的算法或預(yù)分配方法9通用操作系統(tǒng)主要包括幾種進(jìn)程間通信的機(jī)制,各側(cè)重解決哪類問(wèn)題?u 同步互斥問(wèn)題u 信號(hào)量及P、V操作u 進(jìn)程間高級(jí)通信(1)進(jìn)程的同步:synchronism指系統(tǒng)中多個(gè)進(jìn)程中發(fā)生的事件存在某種時(shí)序關(guān)系,需要相互合作,共同完成一項(xiàng)任務(wù)。具體說(shuō),一個(gè)進(jìn)程運(yùn)行到某一點(diǎn)時(shí)
25、要求另一伙伴進(jìn)程為它提供消息,在未獲得消息之前,該進(jìn)程處于等待狀態(tài),獲得消息后被喚醒進(jìn)入就緒態(tài),由于各進(jìn)程要求共享資源,而有些資源需要互斥使用,因此各進(jìn)程間競(jìng)爭(zhēng)使用這些資源,進(jìn)程的這種關(guān)系為進(jìn)程的互斥(2)以上介紹的各種算法都存在問(wèn)題,它們是平等進(jìn)程間的一種協(xié)商機(jī)制,需要一個(gè)地位高于進(jìn)程的管理者來(lái)解決公有資源的使用問(wèn)題操作系統(tǒng)可從進(jìn)程管理者的角度來(lái)處理互斥的問(wèn)題,信號(hào)量就是操作系統(tǒng)提供的管理公有資源的有效手段(3)共享內(nèi)存: 相互通信的進(jìn)程間設(shè)有公共內(nèi)存,一組進(jìn)程向該公共內(nèi)存中寫(xiě),另一組進(jìn)程從公共內(nèi)存中讀,通過(guò)這種方式實(shí)現(xiàn)兩組進(jìn)程間的信息交換(4)消息傳遞:系統(tǒng)為進(jìn)程提供了兩個(gè)高級(jí)通訊原語(yǔ)se
26、nd和receive(5)消息傳遞模式:u 消息緩沖 在內(nèi)存中開(kāi)設(shè)緩沖區(qū),發(fā)送進(jìn)程將消息送入緩沖區(qū),接收進(jìn)程接收傳遞來(lái)的緩沖區(qū)u 信箱通信(6)共享文件模式:管道通信(7)內(nèi)存映射機(jī)制u 共享存儲(chǔ)區(qū)(shared memory)可用于進(jìn)程間的大數(shù)據(jù)量通信u 進(jìn)行通信的各進(jìn)程可以任意讀寫(xiě)共享存儲(chǔ)區(qū),也可在共享存儲(chǔ)區(qū)上使用任意數(shù)據(jù)結(jié)構(gòu)u 在使用共享存儲(chǔ)區(qū)時(shí),需要進(jìn)程互斥和同步機(jī)制的輔助來(lái)確保數(shù)據(jù)一致性u(píng) Windows 2000/XP采用文件映射(file mapping)機(jī)制來(lái)實(shí)現(xiàn)共享存儲(chǔ)區(qū),用戶進(jìn)程可以將整個(gè)文件映射為進(jìn)程虛擬地址空間的一部分來(lái)加以訪問(wèn)10幾種主要的進(jìn)程通信機(jī)制需要進(jìn)程調(diào)度提供
27、哪些支持,這些支持解決什么問(wèn)題? (1)切換進(jìn)程上下文(2)由用戶態(tài)轉(zhuǎn)入系統(tǒng)態(tài)11本實(shí)驗(yàn)用到的重要函數(shù)及其參數(shù),名稱與含義。(1) OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_ship_toeast_count")(2) EnterCriticalSection(&east);(3) ReleaseMutex(h_Mutex)(4) WaitForSingleObject(h_Mutex,-1)(5)CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)(TO_EAST),&thr
28、ead_infoi,0,&thread_ID);四、讀者寫(xiě)者問(wèn)題 1該問(wèn)題同船閘問(wèn)題的主要區(qū)別,從并發(fā)程度,同步過(guò)程的優(yōu)先級(jí)等發(fā)面考慮,并指出解決方法的不同。區(qū)別:讀者寫(xiě)者問(wèn)題區(qū)分兩種情況(讀者優(yōu)先和寫(xiě)者優(yōu)先),但船閘問(wèn)題卻是單一情況;并發(fā)程度、同步過(guò)程的優(yōu)先級(jí)不一樣,讀者寫(xiě)者問(wèn)題要比船閘問(wèn)題復(fù)雜2請(qǐng)給出一種解決饑餓問(wèn)題的方案。第一類讀者寫(xiě)者問(wèn)題的解法讀者: while (true) P(mutex); readcount +; if (readcount=1) P (w); V(mutex); 讀 P(mutex); readcount -; if (readcount=0) V(w
29、); V(mutex); ;寫(xiě)者: while (true) P(w); 寫(xiě) V(w); ; 規(guī)定每一次讀或者寫(xiě)操作的最長(zhǎng)時(shí)間,到達(dá)了最長(zhǎng)時(shí)間就要判斷是否有寫(xiě)者或者讀者在等待,如果有就釋放臨界區(qū)的所有權(quán),并把讀者或者寫(xiě)者的數(shù)目清零。3若修改問(wèn)題約束,不允許并發(fā)讀,允許并發(fā)寫(xiě),需要如何修改同步機(jī)制?寫(xiě)者優(yōu)先,控制讀者的進(jìn)入,只有當(dāng)寫(xiě)者不寫(xiě)、并且無(wú)寫(xiě)者再次想進(jìn)入的時(shí)候才允許讀者進(jìn)入4了解Win32 API中定義的IPC函數(shù),說(shuō)明比較說(shuō)明涉及到的幾種同步對(duì)象。你猜測(cè)哪一種操作速度比較快,證實(shí)你的想法,并給出一個(gè)合理的解釋。(1)Critical Section 互斥量,臨界區(qū),事件,信號(hào)量。臨界區(qū)更
30、快,原因見(jiàn)3.1(2)事件(3)SIGNAL5線程在實(shí)現(xiàn)同步的時(shí)候,主要有那些同步對(duì)象,這些同步對(duì)象各有什么特點(diǎn)?同步對(duì)象:會(huì)個(gè)讀、寫(xiě)者線程,有的對(duì)象是允許并發(fā)進(jìn)行的,而有的對(duì)象是不允許并發(fā)操作的 互斥對(duì)象、信號(hào)量對(duì)象和事件對(duì)象 互斥對(duì)象(Mutex)就是互斥信號(hào)量,在一個(gè)時(shí)刻只能被一個(gè)線程使用 信號(hào)量對(duì)象(Semaphore)就是資源信號(hào)量,取值的取值在0到指定最大值之間,用于限制并發(fā)訪問(wèn)的線程數(shù) 事件對(duì)象(Event)相當(dāng)于“觸發(fā)器”,可用于通知一個(gè)或多個(gè)線程某事件的出現(xiàn) Critical Section對(duì)象:只能在同一進(jìn)程內(nèi)使用的臨界區(qū),同一進(jìn)程內(nèi)各線程對(duì)它的訪問(wèn)是互斥進(jìn)行的。6本實(shí)驗(yàn)出
31、現(xiàn)的函數(shù)及其參數(shù),名稱與含義。五、內(nèi)存問(wèn)題 1 物理頁(yè)面的三種狀態(tài)free , reserved, commit的含義。Free:自由狀態(tài);Reserved:保存狀態(tài);Commit:提交狀態(tài);空閑頁(yè)面是指那些可以保留或提交的可用頁(yè)面保留頁(yè)面是邏輯頁(yè)面已分配但沒(méi)有分配物理存儲(chǔ)的頁(yè)面提交頁(yè)面是物理存儲(chǔ)(在內(nèi)存中或磁盤(pán)上)已被分配的頁(yè)面2 VirtualAlloc存在哪兩種主要的調(diào)用方式,各實(shí)現(xiàn)什么功能?MEM_COMMIT:在內(nèi)存或磁盤(pán)頁(yè)面文件中分配物理存儲(chǔ)空間。MEM_RESERVE:保留進(jìn)程的虛擬地址空間,而不分配物理空間。3 VirtualFree存在幾種主要的調(diào)用方式,各實(shí)現(xiàn)什么功能?ME
32、M_DECOMMIT:注銷提交頁(yè)面,即釋放物理內(nèi)存空間,但在虛擬地址空間依然保留。MEM_RELEASE:釋放備用頁(yè)面,即將物理存儲(chǔ)和虛擬地址空間全部釋放內(nèi)4內(nèi)存映射文件可以用來(lái)解決哪些問(wèn)題,如何使用?采用文件映射(file mapping)機(jī)制來(lái)實(shí)現(xiàn)共享存儲(chǔ)區(qū),用戶進(jìn)程可以將整個(gè)文件映射為進(jìn)程虛擬地址空間的一部分來(lái)加以訪問(wèn)解決如下問(wèn)題:§ 加載和執(zhí)行.exe和dll文件,這可以節(jié)省頁(yè)文件空間和應(yīng)用程序啟動(dòng)所需的時(shí)間;§ 訪問(wèn)磁盤(pán)上的數(shù)據(jù)文件,這可以減少文件I/O,并且不必對(duì)文件進(jìn)行緩存;§ 實(shí)現(xiàn)多個(gè)進(jìn)程間的數(shù)據(jù)共享1) 創(chuàng)建或打開(kāi)一個(gè)文件對(duì)象,該對(duì)象用于標(biāo)識(shí)磁盤(pán)
33、上想用作內(nèi)存映射文件的文件。2) 創(chuàng)建一個(gè)文件映射對(duì)象,告訴系統(tǒng)該文件的大小和打算如何訪問(wèn)該文件。3) 讓系統(tǒng)將文件映射對(duì)象的全部或一部分映射到進(jìn)程地址空間中步驟1:創(chuàng)建或打開(kāi)文件步驟2:創(chuàng)建一個(gè)文件映射對(duì)象步驟3:將文件數(shù)據(jù)映射到進(jìn)程的地址空間步驟4:從進(jìn)程的地址空間中撤消文件數(shù)據(jù)的映像4 分析不同參數(shù)的設(shè)置對(duì)內(nèi)存分配的結(jié)果影響。將VirtualAlloc函數(shù)的參數(shù)ftAllocationType改為MEM_RESET則減少了dwAvailVirtual(在用戶狀態(tài)下虛擬地址空間中的未保留與未提交的存儲(chǔ)空間)。將VirtualAlloc函數(shù)的參數(shù)ftAllocationType改為MEM_T
34、OP_DOWN不改變?nèi)魏谓Y(jié)果。將flProtect參數(shù)若改為PAGE_GUARD,則操作因?yàn)槭艿奖Wo(hù)而結(jié)果不發(fā)生任何變化。將flProtect參數(shù)若改為PAGE_NOCACHE,則操作的結(jié)果同樣不發(fā)生任何變化。5 如果調(diào)換分配,回收,內(nèi)存復(fù)位,加鎖,解鎖,提交,回收的次序,會(huì)有什么變化,并分析原因。如果把提交操作放在保留操作前面,則程序不能進(jìn)行,也就是說(shuō),提交的必須是保留頁(yè)面。如果把釋放操作放在回收操作前面,則釋放操作會(huì)出錯(cuò),而且可能減少dwAvailPhys。如果把解鎖操作放在鎖操作前面,則解鎖操作會(huì)出錯(cuò),對(duì)結(jié)果不發(fā)生任何改變。6 在多數(shù)通用操作系統(tǒng)中,內(nèi)存管理分為哪三個(gè)層次,分別實(shí)現(xiàn)什么功
35、能?(1) 內(nèi)存管理器(2) 地址轉(zhuǎn)換機(jī)制(3) 物理內(nèi)存管理7 虛擬存儲(chǔ)有什么優(yōu)越性?在進(jìn)程開(kāi)始運(yùn)行之前,不是裝入全部頁(yè)面,而是裝入一個(gè)或零個(gè)頁(yè)面,之后根據(jù)進(jìn)程運(yùn)行的需要,動(dòng)態(tài)裝入其它頁(yè)面;當(dāng)內(nèi)存空間已滿,而又需要裝入新的頁(yè)面時(shí),則根據(jù)某種算法淘汰某個(gè)頁(yè)面,以便裝入新的頁(yè)面使用戶感覺(jué)不到內(nèi)存的“限制”,好象可以“無(wú)限”擴(kuò)充一樣。8 引入線性地址在操作,管理,劃分,保護(hù)等方面帶來(lái)了什么好處與開(kāi)銷?加快速度9 為什么需要引入多級(jí)頁(yè)表,引入多級(jí)頁(yè)表有什么好處,帶了了什么開(kāi)銷?可以更大的擴(kuò)展尋址,帶來(lái)尋址開(kāi)銷。線性地址是邏輯地址和物理地址變換之間的中間層。邏輯地址是段中偏移量,加上相應(yīng)的段基址就成為
36、線性地址,如果不采用分頁(yè)機(jī)制,則此線性地址就是物理地址;如果啟用分頁(yè)機(jī)制則還需通過(guò)兩級(jí)頁(yè)表轉(zhuǎn)換為物理地址。對(duì)每個(gè)進(jìn)程而言,好像自己擁有獨(dú)立的4G線性地址空間,有效的保護(hù)了進(jìn)程內(nèi)的數(shù)據(jù),但同時(shí)也增加了地址轉(zhuǎn)換所帶來(lái)的開(kāi)銷。10 多數(shù)操作系統(tǒng)中,把內(nèi)存劃分為系統(tǒng)區(qū)和用戶區(qū),為什么要進(jìn)行這種劃分,需要什么硬件支持?出于安全性考慮,CR311 物理存儲(chǔ)提交的不同方法,比較各自的優(yōu)缺點(diǎn)。略?12 本實(shí)驗(yàn)中用到的主要函數(shù)及其參數(shù),名稱及含義。六、 高速文件訪問(wèn)問(wèn)題1 在文件系統(tǒng)層次提高訪問(wèn)效率的方法有那些,各自的思想和實(shí)現(xiàn)。(1) 緩沖方式:假設(shè)一個(gè)進(jìn)程讀了文件的第一個(gè)字節(jié),它常常會(huì)按照順序讀第二個(gè)第三個(gè)
37、字節(jié),一直到讀出所有的字節(jié)。利用這個(gè)原理可以進(jìn)行“預(yù)取“,也就是說(shuō),在進(jìn)程沒(méi)請(qǐng)求讀磁盤(pán)之前就先把文件讀出來(lái)并放到時(shí)高速緩存中。 文件緩存:預(yù)讀取。每次讀取的塊大?。痪彌_區(qū)大??;替換方式寫(xiě)回。寫(xiě)回時(shí)機(jī)選擇;一致性問(wèn)題n 類似處理器cache的思想n 局部性原則的思想n 區(qū)別n 只涉及空間局部性n 處理器cache對(duì)程序員不可見(jiàn)n 文件cache需要顯式地由程序員控制n 所在層次不同,file cache是在內(nèi)存中為文件做緩沖實(shí)現(xiàn):表示用的標(biāo)志位是FILE_FLAG_SEQUENTIAL_SCAN(2) 異步方式:是一種改變指令執(zhí)行順序的機(jī)制,它通過(guò)設(shè)置打開(kāi)文件的一個(gè)標(biāo)志位來(lái)使進(jìn)程不等待讀寫(xiě)文件操
38、作而繼續(xù)執(zhí)行。當(dāng)后續(xù)指令必須用到磁盤(pán)訪問(wèn)的結(jié)果數(shù)據(jù)時(shí),它再通過(guò)一條WAIT指令進(jìn)行等待。這樣,在訪盤(pán)指令和等待指令之間的指令就可以與磁盤(pán)訪問(wèn)同時(shí)進(jìn)行了,從而大大加快了系統(tǒng)的整體速度。不再等待磁盤(pán)操作的完成使處理器和I/O并發(fā)工作n 基本思想:填充I/O操作間等待的CPU時(shí)間實(shí)現(xiàn):表示用的標(biāo)志位是FILE_FLAG_OVERLAPPED2 對(duì)Q1(讀寫(xiě)比例參數(shù))和Q2(操作相關(guān)概率)分別作定時(shí)和定次數(shù)測(cè)試,對(duì)每種模式產(chǎn)生的結(jié)果進(jìn)行分析Q1:修改調(diào)用10次,可調(diào)用20次30次;Q2:涉及到多種操作,不僅僅為五種操作可適當(dāng)增加其他操作,如除、MOD(取模)等,使其操作概論分布均勻3 適當(dāng)變換Q1,Q
39、2的值,它們會(huì)對(duì)結(jié)果產(chǎn)生什么影響?略?4 了解Linux的文件緩沖機(jī)制,說(shuō)明在常規(guī)的ext2文件系統(tǒng)以及某種日志文件系統(tǒng)例如ext3/jfs/raiserFS中緩沖機(jī)制有什么不同。ext2 文件系統(tǒng)的安全性還是不錯(cuò)的, 一般非正常關(guān)機(jī)造成的 錯(cuò)誤都可以修復(fù), 除非在讀寫(xiě)磁盤(pán)的時(shí)候非正常關(guān)機(jī). 由于 Linux 采用了 先進(jìn)緩沖機(jī)制和多任務(wù)機(jī)制, 在向磁盤(pán)些 數(shù)據(jù)的時(shí)候,都是先寫(xiě)到緩沖區(qū)中,軟盤(pán)也不例外. 等緩沖區(qū)存滿后 再往硬盤(pán)上寫(xiě).但這樣就容易造成問(wèn)題, 因?yàn)榫彌_
40、區(qū)中總會(huì)有數(shù)據(jù), 一旦非正常關(guān)機(jī), 將造成數(shù)據(jù)丟失. 為此, 特地有一個(gè)后臺(tái)執(zhí)行的 程序,沒(méi)隔一段時(shí)間就清空一次緩沖區(qū), 以防出現(xiàn)問(wèn)題. 當(dāng)然,如果 非常湊巧, 在緩沖區(qū)被清空之前斷電了, 文件系統(tǒng)很有可能就被破壞了. ext2 文件系統(tǒng)被設(shè)計(jì)成盡量 少產(chǎn)生文件不連續(xù)存放的問(wèn)題無(wú)論是FAT32, EXT2 或者是NTFS,都是基于樹(shù)結(jié)構(gòu)的日志文件系統(tǒng):(ext3/reiserfs)ReiserFS 整體來(lái)說(shuō)是個(gè)相當(dāng)不錯(cuò)的系統(tǒng),它處理小型文件(少于4kb)時(shí)效能會(huì)比e
41、xt2和ext3 來(lái)的好/Ext2: 是 GNU/Linux 系統(tǒng)中標(biāo)準(zhǔn)的文件系統(tǒng),其特點(diǎn)為存取文件的性能極好,對(duì)于中小型的文件更顯示出優(yōu)勢(shì),這主要得利于其簇快取層的優(yōu)良設(shè)計(jì)。其單一文件大小與文件系統(tǒng)本身的容量上限與文件系統(tǒng)本身的簇大小有關(guān),在一般常見(jiàn)的 x86 電腦系統(tǒng)中,簇最大為 4KB, 則單一文件大小上限為 2048GB, 而文件系統(tǒng)的容量上限為 16384GB。但由于目前核心 2.4 所能使用的單一分割區(qū)最大只有 2048GB,因此實(shí)際上能使用的文件系統(tǒng)容量最多也只有 2048GB。 Ext3: 顧名思義,它就是 ext2 的下一代,也就是在保有目前 ext2 的格式之下再加上日志功
42、能。目前它離實(shí)用階段還有一段距離,也許在下一版的核心就可以上路了。 ext3是一種日志式文件系統(tǒng)。日志式文件系統(tǒng)的優(yōu)越性在于:由于文件系統(tǒng)都有快取層參與運(yùn)作,如不使用時(shí)必須將文件系統(tǒng)卸下,以便將快取層的資料寫(xiě)回磁盤(pán)中。因此每當(dāng)系統(tǒng)要關(guān)機(jī)時(shí),必須將其所有的文件系統(tǒng)全部卸下后才能進(jìn)行關(guān)機(jī)。 如果在文件系統(tǒng)尚未卸下前就關(guān)機(jī) (如停電) 時(shí),下次重開(kāi)機(jī)后會(huì)造成文件系統(tǒng)的資料不一致,故這時(shí)必須做文件系統(tǒng)的重整工作,將不一致與錯(cuò)誤的地方修復(fù)。然而,此一重整的工作是相當(dāng)耗時(shí)的,特別是容量大的文件系統(tǒng),而且也不能百分之百保證所有的資料都不會(huì)流失。故這在大型的伺服器上可能會(huì)造成問(wèn)題。 為了克服此問(wèn)題,業(yè)界經(jīng)長(zhǎng)久
43、的開(kāi)發(fā),而完成了所謂日志式文件系統(tǒng) (Journal File System) 。此類文件系統(tǒng)最大的特色是,它會(huì)將整個(gè)磁盤(pán)的寫(xiě)入動(dòng)作完整記錄在磁盤(pán)的某個(gè)區(qū)域上,以便有需要時(shí)可以回朔追蹤。由于資料的寫(xiě)入動(dòng)作包含許多的細(xì)節(jié),像是改變文件標(biāo)頭資料、搜尋磁盤(pán)可寫(xiě)入空間、一個(gè)個(gè)寫(xiě)入資料區(qū)段等等,每一個(gè)細(xì)節(jié)進(jìn)行到一半若被中斷,就會(huì)造成文件系統(tǒng)的不一致,因而需要重整。然而,在日志式文件系統(tǒng)中,由于詳細(xì)紀(jì)錄了每個(gè)細(xì)節(jié),故當(dāng)在某個(gè)過(guò)程中被中斷時(shí),系統(tǒng)可以根據(jù)這些記錄直接回朔并重整被中斷的部分,而不必花時(shí)間去檢查其他的部分,故重整的工作速度相當(dāng)快,幾乎不需要花時(shí)間。5 高速文件訪問(wèn)的三種主要模式有什么主要區(qū)別,適
44、用于什么場(chǎng)合?(1) 無(wú)緩沖方式:表示用的標(biāo)志位是FILE_FLAG_NO_BUFFERING(2) 緩沖方式:表示用的標(biāo)志位是FILE_FLAG_SEQUENTIAL_SCAN(3) 異步方式:表示用的標(biāo)志位是FILE_FLAG_OVERLAPPED場(chǎng)合:6 在實(shí)驗(yàn)過(guò)程中,讀寫(xiě)比例參數(shù)Q1和操作相關(guān)概率Q2的含義,對(duì)實(shí)驗(yàn)結(jié)果的影響?略7 數(shù)據(jù)緩沖模式的提出是基于什么出發(fā)點(diǎn)提出的,對(duì)解決問(wèn)題有什么效果?“預(yù)取“假設(shè)一個(gè)進(jìn)程讀了文件的第一個(gè)字節(jié),它通常會(huì)按照順序繼續(xù)讀第二個(gè)字節(jié),一直到讀完,所以可以“預(yù)取”。大大加速了訪問(wèn)磁盤(pán)的速度。也保持了文件內(nèi)容的一致性。8 異步傳輸模式的提出是基于何種出發(fā)
45、點(diǎn)的提出的,對(duì)解決問(wèn)題的效果? “指令執(zhí)行順序“的不依賴性填充I/O操作間等待的CPU時(shí)間9 數(shù)據(jù)緩沖模式與處理器cache的思想有何異同?文件高速緩存:有一“事后寫(xiě)”機(jī)制,保證了文件內(nèi)容的一致性;cache:僅是為了匹配外設(shè)與CPU之間的速度問(wèn)題;10 數(shù)據(jù)緩沖模式中如何處理同步和一致性問(wèn)題。(1) 日志(2) “事后寫(xiě)”將數(shù)據(jù)從磁盤(pán)讀入共享內(nèi)存緩沖區(qū),稱為數(shù)據(jù)緩沖。當(dāng)數(shù)據(jù)庫(kù)服務(wù)器需要取數(shù)據(jù)時(shí),它必須先找到數(shù)據(jù)所在的頁(yè)。在找到頁(yè)后,把該頁(yè)從磁盤(pán)讀進(jìn)共享內(nèi)存緩沖池緩沖區(qū),當(dāng)該頁(yè)在緩沖池中后,任何其他用戶可以讀取或修改該頁(yè)的內(nèi)容,而不必從磁盤(pán)中讀入,也就是說(shuō),共享內(nèi)存緩沖池中的頁(yè)為所有服務(wù)進(jìn)程共
46、享。當(dāng)頁(yè)第一次進(jìn)共享內(nèi)存時(shí),它與磁盤(pán)的內(nèi)容一樣。當(dāng)該頁(yè)中的任何數(shù)據(jù)修改時(shí),內(nèi)存與磁盤(pán)不一致,如果修改的頁(yè)刷到磁盤(pán)之前,發(fā)生了故障,數(shù)據(jù)的完整性就會(huì)受到損害,物理日志即負(fù)責(zé)處理這個(gè)問(wèn)題。由系統(tǒng)的cache manager來(lái)實(shí)現(xiàn)對(duì)緩存的控制a) 讀取數(shù)據(jù)的時(shí)候的prefetchb) 定期地更新磁盤(pán)上的內(nèi)容使其與cache一致c) 在cache滿的情況下,根據(jù)LRU原則清除緩存的內(nèi)容Write-back機(jī)制d) 在用戶要對(duì)磁盤(pán)寫(xiě)數(shù)據(jù)時(shí),只更改cache中的內(nèi)容,由cache manager來(lái)決定何時(shí)將更新反應(yīng)到磁盤(pán)11.為解決異步傳輸問(wèn)題,需要對(duì)訪問(wèn)控制做什么樣的修改,這樣做的意義是什么?它通過(guò)設(shè)置
47、打開(kāi)文件的一個(gè)標(biāo)志位來(lái)使進(jìn)程不等待讀寫(xiě)文件操作而繼續(xù)執(zhí)行。當(dāng)后續(xù)指令必須用到磁盤(pán)訪問(wèn)的結(jié)果數(shù)據(jù)時(shí),它再通過(guò)一條WAIT指令進(jìn)行等待。這樣,在訪盤(pán)指令和等待指令之間的指令就可以與磁盤(pán)訪問(wèn)同時(shí)進(jìn)行了,從而大大加快了系統(tǒng)的整體速度。12 本實(shí)驗(yàn)用到的重要函數(shù)及其參數(shù),名稱與含義。(1) void filter_nobuffer(char*source,char*sink,void(*func)(char*addr); /無(wú)緩沖模式(2) void filter_sequen(char*source,char*sink,void(*func)(char*addr); /高速緩沖模式(3) void f
48、ilter_overlp(char*source,char*sink,void(*func)(char*addr); /異步模式(4) GetTickCount() /獲得系統(tǒng)當(dāng)前時(shí)間(5) CreateFile(LPCTSTR LPFILENAME,DWORD DWDESIREDACCESS,DWORD DWSHAREMODE,LPSECURITY_ATTRIBUTES LPSECURITYATTRIBUTES,DWORD DWCREATIONDISPOSITION,DWORD DWFLAGSANDATTRIBUTES,HANDLE HTEMPLATEDFILE)獲得在第一個(gè)參數(shù)中指定的文件
49、句柄(6) ReadFile(HANDLE HFILE,LPVOID LPBUFFER,DWORD NMUMBEROFBYTESTOREAD,LPDWORD LPNUMBEROFBYTESREAD,LPOVERLAPPED LPOVERLAPPED)和WriteFile(HANDLE HFILE,LPCVOID LPBUFFER,DWORD NUMBEROFBYTESTOWRITE,LPDWORD LPNUMBEROFBYTESWRITTEN,LPOVERLAPPED LPOVERLAPPED);(7) GetoverlappedResult(HANDLE HFILE,LPOVERLAPPED
50、 LPOVERLAPPED,LPDWORD LPNUMBEROFBYTESTRANSFERRED,BOOL BWAIT):返回在指定文件、命名管道或通信設(shè)備上重疊操作的結(jié)果CreateFile 七、NDIS問(wèn)題1NDIS體系如何支持多種類型的網(wǎng)絡(luò)?Microsoft網(wǎng)絡(luò)驅(qū)動(dòng)程序接口規(guī)范(NDIS)的設(shè)計(jì)目的是通過(guò)將不同的協(xié)議從網(wǎng)絡(luò)接口卡上拆除,使得用戶可以訪問(wèn)不同的協(xié)議。NDIS程序庫(kù)(NDIS.sys)提供了一個(gè)面向NIC驅(qū)動(dòng)程序的完全抽象的接口,網(wǎng)卡驅(qū)動(dòng)程序與協(xié)議層驅(qū)動(dòng)程序及操作系統(tǒng)通過(guò)這個(gè)接口進(jìn)行通信通過(guò)一系列的導(dǎo)出函數(shù),支持多種類型的網(wǎng)絡(luò).2NDIS包括(小端口驅(qū)動(dòng)程序)、(中間層驅(qū)動(dòng)
51、程序)和(協(xié)議驅(qū)動(dòng)程序),它們各有什么分工?如何配合工作?(1)NDIS小端口驅(qū)動(dòng)程序(也稱為小端口NIC驅(qū)動(dòng)程序)有兩種基本功能:a、管理一個(gè)網(wǎng)絡(luò)接口卡(NIC),包括通過(guò)NIC發(fā)送和接收數(shù)據(jù)b、與高級(jí)驅(qū)動(dòng)程序接口,例如和中間驅(qū)動(dòng)程序和傳輸協(xié)議驅(qū)動(dòng)程序NDIS庫(kù)導(dǎo)出了一組函數(shù)(NdisXXX 函數(shù)) ,這些函數(shù)封裝了所有的操作系統(tǒng)功能由小端口驅(qū)動(dòng)程序調(diào)用小端口驅(qū)動(dòng)程序必須導(dǎo)出一組函數(shù)入口點(diǎn) (MiniportXxx函數(shù))由NDIS調(diào)用小端口驅(qū)動(dòng)程序與NDIS以及高層驅(qū)動(dòng)程序間的交互:發(fā)送 傳輸驅(qū)動(dòng)程序調(diào)用一個(gè)NdisXxx 函數(shù). NDIS通過(guò)調(diào)用適當(dāng)?shù)腗iniportXxx函數(shù)將數(shù)據(jù)包傳送
52、給小端口驅(qū)動(dòng)程序. 小端口驅(qū)動(dòng)程序通過(guò)調(diào)用適當(dāng)?shù)腘disXxx函數(shù)將數(shù)據(jù)包轉(zhuǎn)發(fā)給NIC小端口驅(qū)動(dòng)程序與NDIS以及高層驅(qū)動(dòng)程序間的交互:接收 NIC 發(fā)出一個(gè)硬件中斷. NDIS調(diào)用 MiniportXxx函數(shù) 小端口驅(qū)動(dòng)程序從NIC 接收數(shù)據(jù),然后通過(guò)調(diào)用NdisXxx 函數(shù)向綁定的上層驅(qū)動(dòng)程序表明接收的數(shù)據(jù)包的存在(2)中間驅(qū)動(dòng)程序是那種典型的處于小端口驅(qū)動(dòng)程序和傳輸協(xié)議驅(qū)動(dòng)程序之間的驅(qū)動(dòng)程序。由于它處于驅(qū)動(dòng)程序?qū)蛹?jí)的中間位置,所以中間驅(qū)動(dòng)程序必須和上面的協(xié)議驅(qū)動(dòng)程序和下面的小端口驅(qū)動(dòng)程序都通訊 在其下邊界,導(dǎo)出協(xié)議入口點(diǎn) (ProtocolXxx 函數(shù)) 在其上邊界,導(dǎo)出小端口入口點(diǎn) (
53、MiniportXxx函數(shù))中間驅(qū)動(dòng)程序典型的用途:過(guò)濾網(wǎng)絡(luò)數(shù)據(jù)包過(guò)濾器中間驅(qū)動(dòng)程序在多個(gè)網(wǎng)卡間平衡數(shù)據(jù)包的傳輸Mux中間驅(qū)動(dòng)程序(3)協(xié)議驅(qū)動(dòng)程序位于NDIS驅(qū)動(dòng)程序的最高層,它通過(guò)中間驅(qū)動(dòng)程序或直接與小端口驅(qū)動(dòng)程序打交道,并向下導(dǎo)出一組ProtocolXxx函數(shù)。通常在實(shí)現(xiàn)傳輸協(xié)議棧 (例如TCP/IP, IPX)的傳輸驅(qū)動(dòng)程序中作為最低層在上邊界,協(xié)議驅(qū)動(dòng)程序與協(xié)議棧中的高層驅(qū)動(dòng)程序的接口是私有的.協(xié)議驅(qū)動(dòng)程序通過(guò)NDIS完成向小端口驅(qū)動(dòng)程序或中間驅(qū)動(dòng)程序的綁定,并使用它們收發(fā)網(wǎng)絡(luò)數(shù)據(jù)包3NDIS協(xié)議驅(qū)動(dòng)設(shè)計(jì)的思想。(1)網(wǎng)絡(luò)上截獲數(shù)據(jù)包的思想自然的設(shè)計(jì)思想是每當(dāng)上層應(yīng)用程序請(qǐng)求讀取數(shù)據(jù)
54、時(shí),就為該請(qǐng)求生成一個(gè)相應(yīng)的IRP,并將此IRP置于一個(gè)讀取等待隊(duì)列之中。當(dāng)NIC從網(wǎng)絡(luò)上接收到數(shù)據(jù)包時(shí),由NDIS負(fù)責(zé)調(diào)用相應(yīng)的接收函數(shù)。接收函數(shù)從讀取等待隊(duì)列的首部取出一個(gè)IRP,并將從網(wǎng)絡(luò)上接收到的數(shù)據(jù)拷貝到由該IRP所指定的緩沖區(qū)中。至此,上層應(yīng)用程序便成功接收到了它所需要的數(shù)據(jù)。 這種接收方式的天生缺陷就是丟包。如果上層應(yīng)用程序一直沒(méi)有讀取數(shù)據(jù)的請(qǐng)求,那么NIC從網(wǎng)絡(luò)上接收到的數(shù)據(jù)就會(huì)直接被丟棄。 (2)解決丟包的策略本程序的設(shè)計(jì)思路是協(xié)議驅(qū)動(dòng)程序負(fù)責(zé)維護(hù)一個(gè)接收緩沖區(qū),該緩沖區(qū)以隊(duì)列的形式組織。當(dāng)NIC通知NDIS已從網(wǎng)絡(luò)上接收到數(shù)據(jù)包時(shí),可以先將這些數(shù)據(jù)緩存起來(lái)。當(dāng)上層應(yīng)用程序需
55、要讀取數(shù)據(jù)時(shí),該讀操作的數(shù)據(jù)源不是直接從網(wǎng)絡(luò)得到,而是經(jīng)過(guò)有效管理的存放著數(shù)據(jù)的緩沖區(qū)。這樣,丟包的問(wèn)題便得以解決。當(dāng)然,如果上層應(yīng)用程序還是一直沒(méi)有讀取數(shù)據(jù)的請(qǐng)求,或者上層應(yīng)用程序處理數(shù)據(jù)的速度低于NIC從網(wǎng)絡(luò)上接收數(shù)據(jù)的速度,再或者網(wǎng)絡(luò)出現(xiàn)峰值流量時(shí),緩沖區(qū)自然會(huì)逐漸被填滿,最終還是會(huì)出現(xiàn)丟包的情況。但是在正常情況下,這種增設(shè)緩沖的方法已經(jīng)足以避免丟包情況的發(fā)生了。 4NDIS提供了哪幾層接口?NDIS提供了四層軟件接口:傳輸驅(qū)動(dòng)程序上邊界接口;傳輸驅(qū)動(dòng)程序下邊界接口;網(wǎng)絡(luò)接口卡上邊界接口;網(wǎng)絡(luò)接口卡下邊界接口;5如何解決丟包問(wèn)題?負(fù)責(zé)維護(hù)一個(gè)接收緩沖區(qū),該緩沖區(qū)以隊(duì)列的形式組織。當(dāng)NIC通知NDIS已從網(wǎng)絡(luò)上接收到數(shù)據(jù)包時(shí),可以先將這些數(shù)據(jù)緩存起來(lái)。當(dāng)上層應(yīng)用程序需要讀取數(shù)據(jù)時(shí),該讀操作的數(shù)據(jù)源不是直接從網(wǎng)絡(luò)得到,而是經(jīng)過(guò)有效管理的
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024二建《管理》口袋書(shū)
- 一年級(jí)數(shù)學(xué)第一學(xué)期滬教版- 期末試卷 2
- 2024-2025學(xué)年初中同步測(cè)控優(yōu)化設(shè)計(jì)物理八年級(jí)下冊(cè)配人教版第7章 第1節(jié) 力含答案
- 西京學(xué)院《語(yǔ)文教學(xué)理論與實(shí)踐》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《數(shù)字化環(huán)境及數(shù)字化建筑表現(xiàn)》2022-2023學(xué)年第一學(xué)期期末試卷
- 英語(yǔ)埃及艷后
- 西京學(xué)院《監(jiān)理概論》2022-2023學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《廣告攝影與攝像》2021-2022學(xué)年第一學(xué)期期末試卷
- 西京學(xué)院《翻譯工作坊》2023-2024學(xué)年第一學(xué)期期末試卷
- 老王課件湘教版
- 勞務(wù)實(shí)名制工資管理承諾書(shū)
- 低年級(jí)繪本 校本課程綱要
- 推拉門(mén)安裝技術(shù)交底
- 八年級(jí)上學(xué)期期中考試主題班會(huì)課件
- 癌因性疲乏課件
- 中華人民共和國(guó)文物保護(hù)法學(xué)習(xí)課程PPT
- 弘揚(yáng)中華傳統(tǒng)文化主題班會(huì)-課件
- 三年級(jí)《道德與法治》上冊(cè)第一單元《 快樂(lè)學(xué)習(xí)》教學(xué)設(shè)計(jì)
- 中班健康《身體上的洞洞》課件
- 藥品公司經(jīng)營(yíng)范圍(46個(gè)范本)
- 張祖德版大學(xué)無(wú)機(jī)化學(xué)試題集及答案
評(píng)論
0/150
提交評(píng)論