【正文】
in the latter, the carrier does. It is this transparency that allows voice, data, and fax to coexist within the phone system. A final difference between circuit and packet switching is the charging algorithm. With circuit switching, charging has historically been based on distance and time. For mobile phones, distance usually does not play a role, except for international calls, and time plays only a minor role(., a calling plan with 2020 free minutes costs more than one with 1000 free minutes and sometimes night or weekend calls are cheaper than normal).With packet switching, connect time is not an issue, but the volume of traffic sometimes is. For home users, ISPs usually charge a flat monthly rate because it is less work for them and their customers can understand this model easily, but backbone carriers charge regional works based on the volume of their traffic. The differences are summarized in . Item Circuit Switched Packet Switched Call setup Required Not needed Dedicated physical path Yes No Each packet follows the same route Yes No Packets arrive in order Yes No Is a switch crash fatal Yes No Bandwidth available Fixed Dynamic Time of possible congestion At setup time On every packet Potentially wasted bandwidth Yes No Storeandforward transmission No Yes Transparency Yes No Charging Per minute Per packet Both circuit switching and packet switching are important enough that we will e back to them shortly and describe the various technologies used in detail. THE MOBILE TELEPHONE SYSTEM The traditional telephone system(even if it some day gets multigigabit endtoend fiber) will still not be able to satisfy a growing group of users :people on the go .People now expect to make phone calls from airpl。感謝所有幫助過我的老師和同學,謝謝你們!最后感謝我的母校浙江林學院四年來對我的大力栽培。 汪老師給了我很大的幫助,使我得到了很大的提高,這對于我 以后的工作和學習有非常大的幫助,非常感謝他的耐心指導。在計算機專業(yè)教學中,可視化設計將會用得越來越多,效果將會越來越明顯,將是計算機教學發(fā)展的主要方向之一。 浙江林學院天目學院本科生畢業(yè)設計(論文) 23 5 總結(jié) 本文從 P, V操作實現(xiàn)進程同步與互斥出發(fā),研究了操作系統(tǒng)中經(jīng)典的同步問題生產(chǎn)者 消費者問題,提出了解決此問題的模型及解決方案 ,并設計了 基于 microsoft visual c++而開發(fā),在 WINDOWS 98/2020/XP上運行 的 操作系統(tǒng)進程管理演示系統(tǒng)(生產(chǎn)者 消費者) 。同樣 ,當有 1 個消費者線程從循環(huán)緩沖區(qū)中取走 1個數(shù)據(jù)后 ,它會喚醒阻塞著的生產(chǎn)者線程。 當循環(huán)緩沖區(qū)滿時 ,生產(chǎn)者線程阻塞。如果已經(jīng)有生產(chǎn)者將數(shù)據(jù)放入了單 緩沖區(qū)中 ,這時其它的生產(chǎn)者只能阻塞 ,直到有消費者將數(shù)據(jù)提走后才允許某一個生產(chǎn)者放數(shù) [17]。在單緩沖區(qū)中沒有數(shù)據(jù)的情況下 ,如果有消費者到達 ,這時該消費者阻塞。 再 多生產(chǎn)者 多消費者模擬 演示時設置生產(chǎn)者數(shù)目為 3,而消費者數(shù)目為 4,這樣更有利于觀察系統(tǒng)模擬的準確性。但要注意 ,不論是生產(chǎn)者之間 ,消費者之間 ,還是生產(chǎn)者與消費者之間 ,他們對于臨界資源──緩沖區(qū)的訪問必須是互斥的 ,也就是說 ,在 1 個生產(chǎn)者或消費者線程訪問完該緩沖區(qū)之前 ,是決不允許其它的生產(chǎn)者或消費者線程訪 問的。 圖 緩沖區(qū) 浙江林學院天目學院本科生畢業(yè)設計(論文) 20 當消費者 C0 消費掉第一個緩沖區(qū)后,生產(chǎn)者 P0 產(chǎn)品進入第一個緩沖區(qū), 如 圖 圖 生產(chǎn)者產(chǎn)品進入緩沖區(qū) 多生產(chǎn)者 多消費者模擬 效果 上面分析了較簡單的單緩沖區(qū)的情形 ,但是在實際的問題中 ,更一般的情況是在生產(chǎn)者和消費者之間存在多個緩沖區(qū) ,生產(chǎn)者可以將生產(chǎn)出來的數(shù)據(jù)放入緩沖區(qū)的不同緩沖區(qū)塊中 ,只要該緩沖區(qū)塊空閑 。消費者進程的活動為 :先判斷該單緩沖區(qū)中是否有數(shù)據(jù) (即是否滿 ) ,如果沒有 ,那么它就自我阻塞 。 此類問題較簡單 ,對于生產(chǎn)者進程 ,他的活動過程如下 :首先判斷該單緩沖區(qū)是否為空 ,如果不是 ,則生產(chǎn)者進程自我阻塞 。 2. 多生產(chǎn)者 多消費者問題模型 。 由于系統(tǒng)緩沖區(qū)的大小已經(jīng)設定,所以我們將演示下面兩種情況的模擬效果。 如果當前沒有產(chǎn)品可以消費 , 則等待生產(chǎn)者放產(chǎn)品并讓出監(jiān)控器 , 當生產(chǎn)者放了貨物后喚 醒它 [14]。以后當消費者消費后喚醒它。生產(chǎn)者放一個產(chǎn)品 , 就在生產(chǎn)者當前指針位置的方框用 紅 色填充 , 指針順時針前進一格 , 指向下一個可以放產(chǎn)品的緩沖區(qū) 。但是不能約定推進順序和 速度。為方便觀察生產(chǎn)和消費進展情況 , 設置了兩個時間控制變量控制生產(chǎn)者和消費者的生產(chǎn)和消費周期 ( 即 : 線程的 run 方法 ) , 它們是用兩個文本輸入框分別實現(xiàn)數(shù)據(jù)輸入的。 } 4. 退出按紐的代碼: void CPCDlg::OnExit() { EndDialog(0)。 (true)。 m_PStr[i]=。 m_PArray[i]=0。 m_Array[i]=0。i++) { m_hFullSemaphore[i]=CreateSemaphore(NULL,0,1,NULL)。 浙江林學院天目學院本科生畢業(yè)設計(論文) 17 for( int i=0。 } } else MessageBox(消費者數(shù)目必須在 110之間 ,出錯了 )。 VERIFY(thism_CT[i]SetThreadPriority(THREAD_PRIORITY_IDLE))。 thism_CT[i] =new CConsumerThread(this,str)。 ithism_nc。 CString str。amp。 thism_continue=true。 } 浙江林學院天目學院本科生畢業(yè)設計(論文) 16 } else MessageBox(生產(chǎn)者數(shù)目必須在 110之間 ,出錯了 )。 VERIFY(thism_PT[i]SetThreadPriority(THREAD_PRIORITY_IDLE))。 thism_PT[i] =new CProducerThread(this,str)。 ithism_np。 CString str。amp。 thisSetTimer(100,1000,NULL)。 MFC 界面效果 這 是 系統(tǒng)界 面設計的截圖: 浙江林學院天目學院本科生畢業(yè)設計(論文) 15 圖 MFC 界面 界面上有 2 個靜態(tài)文本, 2 個編輯框和 7 個按紐組成 : 1. 啟動生產(chǎn)者按紐 的 代碼: void CPCDlg::OnPstar() { UpdateData(true)。例如,繼承時,應用程序特定的事件由程序員的派生類來處理,不感興趣的由基類處理。框架或者由其本身處理事件,不依賴程序員的代碼;或者調(diào)用程序員的代碼來處理應用程序特定的事件。同時, MFC支持對底層 API的直接調(diào)用。雖然,這些內(nèi)部處理對程序員來說是透明的,但是,懂得和理解 MFC內(nèi)部機制有助于寫出功能靈活而強大的程序。例如,為了實現(xiàn)消息映射機 制, MFC編程框架必須要保證首先得到消息,然后按既定的方法進行處理。例如, SDI 應用程序的模板, MDI 應用程序的模板,規(guī)則 DLL應用程序的模板,擴展 DLL應用程序的模板, OLE/ACTIVEX應用程序的模板,等等。這樣封裝的結(jié)果對程序員來說,是一套開發(fā)模板(或者說模式)。本書將充分的展示 MFC 調(diào)用虛擬函數(shù)和消息處理 函數(shù)的內(nèi)幕,讓讀者對 MFC 的編程接口有清晰的理解。程序員繼承基類的同時,把自己實現(xiàn)的虛擬函數(shù)和消息處理函數(shù)嵌入 MFC的編程框架。于是, MFC 建立了消息映射機制,以一種富有效率、便于使用的手段解決消息處理函數(shù)的動態(tài)約束問題。例如, CWnd 封裝 Windows 窗口對象時,每一條 Windows 消息對應一個成員函數(shù),這些成員函數(shù)為派生類所繼承。 3. 虛擬函數(shù)和動態(tài)約束 MFC 以 “C++”為基礎,自然支持虛擬函數(shù)和動態(tài)約束。這些對象包括以下種類:窗口對象,基類是 CWnd;應用程序?qū)ο?,基類?CwinThread;文檔對象,基類是 Cdocument,等等。 MFC 中,任何可以處理消息的類都從 CCmdTarget 派生。所有從 CObject派生的類都將具備或者可以具備 CObject 所擁有的特性。 CObject 是 MFC 的根類,絕大多數(shù) MFC 類是其派生的,包括 CCmdTarget。 2. 繼承 首先, MFC 抽象出眾多類的共同特性,設 計出一些基類作為實現(xiàn)其他類的基礎。 MFC 的 OLE 類封裝了 OLE API 大量的復雜工作,這些類提供了實現(xiàn) OLE的更高級接口。文檔是用戶操作的數(shù)據(jù)對象,視圖是數(shù)據(jù)操作的窗口,用戶通過它處理、查看數(shù)據(jù)。 MFC 把許多類似的處理封裝起來,替程序員完成這些工作。例如: class CWnd是一個 C++ window object,浙江林學院天目學院本科生畢業(yè)設計(論文) 13 它把 Windows window(HWND)和 Windows window 有關的 API 函數(shù)封裝在 C++ window object 的成員函數(shù)內(nèi),后者的成員變量 m_hWnd 就是前者的窗口句柄。這些類或者封裝了 Win32 應用程序編程接口,或者封裝了應用程序的概念,或者封裝了 OLE 特性,或者封裝了 ODBC 和DAO 數(shù)據(jù)訪問的功能,等等,分述如下。 1. 封裝 構成 MFC框架的是 MFC 類庫。因為總體上, MFC框架定義了應用程序的輪廓,并提供了用戶接口的標準實現(xiàn)方法,程序員所要做的就是通過預定義的接口把具體應用程序特有的東西填入這個輪廓。 return CWinThread::Run()。 Sleep(t*100)。 t+=10。 srand( (unsigned)time( NULL ) )。 pDlgm_CStr[temp]=。 pDlgm_Array[temp]=0。 浙江林學院天目學院本科生畢業(yè)設計(論文) 12 t+=1。 srand( (unsigned)time( NULL ) )。 pDlgm_CStr[temp]=thism_name。 while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hFullSemaphore,FALSE,INFINITE)。 int t=0。 pDlg=(C