版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、科研和工程中的編程概述第1頁,共19頁。課程任務v掌握編程目的和意義v了解代碼編寫和優(yōu)化的技巧v掌握科研工程的問題建模方法和步驟v掌握面向空間的設(shè)計方法v掌握面向時間的設(shè)計方法v實踐各種設(shè)計方法第2頁,共19頁。編程目的和意義v目的:用計算機程序完成科研和工程中的實際問題。v意義:和計算機對話,以看到需要的計算結(jié)果。v主要平臺:通用編程:windows Linux UNIX各版本 macOS其他:各種嵌入式操作系統(tǒng)第3頁,共19頁。代碼的主要目標形式v桌面程序(科研和工程問題解決的主要方式)windowsLinux界面程序(UI)一般進程調(diào)用界面庫控制臺程序(console) 一般進程服務程序
2、(service)守護進程第4頁,共19頁。代碼的主要目標形式v腳本程序以一個特定的桌面程序為宿主平臺,一般解釋執(zhí)行,主要有:(1)web應用程序(服務器端腳本,客戶端在瀏覽器中運行的各種腳本程序)(2)辦公軟件(word, excel之VBA,SQLServer中存儲過程等)(3)科學計算程序(matlab, mathematic, mathCAD, AutoCAD, 3DMax, Photoshop等)(4)游戲動畫(3D游戲引擎下的如lua等腳本)第5頁,共19頁。代碼的主要目標形式v程序代碼最終生成模塊(Module),在C#中稱為裝配件(Assembly)v進程(Process)是操
3、作系統(tǒng)多任務并發(fā)執(zhí)行的一個基本單位,在進程下還可以創(chuàng)建線程(Thread),作為多任務并發(fā)執(zhí)行的補充。Windows以線程為基本調(diào)度單位,Linux以進程為基本調(diào)度單位。v操作系統(tǒng)創(chuàng)建一個進程時,會裝入所需模塊,并執(zhí)行其中的代碼。v后續(xù)課程操作系統(tǒng)會詳述。第6頁,共19頁。代碼的主要目標形式v進程中模塊的分類WindowsLinux可執(zhí)行模塊exe (自身代碼引用的地址全部已確定)可執(zhí)行模塊(同左)動態(tài)鏈接模塊DLL(自身代碼引用地址為浮動地址,必要時需要重定位)共享庫模塊SO.X(同左)驅(qū)動程序模塊SYS或其他,運行在核心態(tài)/用戶態(tài)驅(qū)動程序模塊,運行在核心態(tài)/用戶態(tài)第7頁,共19頁。代碼的主
4、要目標形式v進程擁有自己的獨立編址的內(nèi)存空間(稱為虛擬內(nèi)存空間),在32位操作系統(tǒng)下最大達4G,在64位操作系統(tǒng)下更大。進程的虛擬內(nèi)存空間按多個固定大小的內(nèi)存頁面來組織,分為可交換頁和非可交換頁兩種,模塊的代碼和數(shù)據(jù)就是映射到這些頁面上,由操作系統(tǒng)根據(jù)需要調(diào)入物理內(nèi)存來執(zhí)行。操作系統(tǒng)直接把進程空間的高地址部分映射到已經(jīng)裝載了驅(qū)動模塊的那些系統(tǒng)的內(nèi)存頁面上。第8頁,共19頁。代碼的主要目標形式v操作系統(tǒng)根據(jù)用戶的要求為一個可執(zhí)行模塊創(chuàng)建一個進程,同時根據(jù)可執(zhí)行模塊文件內(nèi)的信息裝載它所依賴的動態(tài)模塊(同樣動態(tài)模塊要是依賴其它動態(tài)模塊就遞歸地依次裝入)。當然也可以在程序內(nèi)用API函數(shù)動態(tài)地裝載模塊。
5、動態(tài)模塊內(nèi)的函數(shù)地址被重新定位,使得其他各種類型的模塊能調(diào)用它們。具體動態(tài)鏈接的過程可看參考書Linker and loader。第9頁,共19頁。代碼的主要目標形式v模塊的組成(1)機器代碼(2)已初始化全局數(shù)據(jù)(如全局變量)(3)未初始化全局數(shù)據(jù)(如方法/函數(shù)內(nèi)的靜態(tài)局部變量)(4)資源(windows下DLL內(nèi),可看作特殊全局數(shù)據(jù))(5)模塊信息(各種信息及導入/導出函數(shù)表)第10頁,共19頁。代碼的主要目標形式v一個進程內(nèi)含有一個可執(zhí)行模塊(指含主入口的exe模塊,也會有其他exe模塊被動態(tài)裝載,此時都算作動態(tài)模塊)和多個動態(tài)模塊(不討論驅(qū)動模塊)。v動態(tài)鏈接庫可以做到機器代碼在不同的
6、進程間共享,而全局性數(shù)據(jù)則為每個進程復制一份獨立的拷貝 (有特殊設(shè)置可以讓全局性數(shù)據(jù)在不同的進程間共享,但一般不這樣作,而用共享內(nèi)存方法來取代),所以動態(tài)庫是二進制級別的代碼復用方法。vC+程序(類、函數(shù)等)則是源代碼級別的代碼復用方法。顯然源代碼若修改了整個軟件要重新編譯*。第11頁,共19頁。代碼的主要目標形式v操作系統(tǒng)如果裝載了一個可執(zhí)行模塊的多個實例,即多個進程都裝載了同一個exe模塊和其依賴的動態(tài)模塊,那么該可執(zhí)行模塊的機器代碼頁同樣可以被多個進程共享,全局性數(shù)據(jù)自然是每個進程有一份自己的拷貝。v編寫大型工程/算法軟件需要進行模塊的分劃和設(shè)計。第12頁,共19頁。編寫代碼的一個考慮v
7、全局變量、類的靜態(tài)成員變量、方法/函數(shù)內(nèi)的靜態(tài)局部變量(線程局部存儲變量除外)都會在模塊內(nèi)有自己唯一的一個地址。如果源代碼有這樣的變量,并在生成exe模塊或者多個dll模塊時被使用,那么進程內(nèi)將有多份這樣的全局性變量。v如果算法設(shè)計中需要的一個全局性的變量是相對進程來說是唯一的,就不能把含有該全局性的變量的代碼做成源代碼級別的共享的庫,而是做在一個單獨的動態(tài)鏈接庫內(nèi),再通過一系列函數(shù)來操作該變量。第13頁,共19頁。編寫代碼的一個考慮v由于一個進程可以創(chuàng)建多個線程,而這些線程是可以并行訪問同一進程空間內(nèi)的數(shù)據(jù)的,因此要注意對可能被多個線程訪問和修改的數(shù)據(jù)進行同步保護。v前述的全局性的變量要特別
8、注意進行多線程保護,特別是方法/函數(shù)內(nèi)的靜態(tài)局部變量,它是在第一次被調(diào)用時初始化的,如果有多個線程同時調(diào)用該方法/函數(shù)而不注意保護,可能造成該靜態(tài)局部變量被多次初始化。(該方法/函數(shù)是不可重入的)第14頁,共19頁。編寫代碼的一個考慮vCRT庫中隱含有全局變量。采用動態(tài)鏈接沒有問題,但采用靜態(tài)鏈接將使每個模塊都有一份這樣的全局變量。如new,malloc等動態(tài)內(nèi)存平分配函數(shù)會使用隱含的全局變量,在一個模塊中分配內(nèi)存,在另一個模塊中釋放這塊內(nèi)存,會因為使用不同的全局變量標示內(nèi)部數(shù)據(jù)結(jié)構(gòu)而導致內(nèi)存錯誤。所以編寫代碼時要在同一個模塊內(nèi)提供內(nèi)存的分配和釋放成對出現(xiàn)的函數(shù)。第15頁,共19頁。編寫代碼的
9、一個考慮v所以進行算法設(shè)計時盡量少用全局變量,包括線程局部存儲TLS全局變量(每個線程有一份變量的拷貝),盡量使用類的成員變量來描述問題中的屬性、狀態(tài)等。即使必須要全局性的變量,也要控制在一定范圍內(nèi),考慮進程范圍、線程范圍、模塊范圍的內(nèi)存占用情況和使用情況,要不要同步保護等。第16頁,共19頁。例子v一個大型多人RPG聯(lián)網(wǎng)對戰(zhàn)游戲中,記錄當前的玩家總數(shù)目、每個玩家的ID是一個全局性的變量。對于服務器端的程序,該變量對于進程是唯一的。因此適合編寫一個動態(tài)庫模塊,含此變量,并提供引出函數(shù)來操縱該變量。該程序的可執(zhí)行模塊和其他動態(tài)模塊可通過調(diào)用引出函數(shù)來訪問/修改此變量。v也可以設(shè)計為單件模式 (Singleton),參看設(shè)計模式。第17頁,共19頁。上機v編寫一個解決方案,含有兩個工程,一個是動態(tài)庫模塊,含有全局性的玩家表,假設(shè)每個玩家的ID長度不超過8個字符,并提供添加、刪除、獲得總數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 施工安全協(xié)議書模板
- 2025年度棗樹種植與現(xiàn)代農(nóng)業(yè)園區(qū)建設(shè)合同4篇
- 行業(yè)間對于展會安全管理知識的普及推廣
- 網(wǎng)絡(luò)安全背景下學生行為規(guī)范的強化措施
- 科技助力孩子藝術(shù)成長現(xiàn)代教學方法與實踐
- 二零二五年度車輛擔保質(zhì)押投資合作合同4篇
- 2025版施工安全協(xié)議書:裝配式建筑安全協(xié)議范本3篇
- 維護策略在實驗室設(shè)備長期運行中的重要性
- 二零二五年度車牌租賃與車輛租賃信用評估合同4篇
- 巖棉防火技術(shù)在現(xiàn)代建筑中的應用研究
- 人教版數(shù)學四年級下冊核心素養(yǎng)目標全冊教學設(shè)計
- JJG 692-2010無創(chuàng)自動測量血壓計
- 三年級下冊口算天天100題(A4打印版)
- 徐州市2023-2024學年八年級上學期期末地理試卷(含答案解析)
- CSSD職業(yè)暴露與防護
- 飲料對人體的危害1
- 數(shù)字經(jīng)濟學導論-全套課件
- 移動商務內(nèi)容運營(吳洪貴)項目三 移動商務運營內(nèi)容的策劃和生產(chǎn)
- 中考記敘文閱讀
- 產(chǎn)科溝通模板
- 2023-2024學年四川省成都市小學數(shù)學一年級下冊期末提升試題
評論
0/150
提交評論