應(yīng)用軟件工程師崗位培訓(xùn)課程常用操作系統(tǒng)ppt課件
《應(yīng)用軟件工程師崗位培訓(xùn)課程常用操作系統(tǒng)ppt課件》由會(huì)員分享,可在線閱讀,更多相關(guān)《應(yīng)用軟件工程師崗位培訓(xùn)課程常用操作系統(tǒng)ppt課件(56頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
常用操作系統(tǒng),,windows版本及開發(fā)工具簡(jiǎn)介 進(jìn)程 線程 線程的建立與退出 線程調(diào)度 線程同步 動(dòng)態(tài)連接庫(kù) 與其它操作系統(tǒng)區(qū)別,2,windows版本,Windows1.0 Windows是由微軟在1983年11月(在Lisa之后,Macintosh之前)宣布,并在兩年后(1985年11月)發(fā)行。在此后的兩年中,緊隨著Microsoft Windows早期版本1.0之后,又推出了幾種改進(jìn)版本,以支持國(guó)際商業(yè)市場(chǎng),并提供新型視訊顯示器和打印機(jī)的驅(qū)動(dòng)程序。 Windows2.0 Windows版本2.0是在1987年11月正式在市場(chǎng)上推出的。該版本對(duì)使用者接口做了一些改進(jìn)。這些改進(jìn)中最有效的是使用了可重迭式窗口,而Windows 1.0中使用的是并排式窗口。Windows 2.0還增強(qiáng)了鍵盤和鼠標(biāo)接口,特別是加入了菜單和對(duì)話框。 Windows3.x Microsoft Windows版本3.1是1992年4月發(fā)布的,其中包括的幾個(gè)重要特性是TrueType字體技術(shù)(給Windows帶來可縮放的輪廓字體)、多媒體(聲音和音樂)、對(duì)象連結(jié)和嵌入(OLE:Object Linking and Embedding)和通用對(duì)話框。跟OS/2一樣,Windows 3.1只能在保護(hù)模式下運(yùn)作,并且要求至少配置了1MB內(nèi)存的286或386處理器。 Window NT 在1993年7月發(fā)表的Windows NT是第一個(gè)支持Intel 386、486和Pentium微處理器32位保護(hù)模式的Windows版本。Windows NT提供32位平坦尋址,并使用32位的指令集。(本章后面我會(huì)談到一些尋址空間的問題)。Windows NT還可以移植到非Intel處理器上,并在幾種使用RISC芯片的工作站上執(zhí)行。,3,windows版本,Windows95/98 Windows 95是在1995年8月發(fā)布的。和Windows NT一樣,Windows 95也支持Intel 386或更高等級(jí)處理器的32位,但是Windows 95具有需要較少硬件資源的優(yōu)點(diǎn)。 Windows 98在1998年6月發(fā)布,具有保護(hù)模式。雖然它缺少Windows NT中的某些功能,諸如高安全性和對(duì)RISC機(jī)器的可移植性等許多加強(qiáng)功能,包括執(zhí)行效能的提高、更好的硬件支持以及與因特網(wǎng)和全球信息網(wǎng)(WWW)更緊密的結(jié)合。 Windows ME 2000年9月微軟公司發(fā)行32位圖形操作系統(tǒng)Windows ME,該操作系統(tǒng)是在Windows 95和Windows 98的基礎(chǔ)上開發(fā)的。 Window2000 Windows 2000有四個(gè)版本:Professional、Server、Advanced Server和Datacenter Server。所有版本的Windows 2000都有共同的一些新特征:NTFS5,新的NTFS文件系統(tǒng);EFS,允許對(duì)磁盤上的所有文件進(jìn)行加密;WDM,增強(qiáng)對(duì)硬件的支持。 WindowXP 2001年10月微軟發(fā)布了Windows XP,它包括了簡(jiǎn)化了的Windows 2000的用戶安全特性,并整合了防火墻,以用來確保長(zhǎng)期以來一直困擾微軟的安全問題。 WINDOWS 2003 2003年1月發(fā)布的Windows2003大量繼承了Windows XP的友好操作性和Windows 2000 sever的網(wǎng)絡(luò)特性,是一個(gè)同時(shí)適合個(gè)人用戶和服務(wù)器使用的操作系統(tǒng)。Windows 2003完全延續(xù)了Windows XP安裝時(shí)方便、快捷、高效的特點(diǎn),幾乎不需要多少人工參與就可以自動(dòng)完成硬件的檢測(cè)、安裝、配置等工作。雖然在名稱上,Windows 2003又延續(xù)了Windows家族的習(xí)慣命名法則,但從其提供的各種內(nèi)置服務(wù)以及重新設(shè)計(jì)的內(nèi)核程序來說,Windows 2003與Windows 2000/XP有著本質(zhì)的區(qū)別。,4,windows開發(fā)工具,常見的Windows應(yīng)用程序開發(fā)語言和工具: Microsoft Visual C++ Microsoft Visual Basic Microsoft Visual J++ Borland Delphi …,5,,windows版本及開發(fā)工具簡(jiǎn)介 進(jìn)程 線程 線程的建立與退出 線程調(diào)度 線程同步 動(dòng)態(tài)連接庫(kù) 與其它操作系統(tǒng)區(qū)別,6,進(jìn)程,進(jìn)程通常被定義為一個(gè)正在運(yùn)行的程序的實(shí)例,它由兩個(gè)部分組成: 操作系統(tǒng)用來管理進(jìn)程的內(nèi)核對(duì)象。 地址空間,它包含所有可執(zhí)行模塊或DLL模塊的代碼和數(shù)據(jù)。它還包含動(dòng)態(tài)內(nèi)存分配的空間。如線程堆棧和堆分配空間。 每個(gè)進(jìn)程至少擁有一個(gè)線程,來執(zhí)行進(jìn)程的地址空間中的代碼。,7,進(jìn)程句柄和優(yōu)先級(jí),進(jìn)程的實(shí)例句柄 加載到進(jìn)程地址空間的每個(gè)可執(zhí)行文件或DLL文件均被賦予一個(gè)獨(dú)一無二的實(shí)例句柄。對(duì)于加載資源的函數(shù)調(diào)用來說,通常都需要該句柄的值。 表示進(jìn)程句柄的兩種數(shù)據(jù)類型:HMODULE與HINSTANCE,進(jìn)程的優(yōu)先級(jí),8,創(chuàng)建進(jìn)程,創(chuàng)建進(jìn)程的幾種方式: 調(diào)用ShellExecute函數(shù) 調(diào)用WinExec函數(shù) 調(diào)用Createprocess函數(shù) 函數(shù)原型: HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile, LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd ); UINT WinExec( LPCSTR lpCmdLine, UINT uCmdShow); BOOL CreateProcess( LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation );,9,終止進(jìn)程,終止進(jìn)程運(yùn)行常用的四種方式: 主線程的進(jìn)入點(diǎn)函數(shù)返回 進(jìn)程中的一個(gè)線程調(diào)用ExitProcess函數(shù) 一個(gè)進(jìn)程中的線程調(diào)用TerminateProcess函數(shù)(應(yīng)該避免使用這種方法) 程中的所有線程自行終止運(yùn)行(這種情況非常少)。,10,終止進(jìn)程,思考調(diào)用和不調(diào)用ExitProcess函數(shù)程序輸出結(jié)果的不同: class CSample { public: CSample(){printf(“Constructor\n“);} ~CSample(){printf(“Destructor\n“);} }; CSample g_SampleObj; void main() { CSample SampleObj; ExitProcess(0); },不調(diào)用ExitProcess函數(shù)的輸出結(jié)果: Constructor Constructor Destructor Destructor 調(diào)用ExitProcess函數(shù)的輸出結(jié)果: Constructor Constructor,11,進(jìn)程間通信方式,文件映射 文件映射(Memory-Mapped Files)能使進(jìn)程把文件內(nèi)容當(dāng)作進(jìn)程地址區(qū)間一塊內(nèi)存那樣來對(duì)待。因此,進(jìn)程不必使用文件I/O操作,只需簡(jiǎn)單的指針操作就可讀取和修改文件的內(nèi)容。Win32 API允許多個(gè)進(jìn)程訪問同一文件映射對(duì)象,各個(gè)進(jìn)程在它自己的地址空間里接收內(nèi)存的指針。通過使用這些指針,不同進(jìn)程就可以讀或修改文件的內(nèi)容,實(shí)現(xiàn)了對(duì)文件中數(shù)據(jù)的共享。應(yīng)用程序有三種方法來使多個(gè)進(jìn)程共享一個(gè)文件映射對(duì)象: 繼承:第一個(gè)進(jìn)程建立文件映射對(duì)象,它的子進(jìn)程繼承該對(duì)象的句柄 ; 命名文件映射:第一個(gè)進(jìn)程在建立文件映射對(duì)象時(shí)可以給該對(duì)象指定一個(gè)名字(可與文件名不同)。第二個(gè)進(jìn)程可通過這個(gè)名字打開此文件映射對(duì)象。另外,第一個(gè)進(jìn)程也可以通過一些其它IPC機(jī)制(有名管道、郵件槽等)把名字傳給第二個(gè)進(jìn)程。 句柄復(fù)制:第一個(gè)進(jìn)程建立文件映射對(duì)象,然后通過其它IPC機(jī)制(有名管道、郵件槽等)把對(duì)象句柄傳遞給第二個(gè)進(jìn)程。第二個(gè)進(jìn)程復(fù)制該句柄就取得對(duì)該文件映射對(duì)象的訪問權(quán)限。,12,進(jìn)程間通信方式,共享內(nèi)存 Win32 API中共享內(nèi)存(Shared Memory)實(shí)際就是文件映射的一種特殊情況。進(jìn)程在創(chuàng)建文件映射對(duì)象時(shí)用0xFFFFFFFF來代替文件句柄(HANDLE),就表示了對(duì)應(yīng)的文件映射對(duì)象是從操作系統(tǒng)頁(yè)面文件訪問內(nèi)存,其它進(jìn)程打開該文件映射對(duì)象就可以訪問該內(nèi)存塊。由于共享內(nèi)存是用文件映射實(shí)現(xiàn)的,所以它也有較好的安全性,也只能運(yùn)行于同一計(jì)算機(jī)上的進(jìn)程之間。 匿名管道 匿名管道(Anonymous Pipe)是在父進(jìn)程和子進(jìn)程之間,或同一父進(jìn)程的兩個(gè)子進(jìn)程之間傳輸數(shù)據(jù)的無名字的單向管道。通常由父進(jìn)程創(chuàng)建管道,然后由要通信的子進(jìn)程繼承通道的讀端點(diǎn)句柄或?qū)懚它c(diǎn)句柄,然后實(shí)現(xiàn)通信。父進(jìn)程還可以建立兩個(gè)或更多個(gè)繼承匿名管道讀和寫句柄的子進(jìn)程。這些子進(jìn)程可以使用管道直接通信,不需要通過父進(jìn)程。 匿名管道是單機(jī)上實(shí)現(xiàn)子進(jìn)程標(biāo)準(zhǔn)I/O重定向的有效方法,它不能在網(wǎng)上使用,也不能用于兩個(gè)不相關(guān)的進(jìn)程之間。,13,進(jìn)程間通信方式,命名管道 命名管道(Named Pipe)是服務(wù)器進(jìn)程和一個(gè)或多個(gè)客戶進(jìn)程之間通信的單向或雙向管道。不同于匿名管道的是命名管道可以在不相關(guān)的進(jìn)程之間和不同計(jì)算機(jī)之間使用,服務(wù)器建立命名管道時(shí)給它指定一個(gè)名字,任何進(jìn)程都可以通過該名字打開管道的另一端,根據(jù)給定的權(quán)限和服務(wù)器進(jìn)程通信。 命名管道提供了相對(duì)簡(jiǎn)單的編程接口,使通過網(wǎng)絡(luò)傳輸數(shù)據(jù)并不比同一計(jì)算機(jī)上兩進(jìn)程之間通信更困難,但它不適合同時(shí)和多個(gè)進(jìn)程通信。 郵件槽 郵件槽(Mailslots)提供進(jìn)程間單向通信能力,任何進(jìn)程都能建立郵件槽成為郵件槽服務(wù)器。其它進(jìn)程,稱為郵件槽客戶,可以通過郵件槽的名字給郵件槽服務(wù)器進(jìn)程發(fā)送消息。進(jìn)來的消息一直放在郵件槽中,直到服務(wù)器進(jìn)程讀取它為止。一個(gè)進(jìn)程既可以是郵件槽服務(wù)器也可以是郵件槽客戶,因此可建立多個(gè)郵件槽實(shí)現(xiàn)進(jìn)程間的雙向通信。,14,進(jìn)程間通信方式,剪貼板 剪貼板(Clipped Board)實(shí)質(zhì)是Win32 API中一組用來傳輸數(shù)據(jù)的函數(shù)和消息,為Windows應(yīng)用程序之間進(jìn)行數(shù)據(jù)共享提供了一個(gè)中介,Windows已建立的剪切(復(fù)制)-粘貼的機(jī)制為不同應(yīng)用程序之間共享不同格式數(shù)據(jù)提供了一條捷徑。當(dāng)用戶在應(yīng)用程序中執(zhí)行剪切或復(fù)制操作時(shí),應(yīng)用程序把選取的數(shù)據(jù)用一種或多種格式放在剪貼板上。然后任何其它應(yīng)用程序都可以從剪貼板上拾取數(shù)據(jù),從給定格式中選擇適合自己的格式。 動(dòng)態(tài)數(shù)據(jù)交換 動(dòng)態(tài)數(shù)據(jù)交換(DDE)是使用共享內(nèi)存在應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換的一種進(jìn)程間通信形式。應(yīng)用程序可以使用DDE進(jìn)行一次性數(shù)據(jù)傳輸,也可以當(dāng)出現(xiàn)新數(shù)據(jù)時(shí),通過發(fā)送更新值在應(yīng)用程序間動(dòng)態(tài)交換數(shù)據(jù)。 對(duì)象連接與嵌入 應(yīng)用程序利用對(duì)象連接與嵌入(OLE)技術(shù)管理復(fù)合文檔(由多種數(shù)據(jù)格式組成的文檔),OLE提供使某應(yīng)用程序更容易調(diào)用其它應(yīng)用程序進(jìn)行數(shù)據(jù)編輯的服務(wù)。,15,進(jìn)程間通信方式,動(dòng)態(tài)連接庫(kù) Win32動(dòng)態(tài)連接庫(kù)(DLL)中的全局?jǐn)?shù)據(jù)可以被調(diào)用DLL的所有進(jìn)程共享,這就又給進(jìn)程間通信開辟了一條新的途徑,當(dāng)然訪問時(shí)要注意同步問題。 遠(yuǎn)程過程調(diào)用 Win32 API提供的遠(yuǎn)程過程調(diào)用(RPC)使應(yīng)用程序可以使用遠(yuǎn)程調(diào)用函數(shù),這使在網(wǎng)絡(luò)上用RPC進(jìn)行進(jìn)程通信就像函數(shù)調(diào)用那樣簡(jiǎn)單。RPC既可以在單機(jī)不同進(jìn)程間使用也可以在網(wǎng)絡(luò)中使用。 NetBios函數(shù) Win32 API提供NetBios函數(shù)用于處理低級(jí)網(wǎng)絡(luò)控制,這主要是為IBM NetBios系統(tǒng)編寫與Windows的接口。除非那些有特殊低級(jí)網(wǎng)絡(luò)功能要求的應(yīng)用程序,其它應(yīng)用程序最好不要使用NetBios函數(shù)來進(jìn)行進(jìn)程間通信。,16,進(jìn)程間通信方式,Sockets Windows Sockets規(guī)范是一套Windows下的網(wǎng)絡(luò)編程接口。它不僅支持TCP/IP協(xié)議,而且還支持其它協(xié)議(如IPX) ,使程序員可以充分利用Windows的消息機(jī)制進(jìn)行編程。 WM_COPYDATA消息 WM_COPYDATA是一種非常強(qiáng)大的消息。當(dāng)一個(gè)應(yīng)用向另一個(gè)應(yīng)用傳送數(shù)據(jù)時(shí),發(fā)送方只需使用調(diào)用SendMessage函數(shù),參數(shù)是目的窗口的句柄、傳遞數(shù)據(jù)的起始地址、WM_COPYDATA消息。接收方只需像處理其它消息那樣處理WM_COPY DATA消息,這樣收發(fā)雙方就實(shí)現(xiàn)了數(shù)據(jù)共享。,17,常用的進(jìn)程相關(guān)函數(shù),GetExitCodeProcess 檢索進(jìn)程退出碼 GetGuiResources 確定有多少用戶或圖形設(shè)備接口(GUI)對(duì)象在使用中 SetPriorityClass 設(shè)置進(jìn)程的基準(zhǔn)優(yōu)先級(jí) GetPriorityClass 獲得進(jìn)程的基準(zhǔn)優(yōu)先級(jí) SetProcessAffinityMask 確定進(jìn)程選擇那個(gè)CPU GetProcessAffinityMask 設(shè)置為進(jìn)程所選擇的CPU SetProcessPriorityBoost 允許或禁止來自動(dòng)態(tài)地改變進(jìn)程優(yōu)先級(jí)的Windows GetProcessPriorityBoost 讀取優(yōu)先級(jí)增加狀態(tài) SetProcessShutDownParameters 在系統(tǒng)關(guān)閉過程中 GetProcessShutDownParameters 讀取關(guān)閉參數(shù) SetProcessWorkingSetSize 設(shè)置進(jìn)程占用的最小和最大物理存儲(chǔ)器 GetProcessWorkingSetSize 讀取工作區(qū) TerminateProcess 緩和地終止進(jìn)程 ExitProcess 突然終止進(jìn)程 GetProcessVersion 確定進(jìn)程期望的Windows版本 GetProcessTimes 獲取進(jìn)程的CPU占用率 GetStartUpInfo 獲取作為傳送到CreateProcess的啟動(dòng)結(jié)構(gòu),18,,windows版本及開發(fā)工具簡(jiǎn)介 進(jìn)程 線程 線程的建立與退出 線程調(diào)度 線程同步 動(dòng)態(tài)連接庫(kù) 與其它操作系統(tǒng)區(qū)別,19,線程,線程是由兩個(gè)部分組成的: 線程的內(nèi)核對(duì)象,操作系統(tǒng)用它來對(duì)線程實(shí)施管理。內(nèi)核對(duì)象也是系統(tǒng)用來存放線程統(tǒng)計(jì)信息的地方。 線程堆棧,它用于維護(hù)線程在執(zhí)行代碼時(shí)需要的所有函數(shù)參數(shù)和局部變量。,20,線程的創(chuàng)建,創(chuàng)建線程的三種方法: 激活一個(gè)新進(jìn)程 調(diào)用Win32 API函數(shù)CreateThread 調(diào)用C運(yùn)行庫(kù)函數(shù)_beginthread/_beginthreadex 函數(shù)原型: HANDLE CreateThread ( SEC_ATTRS SecurityAttributes, ULONG StackSize, SEC_THREAD_START StartFunction, PVOID ThreadParameter, ULONG CreationFlags, PULONG ThreadId ); uintptr_t _beginthread( void( __cdecl *start_address )( void * ), unsigned stack_size, void *arglist ); uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( __stdcall *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr );,21,線程的終止,若要終止線程的運(yùn)行,可以使用下面的方法: 線程函數(shù)返回(最好使用這種方法)。 通過調(diào)用ExitThread(或_endthread/_endthreadex)函數(shù),線程將自行撤消(最好不要使用這種方法)。 同一個(gè)進(jìn)程或另一個(gè)進(jìn)程中的線程調(diào)用TerminateThread函數(shù)(應(yīng)該避免使用這種方法)。 包含線程的進(jìn)程終止運(yùn)行(應(yīng)該避免使用這種方法)。,22,線程的終止,線程終止運(yùn)行時(shí)發(fā)生的操作: 線程擁有的所有用戶對(duì)象均被釋放。在Windows中,大多數(shù)對(duì)象是由包含創(chuàng)建這些對(duì)象的線程的進(jìn)程擁有的。但是一個(gè)線程擁有兩個(gè)用戶對(duì)象,即窗口和掛鉤。當(dāng)線程終止運(yùn)行時(shí),系統(tǒng)會(huì)自動(dòng)撤消任何窗口,并且卸載線程創(chuàng)建的或安裝的任何掛鉤。其他對(duì)象只有在擁有線程的進(jìn)程終止運(yùn)行時(shí)才被撤消。 線程的退出代碼從STILL_ACTIVE改為傳遞給ExitThread或TerminateThread的代碼。 線程內(nèi)核對(duì)象的狀態(tài)變?yōu)橐淹ㄖ?如果線程是進(jìn)程中最后一個(gè)活動(dòng)線程,系統(tǒng)也將進(jìn)程視為已經(jīng)終止運(yùn)行。 線程內(nèi)核對(duì)象的使用計(jì)數(shù)遞減1。,23,線程的優(yōu)先級(jí),線程的優(yōu)先級(jí) 獲取線程的優(yōu)先級(jí) int GetThreadPriority( HANDLE hThread); 設(shè)置線程的優(yōu)先級(jí) BOOL SetThreadPriority( HANDLE hThread, int nPriority);,24,線程的優(yōu)先級(jí),進(jìn)程優(yōu)先級(jí)類和線程相對(duì)優(yōu)先級(jí)的映射,25,線程調(diào)度,線程調(diào)度的方法: 暫停和恢復(fù)線程的運(yùn)行 調(diào)用SuspendThread函數(shù)暫停一個(gè)線程的執(zhí)行 DWORD SuspendThread( HANDLE hThread); 調(diào)用ResumeThread函數(shù)恢復(fù)一個(gè)線程的執(zhí)行 DWORD ResumeThread( HANDLE hThread); 睡眠方式 調(diào)用Sleep函數(shù)告訴系統(tǒng)本線程不想在某個(gè)時(shí)間段被調(diào)度 VOID Sleep( DWORD dwMilliseconds); 轉(zhuǎn)換到另一個(gè)線程 調(diào)用SwitchToThread的函數(shù)使另一個(gè)線程得到調(diào)度 BOOL SwitchToThread(VOID);,26,線程同步,線程可以使自己進(jìn)入等待狀態(tài),直到一個(gè)對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)。 可處于已通知狀態(tài)或未通知狀態(tài)的內(nèi)核對(duì)象 : 進(jìn)程 文件修改通知 線程 事件 作業(yè) 可等待定時(shí)器 文件 信標(biāo) 控制臺(tái)輸入 互斥對(duì)象,27,線程同步,常用等待函數(shù): 等待一個(gè)內(nèi)核對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)函數(shù): DWORD WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds) 等待多個(gè)內(nèi)核對(duì)象變?yōu)橐淹ㄖ獱顟B(tài)函數(shù): DWORD WaitForMultipleObjects(DWORD nCount, CONST HANDLE *lpHandles, BOOL bWaitAll, DWORD dwMilliseconds);,28,事件內(nèi)核對(duì)象,創(chuàng)建事件內(nèi)核對(duì)象: HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManualReset, BOOL bInitialState, LPCTSTR lpName); 打開事件內(nèi)核對(duì)象: HANDLE OpenEvent( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName); 將事件改為已通知狀態(tài): BOOL SetEvent( HANDLE hEvent); 將事件改為未通知狀態(tài): BOOL ResetEvent( HANDLE hEvent);,29,示例,30,人工重置事件,31,自動(dòng)重置事件,32,信標(biāo)內(nèi)核對(duì)象,信標(biāo)內(nèi)核對(duì)象的創(chuàng)建 HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttribute, LONG lInitialCount, LONG lMaximumCount, LPCTSTR lpName); 打開信標(biāo)內(nèi)核對(duì)象 HANDLE OpenSemaphore( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName); 釋放信標(biāo)資源: BOOL ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, LPLONG lpPreviousCount);,33,,信標(biāo)內(nèi)核對(duì)象使用示例,34,互斥對(duì)象內(nèi)核對(duì)象,互斥對(duì)象的創(chuàng)建 HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); 打開互斥對(duì)象 HANDLE OpenMutex( DWORD dwDesiredAccess, BOOL bInheritHandle, LPCTSTR lpName); 釋放互斥對(duì)象 BOOL ReleaseMutex( HANDLE hMutex);,35,內(nèi)核對(duì)象與線程同步之間的相互關(guān)系,36,,windows版本及開發(fā)工具簡(jiǎn)介 進(jìn)程 線程 線程的建立與退出 線程調(diào)度 線程同步 動(dòng)態(tài)連接庫(kù) 與其它操作系統(tǒng)區(qū)別,37,庫(kù),什么是庫(kù)? 庫(kù)的分類 靜態(tài)鏈接庫(kù) 動(dòng)態(tài)鏈接庫(kù),38,動(dòng)態(tài)連接庫(kù),為什么使用DLL 擴(kuò)展了應(yīng)用程序的特性。 可以用許多種編程語言來編寫。 簡(jiǎn)化了軟件項(xiàng)目的管理 有助于節(jié)省內(nèi)存 有助于資源的共享 有助于應(yīng)用程序的本地化 有助于解決平臺(tái)差異 可以用于一些特殊的目的,39,動(dòng)態(tài)連接庫(kù),動(dòng)態(tài)鏈接庫(kù)的入口/出口點(diǎn),40,動(dòng)態(tài)鏈接庫(kù),導(dǎo)出和導(dǎo)入DLL函數(shù)和數(shù)據(jù) 在庫(kù)的.def文件的EXPROTS部分中填寫出導(dǎo)出項(xiàng)目的名稱 使用工具相關(guān)的方法,比如Visual C++所使用的__declspec(dllexport)關(guān)鍵字。,41,動(dòng)態(tài)鏈接庫(kù),動(dòng)態(tài)鏈接庫(kù)的調(diào)用 隱式調(diào)用 讓應(yīng)用程序的源代碼只引用DLL中包含的符號(hào)。這樣,當(dāng)應(yīng)用程序啟動(dòng)運(yùn)行時(shí),加載程序就能夠隱含加載(和鏈接)需要的DLL。 顯式調(diào)用 在應(yīng)用程序運(yùn)行時(shí)讓應(yīng)用程序顯式加載需要的DLL并且顯式鏈接到需要的輸出符號(hào)。 顯式加載: HMODULE LoadLibrary( LPCTSTR lpFileName); 顯式卸載: BOOL FreeLibrary( HMODULE hModule); 顯式鏈接到一個(gè)輸出符號(hào): FARPROC GetProcAddress( HMODULE hModule, LPCSTR lpProcName);,42,線程調(diào)用LoadLibrary時(shí)執(zhí)行的操作步驟,43,線程調(diào)用FreeLibrary時(shí)執(zhí)行的操作步驟,44,常用的線程相關(guān)函數(shù),AttachThreadInput 選用線程的處理另外的線程允許的輸入,其中,要設(shè)置的權(quán)能集中在每一個(gè)另外的窗口和共享輸入狀態(tài) CreateRemoteThread 在另一個(gè)進(jìn)程中,創(chuàng)建線程 CreateThread 在當(dāng)前進(jìn)程中創(chuàng)建線程 ExitThread 退出當(dāng)前線程 TerminateThread 沒有適當(dāng)?shù)厍宄闆r下,終止線程 GetCurrentTherad 得到當(dāng)前線程句柄 GetCurrentThreadId 得到當(dāng)前線程ID GetExitCodeThread 得到線程的退出代碼 SetTheradPriority 設(shè)置線程優(yōu)先級(jí) GetThreadPriority 讀取線程優(yōu)先級(jí) SetThreadPriorityBoost 使能或不使該線程的動(dòng)態(tài)優(yōu)先級(jí)增加 GetThreadPriorityBoost 讀取該線程動(dòng)態(tài)優(yōu)先級(jí)增加的狀態(tài) GetThreadTimes 確定被創(chuàng)建、破壞的線程以及使用了多少進(jìn)程時(shí)間 SuspendThread 掛起線程 ResumeThread 恢復(fù)線程(每個(gè)命令必須調(diào)用SuspendThread一次) SetThreadAffinityMask 確定線程在那個(gè)進(jìn)程中運(yùn)行 SetThreadIdealProcessor 設(shè)置線程所選擇運(yùn)行的處理機(jī) SwitchToThread 使處理機(jī)放棄另外的線程(沒有選擇哪個(gè)線程),45,,windows版本及開發(fā)工具簡(jiǎn)介 進(jìn)程 線程 線程的建立與退出 線程調(diào)度 線程同步 動(dòng)態(tài)連接庫(kù) 與其它操作系統(tǒng)區(qū)別,46,,目前常見操作系統(tǒng)有 LINUX UNIX vxworks windows ……,47,嵌入式系統(tǒng),嵌入式系統(tǒng) 嵌入式系統(tǒng)是以嵌入式計(jì)算機(jī)為技術(shù)核心,面向用戶、面向產(chǎn)品、面向應(yīng)用,軟硬件可裁減的;適用于對(duì)功能、可靠性、成本\體積、功耗等綜合性能有嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)。 嵌入式系統(tǒng)的特點(diǎn): 高可靠性 實(shí)時(shí)性 和具體應(yīng)用有機(jī)地結(jié)合在一起 軟件代碼要求高質(zhì)量、高可靠性 一般都固化在只讀存儲(chǔ)器中或間存中,48,嵌入式操作系統(tǒng),嵌入式操作系統(tǒng) 嵌入式操作系統(tǒng)EOS(Embedded OperatingSystem)是一種用途廣泛的系統(tǒng)軟件,過去它主要應(yīng)用于工業(yè)控制和國(guó)防系統(tǒng)領(lǐng)域。EOS負(fù)責(zé)嵌人系統(tǒng)的全部軟、硬件資源的分配、調(diào)度工作,控制協(xié)調(diào)并發(fā)活動(dòng);它必須體現(xiàn)其所在系統(tǒng)的特征,能夠通過裝卸某些模塊來達(dá)到系統(tǒng)所要求的功能。 嵌入式操作系統(tǒng)特有功能 可裝卸性 強(qiáng)實(shí)時(shí)性 統(tǒng)一的接口 操作方便、簡(jiǎn)單、提供友好的圖形GUI 提供強(qiáng)大的網(wǎng)絡(luò)功能 強(qiáng)穩(wěn)定性,弱交互性 固化代碼 更好的硬件適應(yīng)性,49,常用嵌入式操作系統(tǒng),常用嵌入式操作系統(tǒng) PALM OS Windows CE Linux VxWorks,50,常用嵌入式操作系統(tǒng),PALM OS 優(yōu)點(diǎn) 操作系統(tǒng)的節(jié)能功能 合理的內(nèi)存管理 數(shù)據(jù)是以數(shù)據(jù)庫(kù)(database)的格式來存儲(chǔ)的 外圍硬件十分豐富,51,常用嵌入式操作系統(tǒng),Windows CE優(yōu)點(diǎn) 具有靈活的電源管理功能,包括睡眠/喚醒摸式 高效率的操作系統(tǒng)特性 擁有良好的通信能力 支持嵌套中斷 更好的線程響應(yīng)能力 擁有256個(gè)優(yōu)先級(jí)別 支持近1500個(gè)Win32 API,52,常用嵌入式操作系統(tǒng),Linux優(yōu)點(diǎn) 精簡(jiǎn)的內(nèi)核,性能高、穩(wěn)定,多任務(wù) 適用于不同的CPU,支持多種體系結(jié)構(gòu) 能夠提供完善的嵌人式GUI以及嵌入式X.Wifld。WS。 提供完整的開發(fā)工具和SDK,同時(shí)提供PC上的開發(fā)版本 用戶可定制,可提供圖形化的定制和配置工具 常用嵌入式芯片的驅(qū)動(dòng)集,支持大量的周邊硬件設(shè)備,驅(qū)動(dòng)豐富 針對(duì)嵌人式的存儲(chǔ)方案,提供實(shí)時(shí)版本和完善的嵌入式解決方案 完善的中文支持,強(qiáng)大的技術(shù)支持,完整的文檔 開放源碼,豐富的軟件資源,廣泛的軟件開發(fā)者的支持,價(jià)格低廉,結(jié)構(gòu)靈活,適用面廣,53,常用嵌入式操作系統(tǒng),Linux OS與 Windows CE的比較 Linux是開放源代碼的,不存在黑箱技術(shù),遍布全球的眾多Linux愛好者都是Linux開發(fā)者的強(qiáng)大技術(shù)支持者;而Windows CE是非開放性O(shè)S;使第三方很難實(shí)現(xiàn)產(chǎn)品的定制。 Linux的源代碼隨處可得,注釋豐富,文檔齊全,易干解決各種問題。 Linux的內(nèi)核小、效率高;而 Windows CE在這方面是笨拙的,占用過多的RAM,應(yīng)用程序龐大。 Linux是開放源代碼的OS,在價(jià)格上極具競(jìng)爭(zhēng)力,適合中國(guó)國(guó)情。Windows CE的版權(quán)費(fèi)用是廠家不得不考慮的因素。 Linux不僅支持X86芯片,還是一個(gè)跨平臺(tái)的系統(tǒng)。到目前為止,它可以支持20~30種CPU,很多 CPU(包括家電業(yè)的芯片)廠商都開始做Linux的平臺(tái)移植工作,而且移植的速度遠(yuǎn)遠(yuǎn)超過Java的開發(fā)環(huán)境。如果今天采用Linux環(huán)境開發(fā)產(chǎn)品,那么將來更換CPU時(shí)就不會(huì)遇到更換平臺(tái)的困擾。 Linux內(nèi)核的結(jié)構(gòu)在網(wǎng)絡(luò)方面是非常完整的,它提供了對(duì)包括十兆位、百兆位及千兆位的以太網(wǎng),還有無線網(wǎng)絡(luò)、Token ring(令牌環(huán))和光纖甚至衛(wèi)星的支持 Linux在內(nèi)核結(jié)構(gòu)的設(shè)計(jì)中考慮適應(yīng)系統(tǒng)的可裁減性的要求,windows CE在內(nèi)核結(jié)構(gòu)的設(shè)計(jì)中并未考慮適應(yīng)系統(tǒng)的高度可裁減性的要求,54,常用嵌入式操作系統(tǒng),VxWorks優(yōu)點(diǎn) 支持廣泛的工業(yè)標(biāo)準(zhǔn) 具備一個(gè)高效的微內(nèi)核 具有可伸縮性,55,,結(jié)束,56,- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
200 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 應(yīng)用 軟件工程師 崗位培訓(xùn) 課程 常用 操作系統(tǒng) ppt 課件
鏈接地址:http://www.3dchina-expo.com/p-846426.html