版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章操作系統(tǒng)及應(yīng)用程序開發(fā)2024西安交通大學(xué)13.1操作系統(tǒng)概述3.1.1操作系統(tǒng)的概念操作系統(tǒng)是為管理計算機中的硬件和軟件資源,合理組織計算機的工作流程,為用戶提供功能豐富、使用方便的運行環(huán)境的一種系統(tǒng)軟件。操作系統(tǒng)的功能包括五大模塊:進程管理、存儲管理、文件管理、設(shè)備管理和用戶接口。西安交通大學(xué)23.1.2操作系統(tǒng)的類型單道批處理方式多道程序系統(tǒng)分時操作系統(tǒng)實時操作系統(tǒng)微機操作系統(tǒng)分布式操作系統(tǒng)嵌入式操作系統(tǒng)西安交通大學(xué)33.1.3常見操作系統(tǒng)簡介1.Windows操作系統(tǒng)WindowsNT(Newtechnology)系列操作系統(tǒng)的體系結(jié)構(gòu)西安交通大學(xué)4Windows編程的一些概念句柄消息事件MFC(MicrosoftFoundationClass,微軟基礎(chǔ)類庫)tkinter、pyQT西安交通大學(xué)52.Ubuntu3.Android西安交通大學(xué)63.2操作系統(tǒng)的資源管理3.2.1進程管理1.程序的執(zhí)行方式(1)順序執(zhí)行順序性封閉性可再現(xiàn)性(2)并發(fā)執(zhí)行間斷(異步)性失去封閉性失去可再現(xiàn)性西安交通大學(xué)72.進程一個進程就是程序的一次執(zhí)行,是操作系統(tǒng)進行資源調(diào)度和分配的獨立單位。(1)進程的特點動態(tài)性并發(fā)性獨立性異步性結(jié)構(gòu)性制約性(2)進程的狀態(tài)就緒狀態(tài)運行狀態(tài)等待狀態(tài)西安交通大學(xué)8(3)進程的結(jié)構(gòu)1)進程描述信息2)進程調(diào)度信息3)進程控制信息4)處理機狀態(tài)信息(4)進程的調(diào)度1)先來先服務(wù)2)最短作業(yè)優(yōu)先3)時間片輪轉(zhuǎn)法4)多級隊列5)優(yōu)先級算法西安交通大學(xué)93.進程與程序區(qū)別進程是動態(tài)的,程序是靜態(tài)的。進程是暫時的,程序是永久的。進程與程序的組成不同。進程與程序可以相互轉(zhuǎn)化。西安交通大學(xué)103.2.2存儲管理1.存儲管理的主要任務(wù)(1)內(nèi)存空間的分配與釋放(2)內(nèi)存空間的地址變換(3)內(nèi)存空間的分區(qū)保護(4)內(nèi)存空間的擴充2.存儲管理的主要方法(1)單一連續(xù)存儲管理(2)分區(qū)式存儲管理(3)頁式存儲管理(4)段式存儲管理(5)虛擬存儲管理西安交通大學(xué)113.Windows的存儲管理請求調(diào)頁簇式的頁式虛存管理Windows為每個進程分配的是虛擬內(nèi)存空間全局內(nèi)存局部內(nèi)存在Windows操作系統(tǒng)下,存儲器被保護起來,程序和用戶無法直接訪問西安交通大學(xué)123.2.3設(shè)備管理1.設(shè)備的分類按使用方式:獨占設(shè)備和共享設(shè)備;按處理速度:慢速設(shè)備和快速設(shè)備;按數(shù)據(jù)組織和存取方式:字符設(shè)備和塊設(shè)備;按通信方式:串行設(shè)備和并行設(shè)備;按應(yīng)用范圍:通用設(shè)備和專用設(shè)備;按隸屬關(guān)系:系統(tǒng)設(shè)備和用戶設(shè)備;按實體程序:真實設(shè)備和虛擬設(shè)備西安交通大學(xué)132.設(shè)備的輸入/輸出(Input/Output,I/O)控制方式1)程序直接控制方式。2)中斷控制方式。中斷中斷服務(wù)程序3)DMA(directmemoryaccess,直接存儲器訪問)控制方式4)通道控制方式。西安交通大學(xué)143.設(shè)備管理的方式設(shè)備分配原則是根據(jù)設(shè)備本身的特性、用戶要求和系統(tǒng)配置情況決定的??偟脑瓌t是:高效、安全、與物理設(shè)備無關(guān)。設(shè)備分配原則的因素1)I/O設(shè)備的固有屬性2)I/O設(shè)備分配算3)設(shè)備分配中的安全性4)與設(shè)備無關(guān)性西安交通大學(xué)154.設(shè)備分配的步驟1)根據(jù)進程提出的物理設(shè)備名檢索系統(tǒng)設(shè)備表SDT(SystemDeviceTable),從中找到該物理設(shè)備的設(shè)備控制表DCT(DeviceControlTable)。2)根據(jù)DCT中的狀態(tài)信息,了解該設(shè)備是否忙。3)當設(shè)備分配給請求I/O的進程后,從該設(shè)備的設(shè)備控制表(DCT)中與該設(shè)備相連的控制器表指針一欄可知與此設(shè)備相連的控制器控制表(COCT,ControllerControlTable)。4)檢查該控制器控制表中的狀態(tài)信息來判斷控制器是否忙。5)通過控制器控制表中的通道表指針,檢查與此控制器相連的通道的狀態(tài)。西安交通大學(xué)165.設(shè)備驅(qū)動程序設(shè)備驅(qū)動程序是I/O進程與設(shè)備控制器之間的通信程序,它接收上層軟件發(fā)來的抽象I/O要求(如read或write命令)轉(zhuǎn)換為具體要求后,發(fā)送給設(shè)備控制器,設(shè)置相關(guān)參數(shù),啟動設(shè)備并完成輸入/輸出。6.Windows的設(shè)備管理Windows操作系統(tǒng)通過設(shè)備驅(qū)動程序來完成設(shè)備的啟動、操作、數(shù)據(jù)流向控制和設(shè)備的關(guān)閉工作。Windows采用分層驅(qū)動程序的思想,只有最底層的硬件設(shè)備驅(qū)動程序訪問硬件設(shè)備,高層驅(qū)動程序都是進行高級I/O請求到低級I/O請求的轉(zhuǎn)換工作,各層驅(qū)動程序間的I/O請求通過I/O管理器進行。西安交通大學(xué)173.2.4文件管理操作系統(tǒng)中與文件管理有關(guān)的程序和所管理的文件稱為文件系統(tǒng)1.文件系統(tǒng)的功能2.文件結(jié)構(gòu)邏輯結(jié)構(gòu)物理結(jié)構(gòu)流式文件記錄式文件3.文件目錄系統(tǒng)中的文件的文件名、文件的物理地址和文件屬性等信息的表格。卷(邏輯盤)、文件夾、子文件夾、文件西安交通大學(xué)184.DOS(DiskOperatingSystem)的文件管理(1)DOS的文件名8.3格式,統(tǒng)配符。(2)DOS的文件目錄樹形目錄結(jié)構(gòu),32字節(jié)(3)DOS文件的物理結(jié)構(gòu)引導(dǎo)區(qū)(BOOT區(qū))文件分配表區(qū)(FAT區(qū))數(shù)據(jù)區(qū)(DATA區(qū))FAT16西安交通大學(xué)19DOS磁盤數(shù)據(jù)結(jié)構(gòu)
5.Windows的文件管理1)FAT32FAT32的結(jié)構(gòu)和FAT16是一致的。FAT的每個登記項占4字節(jié)(32位),可以支持更大的分區(qū),單個文件也可以更大。2)NTFSNTFS分區(qū)由引導(dǎo)區(qū)、主文件表(MFT)和文件區(qū)組成。引導(dǎo)區(qū)包括一個扇區(qū)的主引導(dǎo)記錄(MasterBootRecord,MBR)和不超過15個扇區(qū)的Windows啟動管理器。主文件表(MainFileTable,MFT)是保存文件信息的區(qū)域。NTFS所有的數(shù)據(jù)都存儲在文件中,目錄也是文件,甚至引導(dǎo)區(qū)也是一個文件。容錯性、安全性、文件壓縮、磁盤配額、可靠性西安交通大學(xué)203.2.5用戶接口命令接口、程序接口、圖形接口西安交通大學(xué)213.3基于Python的Windows操作系統(tǒng)應(yīng)用程序設(shè)計3.3.1線程和進程1.線程程序設(shè)計threading模塊(1)調(diào)用Thread類的構(gòu)造函數(shù)創(chuàng)建線程Thread類構(gòu)造函數(shù)__init__(self,group=None,target=None,name=None,args=(),kwargs=None,*,daemon=None)【例3-1】編寫程序,創(chuàng)建三個線程,模擬三臺機器,它們每隔1-3秒的時間生產(chǎn)1-5件產(chǎn)品。顯示線程名作為“機器名”。西安交通大學(xué)22西安交通大學(xué)23(2)繼承Thread類創(chuàng)建線程類繼承Thread類,自定義一個線程類重寫從父類繼承得到的run()方法【例3-2】通過創(chuàng)建Thread的子類,創(chuàng)建線程,實現(xiàn)例3-1的功能。西安交通大學(xué)24西安交通大學(xué)25(3)守護線程所謂守護線程(或后臺線程),就是為其他線程提供服務(wù)的線程,其特點是如果被服務(wù)的線程不結(jié)束,則守護線程不能結(jié)束,當被服務(wù)的線程結(jié)束時,守護線程結(jié)束。守護線程也是線程,可以象前面一樣創(chuàng)建,在啟動前將其daemon屬性設(shè)置為True再啟動【例3-3】在例3-1的基礎(chǔ)上,創(chuàng)建一個守護線程,模擬一個監(jiān)控機構(gòu),它每隔一個隨機時間顯示“Operatingnormally”,其他機器停止運行,監(jiān)控也停止。西安交通大學(xué)26西安交通大學(xué)27(4)基于隊列的線程同步隊列同步是Python中線程同步的一種方法,線程產(chǎn)生的資源放入隊列,消費的資源從隊列中取出,隊列機制保證隊列滿時和隊列空時線程等待?!纠?-4】編程模擬3個生產(chǎn)者,它們每個1-2秒生產(chǎn)一件產(chǎn)品;5個消費者,每個1-3秒消費一件產(chǎn)品。庫房大小為10。庫房滿時不再生產(chǎn),庫房空時不能消費。西安交通大學(xué)28西安交通大學(xué)29西安交通大學(xué)302.進程程序設(shè)計multiprocessing模塊(1)通過Process實例創(chuàng)建進程Process類的構(gòu)造函數(shù)__init__(self,group=None,target=None,name=None,args=(),kwargs{})【例3-5】啟動兩個進程,模擬兩臺同時運行的機器。每臺機器每隔1-5秒的隨機時間隨機生產(chǎn)1-3件產(chǎn)品。西安交通大學(xué)31西安交通大學(xué)32(2)通過Process的子類創(chuàng)建進程【例3-6】通過創(chuàng)建Process的子類創(chuàng)建例3-5中的進程。定義Process的派生類,重寫run()方法西安交通大學(xué)33西安交通大學(xué)34(3)進程間通信multiprocessing提供的進程間通信方法之一是隊列。通過multiProcessing中的Queue類創(chuàng)建隊列對象,共享信息的進程可以在隊列中插入和取出數(shù)據(jù)?!纠?-7】使用進程的隊列實現(xiàn)生產(chǎn)和消費模型的模擬。西安交通大學(xué)35西安交通大學(xué)36西安交通大學(xué)373.進程池和線程池所謂線程池(進程池)就是預(yù)先創(chuàng)建好若干個線程(進程),一般與CPU的核心數(shù)量相同,然后按需分配給需要處理的任務(wù),任務(wù)結(jié)束并不關(guān)閉,而是將線程(進程)放回線程池(進程池)中等待任務(wù)。concurent.futures模塊Executor類,使用其子類ThreadPoolExecutor和ProcessPoolExecutor創(chuàng)建線程池任務(wù)執(zhí)行器和進程池任務(wù)執(zhí)行器。其方法有submit(fn,*args,**kwargs)map(func,*iterables,timeout=None,chunksize=1)shutdown(wait=True)西安交通大學(xué)38Future類,表示執(zhí)行的任務(wù),其實例由Executor.submit()創(chuàng)建,主要方法:cancel()
running()done()result(timeout=None)add_done_callbaxck(fn)【例3-8】使用進程池尋找[10000000,10000200)之間的素數(shù)。西安交通大學(xué)39西安交通大學(xué)403.3.2內(nèi)存管理和內(nèi)存文件1.Python內(nèi)存管理Python采用內(nèi)存池機制。垃圾回收機制2.字符串、整數(shù)和浮點數(shù)與字節(jié)序列的轉(zhuǎn)換字符串和字節(jié)序列的相互轉(zhuǎn)換str.encode(encoding='utf-8')
bytes(str,encoding='utf-8')
s=b'str'bytestr.decode(encoding='utf-8')整數(shù)和字節(jié)序列的相互轉(zhuǎn)換a.to_bytes(k,byteorder='big',signed='False')int.from_bytes(bytes,byteorder='big',signed='False')西安交通大學(xué)41浮點數(shù)和字節(jié)序列的相互轉(zhuǎn)換內(nèi)置模塊struct中的pack和unpack函數(shù),它們將數(shù)值數(shù)據(jù)轉(zhuǎn)換為字節(jié)序列。struct.pack(fmt,v1,v2,…)struct.unpack(fmt,bugger)西安交通大學(xué)423.內(nèi)存文件StringIO類用于文本流,BytesIO類用于二進制流,它們在io模塊中。mf=io.StringIO()#返回內(nèi)存文本文件對象bf=io.BytesIO()#返回內(nèi)存二進制文件對象西安交通大學(xué)431)StringIO類。使用StringIO類創(chuàng)建文本內(nèi)存文件使用read()、readline()、readlines()、getvalue()方法讀取數(shù)據(jù)使用write()、writelines()寫入數(shù)據(jù)?!纠?-9】編寫程序,創(chuàng)建內(nèi)存文本文件,使用各種寫入語句將下面的詩寫入文件,使用各種讀取語句讀出并顯示。東欄梨花蘇軾〔宋代〕梨花淡白柳深青,柳絮飛時花滿城。惆悵東欄一株雪,人生看得幾清明。西安交通大學(xué)442)BytesIO類。創(chuàng)建二進制內(nèi)存文件,常用方法:write(b)
read(size=-1)
readline(size=-1)
readlines(hint=-1)
getvalue()
seek()close()西安交通大學(xué)45【例3-10】編寫程序,使用io.BytesIO類創(chuàng)建二進制內(nèi)存文件,將整數(shù)、實數(shù)、字符串數(shù)據(jù)寫入、讀出并顯示出來。西安交通大學(xué)463.內(nèi)存映像文件Python使用mmap模塊的mmap類實現(xiàn)內(nèi)存映像的操作,其構(gòu)造格式為:classmmap.mmap(fileno,length,tagname=None,access[,offset=0])使用read([n])、readline()、write()、seek()、find()、move()、close()等方法讀若干字節(jié),讀一行,寫若干字節(jié),定位文件指針,查找、移動數(shù)據(jù),關(guān)閉映像文件。【例3-11】使用內(nèi)存映像文件對文件進行讀寫。編寫程序,先使用常規(guī)方法寫一個文本文件,內(nèi)容如下:shaanxihistorymuseum陜西考古博物館關(guān)閉后再使用open()打開,使用mmap.mmap建立內(nèi)存映像文件,按行讀取其中的內(nèi)容,解碼后顯示。然后通過下標訪問修改第1行每個單詞的首字母大寫,將第2行改為“陜西歷史博物館”。西安交通大學(xué)473.3.3文件管理相關(guān)的模塊osos.pathglobshutilsubprocess西安交通大學(xué)483.3.4動態(tài)鏈接庫和WindowsAPIctypes使用cdll和windll兩個函數(shù)加載動態(tài)鏈接庫。cdll用于cdecl調(diào)用約定,windll用于stdcall調(diào)用約定。函數(shù)的調(diào)用約定主要指參數(shù)的傳遞方式和清理棧的方式。由于動態(tài)鏈接庫函數(shù)的參數(shù)類型與Python的參數(shù)類型不一致,所以調(diào)用動態(tài)鏈接庫函數(shù)時通常需要將Python類型轉(zhuǎn)換為函數(shù)需要的類型或創(chuàng)建函數(shù)需要的類型。西安交通大學(xué)49西安交通大學(xué)50
1)簡單數(shù)據(jù)類型簡單類型的參數(shù),直接使用ctypes中的類型構(gòu)造函數(shù)創(chuàng)建或初始化對象,使用對象的value屬性為對象賦值或獲得對象的值。西安交通大學(xué)51
2)數(shù)組通過ctypes簡單類型的類型名乘以一個整數(shù)創(chuàng)建固定長度的數(shù)組??梢栽趧?chuàng)建數(shù)組時初始化。對字符數(shù)組,可以用屬性value賦值和輸出。西安交通大學(xué)523)指針ctypes.pointer(obj)函數(shù)創(chuàng)建ctypes對象的指針實例,它的參數(shù)是一個對象;POINTER(type)創(chuàng)建指針類型,它的參數(shù)是一個類型。西安交通大學(xué)534)創(chuàng)建內(nèi)存區(qū)域ctypes.create_string_butter(init_or_size,size=None)創(chuàng)建一塊可變的字符緩沖區(qū),返回值是c_char類型的數(shù)組西安交通大學(xué)54
5)結(jié)構(gòu)體結(jié)構(gòu)體是由一組數(shù)據(jù)組合而成的整體,常表示現(xiàn)實中的一個對象的一組屬性的值,如('張三','男',20,172)C語言的結(jié)構(gòu)體的定義格式西安交通大學(xué)55實現(xiàn)ctypes類型的結(jié)構(gòu)體,需要基于ctypes中的父類Structure寫一個派生類,子類必須定義_fields_屬性,,其值是兩元組的列表,每個兩元組包含一個名字域和一個類型域,它們是字段的名字和類型。西安交通大學(xué)562.調(diào)用C語言編寫的動態(tài)鏈接庫【例3-13】用C語言編寫動態(tài)鏈接庫文件,其中有4個函數(shù),分別實現(xiàn)兩個整數(shù)的和、交換兩個整型變量的值、對整數(shù)數(shù)組排序、復(fù)制字符串等功能,其C語言的格式如下:intmyadd(inta,intb); voidmyswap(int*a,int*b); voidmysort(inta[],intn); char*mystrcpy(char*s1,char*s2); 將其編譯為動態(tài)鏈接庫,在Python中加載動態(tài)鏈接庫,調(diào)用函數(shù)驗證其功能。本例創(chuàng)建cdecl調(diào)用約定的庫函數(shù),使用cdll加載器的LoadLibrary(name)方法加載動態(tài)鏈接庫西安交通大學(xué)57①編寫動態(tài)鏈接庫文件。②編譯C語言程序,生成動態(tài)鏈接庫文件。③編寫Python程序。西安交通大學(xué)583.Windows下調(diào)用操作系統(tǒng)的API函數(shù)Windows操作系統(tǒng)的API一般以DLL的形式放在安裝目錄的System32文件夾中,擴展名名為.dll,例如kernel32.dllWindowsAPI使用stdcall調(diào)用約定,在Python中使用windll加載器的LoadLibrary()方法加載
【例3-14】編寫Python程序,通過WindowsAPI的調(diào)用,(1)獲取計算機的名稱;(2)獲取E盤的磁盤空間大小、空閑空間和用戶可用空間大小等信息;(3)獲取內(nèi)存的大小和空閑內(nèi)存的大小。西安交通大學(xué)59西安交通大學(xué)60西安交通大學(xué)613.3.5圖形界面1.主窗口內(nèi)置模塊tkinter【例3-15】編寫窗口程序,窗口大小300X200,在屏幕(100,10)位置顯示該窗口,窗口標題“tkinterPythonGUI應(yīng)用程序”。西安交通大學(xué)622.布局西安交通大學(xué)63(1)pack方式【例3-16】創(chuàng)建窗口,在窗口中顯示四個按鈕,按鈕文本依次為青龍、白虎、朱雀、玄武。(2)grid布局【例3-17】編寫GUI程序,在窗口中顯示如下形式的按鈕。西安交通大學(xué)64(3)place布局place布局直接設(shè)定組件的位置。其常用選項有:x,設(shè)定該控件的水平偏移位置,單位為像素。y,設(shè)定該控件的垂直偏移位置,單位為像素。西安交通大學(xué)653.事件處理(1)事件表示鼠標事件包括:<Button-1>表示按下鼠標左鍵。<Double-Button-1>表示雙擊鼠標左鍵。<ButtonRelease-n>,釋放鼠標按鈕。<Double-Button-n>,雙擊鼠標按鈕。<Motion>,移動鼠標。<Bn-Motion>,按鈕鼠標按鈕,并移動鼠標。<Enter>,鼠標進入。<Leave>,鼠標離開。<MouseWheel>,鼠標滾輪滾動。西安交通大學(xué)66鍵盤事件包括:<KeyPress-key>或<Key-key>或<key>,特定鍵按下,其中key為某按鍵,如w、W等。<KeyRelease-key>特定鍵松開。窗口事件主要包括:<Configure>,改變窗口的位置和
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 石英石深加工中心項目可行性研究報告申請立項
- 二零二五年度建筑工程安全承包合同范本
- 二零二五年度建筑企業(yè)施工人員勞務(wù)合同與職業(yè)發(fā)展支持協(xié)議3篇
- 創(chuàng)新創(chuàng)業(yè)(同濟大學(xué))學(xué)習(xí)通測試及答案
- 二零二五年度存量房屋買賣合同范本:物業(yè)交割3篇
- 二零二五年度合伙人信息保密與新興技術(shù)保護合同3篇
- 2025年度教育信息化項目咨詢服務(wù)協(xié)議2篇
- 二零二五年度中菲韓三國漁業(yè)風(fēng)險管理與合作合同3篇
- UL1017標準中文版-2018吸塵器UL中文版標準
- 生物安全柜的使用及維護培訓(xùn)
- 【MOOC】診斷學(xué)-山東大學(xué) 中國大學(xué)慕課MOOC答案
- 《NOIP圖的基礎(chǔ)算法》課件
- 人體寄生蟲表格總結(jié)超全(原蟲部分)
- 《建筑工程QC課題》課件
- 病歷質(zhì)控流程
- 合作投資酒店意向合同范例
- 2024年度新能源汽車充電物流合同
- 2024年學(xué)校意識形態(tài)工作總結(jié)模版(3篇)
- 機械設(shè)備招投標授權(quán)委托書模板
評論
0/150
提交評論