下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1網(wǎng)絡(luò)編程語言網(wǎng)絡(luò)編程語言2應(yīng)用程序程序編程接口(套接字) 實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用時(shí),要從由網(wǎng)絡(luò)輸出的接口開始。既然大多數(shù)網(wǎng)絡(luò)協(xié)議都是由軟件實(shí)現(xiàn)的(特別是協(xié)議棧中的高層協(xié)議),而且?guī)缀跛械挠?jì)算機(jī)系統(tǒng)都將網(wǎng)絡(luò)協(xié)議的實(shí)現(xiàn)作為操作系統(tǒng)的一部分,因而我們說“由網(wǎng)絡(luò)輸出的”接口時(shí),通常指的是操作系統(tǒng)為它的網(wǎng)絡(luò)子系統(tǒng)提供的接口。這個(gè)接口叫做網(wǎng)絡(luò)的應(yīng)用程序編程接口應(yīng)用程序編程接口(A P I )。 雖然每個(gè)操作系統(tǒng)都可以自由地定義自己的A P I ,但隨著時(shí)間的推移,有些A P I 已獲得了廣泛的支持;也就是說,除了它們?cè)嫉南到y(tǒng)外,它們還被移植到操作系統(tǒng)中。3應(yīng)用程序程序編程接口(套接字) 套接字接(socket
2、 interface )口:它最初是由加州大學(xué)伯克利分校的U n i x 小組開發(fā),而現(xiàn)在幾乎所有流行的操作系統(tǒng)都支持它。業(yè)界支持單一A P I 的優(yōu)點(diǎn)是使得應(yīng)用程序可以很簡(jiǎn)單地從一個(gè)操作系統(tǒng)移植到另一個(gè)操作系統(tǒng)。但是我們得記住一點(diǎn),通常應(yīng)用程序與操作系統(tǒng)許多部分相互作用,而不僅僅與網(wǎng)絡(luò)相互作用。例如,讀寫文件,產(chǎn)生并行進(jìn)程和輸出圖形顯示。 每個(gè)協(xié)議提供了一系列服務(wù)(s e rv i c e ),A P I 則提供了特定操作系統(tǒng)中調(diào)用這些服務(wù)所用的語法(s y n t a x )。然后,實(shí)現(xiàn)的作用是把A P I 定義的具體操作和對(duì)象映射到協(xié)議定義的抽象服務(wù)集上。4應(yīng)用程序程序編程接口(套接字)
3、 套接字接口的主要概念是套接字(s o c k e t )。理解套接字的好方法是把它看作本地應(yīng)用進(jìn)程與網(wǎng)絡(luò)的接入點(diǎn)。接口定義了各種操作,包括創(chuàng)建套接字、將套接字連到網(wǎng)上、通過套接字發(fā)送/接收消息,關(guān)閉套接字。為了簡(jiǎn)化討論,我們?cè)诖酥挥懻揟 C P 中如何使用套接字。 第一步是創(chuàng)建套接字,用如下操作實(shí)現(xiàn): 該操作有三個(gè)參數(shù)是因?yàn)樘捉幼纸涌诒辉O(shè)計(jì)成通用的,定義支持任意的底層協(xié)議集。 5應(yīng)用程序程序編程接口(套接字) 2.t y p e 參數(shù)表明通信的參數(shù)表明通信的語義。語義。 S O C K _ S T R E A M 說明是字節(jié)流。說明是字節(jié)流。 S O C K _ D G R A M則則表明是
4、面向消息的服務(wù),表明是面向消息的服務(wù),像像U D P 提供的一樣。提供的一樣。3.p r o t o c o l 參數(shù)則指明將要用到的特定參數(shù)則指明將要用到的特定協(xié)議。協(xié)議。 s o c k e t 返回值是新創(chuàng)建套接字的句柄(句柄(h a n d l e ),即以后引用該套接字時(shí)使用的標(biāo)識(shí)符。在套接字的其他操作中,它也將作為一個(gè)參數(shù)。1.d o m a i n 參數(shù)描述將使用的協(xié)議參數(shù)描述將使用的協(xié)議族族。 A F _ I N E T 用于表示因特網(wǎng)協(xié)議族。用于表示因特網(wǎng)協(xié)議族。 A F _ U N I X 用于表示用于表示U n i x 管道功能管道功能6客戶客戶/服務(wù)器模式服務(wù)器模式 在
5、在TCP/IP網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主網(wǎng)絡(luò)應(yīng)用中,通信的兩個(gè)進(jìn)程間相互作用的主要模式是客戶要模式是客戶/服務(wù)器模式(服務(wù)器模式(Client/Server model),即客戶),即客戶向服務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器接收到請(qǐng)求后,提供相應(yīng)的向服務(wù)器發(fā)出服務(wù)請(qǐng)求,服務(wù)器接收到請(qǐng)求后,提供相應(yīng)的服務(wù)。服務(wù)。 客戶客戶/ /服務(wù)器模式的建立基于以下兩點(diǎn):服務(wù)器模式的建立基于以下兩點(diǎn): 首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力首先,建立網(wǎng)絡(luò)的起因是網(wǎng)絡(luò)中軟硬件資源、運(yùn)算能力和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提和信息不均等,需要共享,從而造就擁有眾多資源的主機(jī)提供服
6、務(wù),資源較少的客戶請(qǐng)求服務(wù)這一非對(duì)等作用。供服務(wù),資源較少的客戶請(qǐng)求服務(wù)這一非對(duì)等作用。 其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間其次,網(wǎng)間進(jìn)程通信完全是異步的,相互通信的進(jìn)程間既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)既不存在父子關(guān)系,又不共享內(nèi)存緩沖區(qū),因此需要一種機(jī)制為希望通信的進(jìn)程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同制為希望通信的進(jìn)程間建立聯(lián)系,為二者的數(shù)據(jù)交換提供同步,這就是基于客戶步,這就是基于客戶/ /服務(wù)器模式的服務(wù)器模式的TCP/IPTCP/IP。 7客戶客戶/服務(wù)器模式服務(wù)器模式 客戶客戶/服務(wù)器模式在操作過程中采取的是主動(dòng)請(qǐng)求方式:服務(wù)器模式在操作過程中采
7、取的是主動(dòng)請(qǐng)求方式: 首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)求提供相應(yīng)服務(wù):首先服務(wù)器方要先啟動(dòng),并根據(jù)請(qǐng)求提供相應(yīng)服務(wù):1.打開一通信通道并告知本地主機(jī),它愿意在某一公認(rèn)地址上打開一通信通道并告知本地主機(jī),它愿意在某一公認(rèn)地址上(周知口,如(周知口,如FTP為為21)接收客戶請(qǐng)求;)接收客戶請(qǐng)求;2.等待客戶請(qǐng)求到達(dá)該端口;等待客戶請(qǐng)求到達(dá)該端口;3.接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。接收到接收到重復(fù)服務(wù)請(qǐng)求,處理該請(qǐng)求并發(fā)送應(yīng)答信號(hào)。接收到并發(fā)服務(wù)請(qǐng)求,要激活一新進(jìn)程來處理這個(gè)客戶請(qǐng)求(如并發(fā)服務(wù)請(qǐng)求,要激活一新進(jìn)程來處理這個(gè)客戶請(qǐng)求(如UNIX系統(tǒng)中用系統(tǒng)中用fork、exec)。新
8、進(jìn)程處理此客戶請(qǐng)求,并不需)。新進(jìn)程處理此客戶請(qǐng)求,并不需要對(duì)其它請(qǐng)求作出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶的要對(duì)其它請(qǐng)求作出應(yīng)答。服務(wù)完成后,關(guān)閉此新進(jìn)程與客戶的通信鏈路,并終止。通信鏈路,并終止。4. 返回第二步,等待另一客戶請(qǐng)求。返回第二步,等待另一客戶請(qǐng)求。5. 關(guān)閉服務(wù)器關(guān)閉服務(wù)器8客戶客戶/服務(wù)器模式服務(wù)器模式客戶方:客戶方:1. 打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定打開一通信通道,并連接到服務(wù)器所在主機(jī)的特定端口;端口;2. 向服務(wù)器發(fā)服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)向服務(wù)器發(fā)服務(wù)請(qǐng)求報(bào)文,等待并接收應(yīng)答;繼續(xù)提出請(qǐng)求提出請(qǐng)求.3. 請(qǐng)求結(jié)束后關(guān)閉通信通道并終止。請(qǐng)求
9、結(jié)束后關(guān)閉通信通道并終止。 從上面所描述過程可知:從上面所描述過程可知:1. 客戶與服務(wù)器進(jìn)程的作用是非對(duì)稱的,因此編碼不客戶與服務(wù)器進(jìn)程的作用是非對(duì)稱的,因此編碼不同。同。2. 服務(wù)進(jìn)程一般是先于客戶請(qǐng)求而啟動(dòng)的。只要系統(tǒng)服務(wù)進(jìn)程一般是先于客戶請(qǐng)求而啟動(dòng)的。只要系統(tǒng)運(yùn)行,該服務(wù)進(jìn)程一直存在,直到正常或強(qiáng)迫終止。運(yùn)行,該服務(wù)進(jìn)程一直存在,直到正?;驈?qiáng)迫終止。 9應(yīng)用程序程序編程接口(套接字) 下一步看你是客戶還是服務(wù)器。 如果是服務(wù)器:在服務(wù)器主機(jī)上,應(yīng)用進(jìn)程執(zhí)行一個(gè)被動(dòng)的被動(dòng)的打開,即服務(wù)器表明它已準(zhǔn)備好接受連接,但并沒有真正建立連接。服務(wù)器通過調(diào)用以下三個(gè)操作來完成打開: 10套接字類型套
10、接字類型 TCP/IP的socket提供下列三種類型套接字。(1)流式套接字()流式套接字(SOCK_STREAM)提供了一個(gè)面向連接、可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無差錯(cuò)、無重復(fù)地發(fā)送,且按發(fā)送順序接收。內(nèi)設(shè)流量控制,避免數(shù)據(jù)流超限;數(shù)據(jù)被看作是字節(jié)流,無長(zhǎng)度限制。文件傳送協(xié)議(FTP)即使用流式套接字。 (2)數(shù)據(jù)報(bào)式套接字()數(shù)據(jù)報(bào)式套接字(SOCK_DGRAM)提供了一個(gè)無連接服務(wù)。數(shù)據(jù)包以獨(dú)立包形式被發(fā)送,不提供無錯(cuò)保證,數(shù)據(jù)可能丟失或重復(fù),并且接收順序混亂。網(wǎng)絡(luò)文件系統(tǒng)(NFS)使用數(shù)據(jù)報(bào)式套接字。 (3)原始式套接字()原始式套接字(SOCK_RAW)該接口允許對(duì)較低層協(xié)議,如IP、I
11、CMP直接訪問。常用于檢驗(yàn)新的協(xié)議實(shí)現(xiàn)或訪問現(xiàn)有服務(wù)中配置的新設(shè)備。11典型套接字調(diào)用過程舉例典型套接字調(diào)用過程舉例如前所述,TCP/IP協(xié)議的應(yīng)用一般采用客戶/服務(wù)器模式,因此在實(shí)際應(yīng)用中,必須有客戶和服務(wù)器兩個(gè)進(jìn)程,并且首先啟動(dòng)服務(wù)器,其系統(tǒng)調(diào)用時(shí)序圖如下。面向連接的協(xié)議面向連接的協(xié)議(如TCP)的套接字系統(tǒng)調(diào)用如下圖所示:服務(wù)器必須首先啟動(dòng),直到它執(zhí)行完accept()調(diào)用,進(jìn)入等待狀態(tài)后,方能接收客戶請(qǐng)求。假如客戶在此前啟動(dòng),則connect()將返回出錯(cuò)代碼,連接不成功。 見下圖見下圖12 服務(wù)器方服務(wù)器方 客戶方客戶方 13Status of parent and child pr
12、ocesses with respect to the socket14典型套接字調(diào)用過程舉例典型套接字調(diào)用過程舉例無連接協(xié)議無連接協(xié)議的套接字調(diào)用如下圖所示: 無連接服務(wù)器也必須先啟動(dòng),否則客戶請(qǐng)求傳不到服務(wù)進(jìn)程。無連接客戶不調(diào)用connect()。因此在數(shù)據(jù)發(fā)送之前,客戶與服務(wù)器之間尚未建立完全相關(guān),但各自通過socket()和bind()建立了半相關(guān)。發(fā)送數(shù)據(jù)時(shí),發(fā)送方除指定本地套接字號(hào)外,還需指定接收方套接字號(hào),從而在數(shù)據(jù)收發(fā)過程中動(dòng)態(tài)地建立了全相關(guān)。 見下圖見下圖15socket(),建立數(shù)據(jù)報(bào)式套接字,返回套接字號(hào)sbind(),將套接字s與本地地址相連recvfrom()/sen
13、dto(),通過套接字s讀/寫數(shù)據(jù),直到數(shù)據(jù)交換完。closesocket(),關(guān)閉套接字s,結(jié)束服務(wù)socket(),建立數(shù)據(jù)報(bào)式套接字,返回套接字號(hào)sbind(),將套接字s與本地地址相連sendto ()/recvfrom(),通過套接字s交換數(shù)據(jù)closesocket(),關(guān)閉套接字,結(jié)束對(duì)話服務(wù)器方客戶方16應(yīng)用程序程序編程接口(套接字)1.b i n d 操作操作:如其名字一樣,是將新創(chuàng)建的如其名字一樣,是將新創(chuàng)建的s o c k e t 與與a d d r e s s 綁定。綁定。這是這是本地本地參與者(即服務(wù)器)的網(wǎng)絡(luò)地址。參與者(即服務(wù)器)的網(wǎng)絡(luò)地址。 注意,注意,a d d
14、 r e s s 在因特網(wǎng)協(xié)議中使用時(shí)是表示一個(gè)數(shù)據(jù)結(jié)構(gòu),其中包在因特網(wǎng)協(xié)議中使用時(shí)是表示一個(gè)數(shù)據(jù)結(jié)構(gòu),其中包括服務(wù)器的括服務(wù)器的I P 地址和地址和T C P 端口號(hào)。端口號(hào)通常是一些眾所周知的、專門端口號(hào)。端口號(hào)通常是一些眾所周知的、專門提供給服務(wù)的號(hào)嗎;例如,提供給服務(wù)的號(hào)嗎;例如,We b 服務(wù)器通常在端口服務(wù)器通常在端口8 0 上接受連接上接受連接。2.l i s t e n 操作操作:定義在指定的定義在指定的s o c k e t 上可以有多少個(gè)待處理的連接。上可以有多少個(gè)待處理的連接。3.a c c e p t 操作操作:完成被動(dòng)打開。它是一個(gè)阻塞的操作,在遠(yuǎn)程參與者沒完成被動(dòng)打
15、開。它是一個(gè)阻塞的操作,在遠(yuǎn)程參與者沒有建立起連接前,它不會(huì)返回任何參數(shù),一旦連接成功,它將返回一個(gè)表有建立起連接前,它不會(huì)返回任何參數(shù),一旦連接成功,它將返回一個(gè)表示這個(gè)新建連接的示這個(gè)新建連接的新的新的套接字,并且套接字,并且a d d r e s s 參數(shù)還包括了參數(shù)還包括了遠(yuǎn)程遠(yuǎn)程參與參與者的地址。者的地址。 注意,當(dāng)注意,當(dāng)a c c e p t 返回時(shí),以前作為參數(shù)給定的原始套接字依然存在并返回時(shí),以前作為參數(shù)給定的原始套接字依然存在并依然對(duì)應(yīng)于被動(dòng)打開;在以后調(diào)用依然對(duì)應(yīng)于被動(dòng)打開;在以后調(diào)用a c c e p t 時(shí)它仍作為參數(shù)。時(shí)它仍作為參數(shù)。17應(yīng)用程序程序編程接口(套接字
16、) 在客戶機(jī)上,應(yīng)用程序執(zhí)行主動(dòng)主動(dòng)打開;也就是,它通過調(diào)用如下的一個(gè)操作來表明它希望與誰通信: 該操作直至T C P 成功建立連接后才返回,此時(shí)應(yīng)用程序就可以開始發(fā)送數(shù)據(jù)。a d d r e s s 中包括了遠(yuǎn)程參與者的地址。 實(shí)際上,客戶機(jī)通常只描述遠(yuǎn)程參與者的地址,讓系統(tǒng)自動(dòng)填寫本地信息。鑒于服務(wù)器通常在共知的端口監(jiān)聽消息,一般地,客戶機(jī)并不關(guān)心它自己用哪個(gè)端口;操作系統(tǒng)簡(jiǎn)單地選一個(gè)未用端口即可。18應(yīng)用程序程序編程接口(套接字) 一旦連接建立,應(yīng)用進(jìn)程將調(diào)用以下兩個(gè)操作來發(fā)送和接收數(shù)據(jù): 這個(gè)操作在指定的s o c k e t 上發(fā)送m e s s a g e 這個(gè)操作則是將從指定的s
17、 o c k e t 上收到的消息放入指定的b u ff e r 。它們都使用一系列f l a g s 來控制操作的特定細(xì)節(jié)。 19應(yīng)用實(shí)例 現(xiàn)在,我們來看一個(gè)簡(jiǎn)單的客戶機(jī)/服務(wù)器程序的實(shí)現(xiàn),它用套接字接口在一個(gè)T C P 連接上發(fā)送消息。這個(gè)程序還用到了其他的U n i x 網(wǎng)絡(luò)功能,我們將逐個(gè)介紹。我們的應(yīng)用允許用戶在一端的機(jī)器上輸入并把文本發(fā)送給另一端機(jī)器的用戶。它是U n i x 中t a l k 程序的一個(gè)簡(jiǎn)化版本,類似于We b 聊天室的核心程序。 20應(yīng)用實(shí)例 1.客戶端客戶端 我們先從客戶端開始,它用遠(yuǎn)端的機(jī)器名作為參數(shù)。它調(diào)用U n i x 程序g e t h o s t b
18、 y n a m e 把該名字翻譯為遠(yuǎn)端主機(jī)的I P 地址。 下一步是構(gòu)造套接字接口所需的地址數(shù)據(jù)結(jié)構(gòu)(s i n )。 注意這個(gè)數(shù)據(jù)結(jié)構(gòu)表明我們將一直用套接字與因特網(wǎng)連接(A F _ I N E T )。 在以下例子中,我們用T C P 端口號(hào)5 4 3 2 作為共知的服務(wù)器端口號(hào);它恰好不是分配給其他因特網(wǎng)服務(wù)的端口號(hào)。 建立連接的最后一步是調(diào)用s o c k e t 和c o n n e c t 。一旦c o n n e c t 操作返回,建立起連接,客戶機(jī)程序?qū)⑦M(jìn)入主循環(huán),不斷從標(biāo)準(zhǔn)輸入讀取文本并通過套接字發(fā)送。21客戶端程序22應(yīng)用實(shí)例 2. 服務(wù)器服務(wù)器 服務(wù)器的實(shí)現(xiàn)也很簡(jiǎn)單。首先
19、,它填入自己的端服務(wù)器的實(shí)現(xiàn)也很簡(jiǎn)單。首先,它填入自己的端口號(hào)(口號(hào)(S E RV E R _ P O RT )構(gòu)造地址數(shù)據(jù)結(jié)構(gòu)。)構(gòu)造地址數(shù)據(jù)結(jié)構(gòu)。 其次,它并不指明其次,它并不指明I P地址,從而使應(yīng)用程序可以地址,從而使應(yīng)用程序可以接受來自本地任一接受來自本地任一I P 地址的連接。地址的連接。 然后,服務(wù)器執(zhí)行與被動(dòng)打開有關(guān)的初始步驟:然后,服務(wù)器執(zhí)行與被動(dòng)打開有關(guān)的初始步驟: 創(chuàng)建一個(gè)套接字,將它綁定到本地地址。創(chuàng)建一個(gè)套接字,將它綁定到本地地址。 然后設(shè)置允許同時(shí)連接的最大數(shù)。然后設(shè)置允許同時(shí)連接的最大數(shù)。 最后,主循環(huán)等待遠(yuǎn)端主機(jī)與它連接,當(dāng)遠(yuǎn)端有一最后,主循環(huán)等待遠(yuǎn)端主機(jī)與它連
20、接,當(dāng)遠(yuǎn)端有一臺(tái)主機(jī)試圖與它連接時(shí),它就接收并輸出連接上送來臺(tái)主機(jī)試圖與它連接時(shí),它就接收并輸出連接上送來的字符。的字符。23服務(wù)器程序24協(xié)議實(shí)現(xiàn)的問題協(xié)議實(shí)現(xiàn)的問題 應(yīng)用程序與底層網(wǎng)絡(luò)交互的方式類似于高層協(xié)議與低層協(xié)應(yīng)用程序與底層網(wǎng)絡(luò)交互的方式類似于高層協(xié)議與低層協(xié)議交互的方式。例如,議交互的方式。例如,T C P 需要一個(gè)接口向需要一個(gè)接口向I P 發(fā)送消息發(fā)送消息,同同時(shí)也需要時(shí)也需要I P 能向能向T C P 傳送消息。這就是服務(wù)接口。傳送消息。這就是服務(wù)接口。 既然我們已經(jīng)有了網(wǎng)絡(luò)的既然我們已經(jīng)有了網(wǎng)絡(luò)的A P I (如套接字),或許我們可(如套接字),或許我們可以在協(xié)議棧的每一對(duì)
21、協(xié)議間使用同樣的接口。盡管這只是一種以在協(xié)議棧的每一對(duì)協(xié)議間使用同樣的接口。盡管這只是一種選擇,但在實(shí)際中我們并不這樣使用套接字接口。原因在于套選擇,但在實(shí)際中我們并不這樣使用套接字接口。原因在于套接字接口在協(xié)議實(shí)現(xiàn)方面的低效是協(xié)議實(shí)現(xiàn)者所不能忍受的。接字接口在協(xié)議實(shí)現(xiàn)方面的低效是協(xié)議實(shí)現(xiàn)者所不能忍受的。應(yīng)用編程人員之所以能忍受是因?yàn)樗鼞?yīng)用編程人員之所以能忍受是因?yàn)樗?jiǎn)化了編程工作,而且畢簡(jiǎn)化了編程工作,而且畢竟他對(duì)低效只需忍受一次就夠了,而協(xié)議實(shí)現(xiàn)者卻要常常被它竟他對(duì)低效只需忍受一次就夠了,而協(xié)議實(shí)現(xiàn)者卻要常常被它們的性能所困擾,總擔(dān)心穿過幾層協(xié)議是否能得到一條消息。們的性能所困擾,總擔(dān)心穿
22、過幾層協(xié)議是否能得到一條消息。 本節(jié)的其余部分將討論網(wǎng)絡(luò)本節(jié)的其余部分將討論網(wǎng)絡(luò)A P I 和位于協(xié)議圖下方的協(xié)議和位于協(xié)議圖下方的協(xié)議到協(xié)議接口的兩點(diǎn)主要不同。同時(shí)介紹協(xié)議實(shí)現(xiàn)常用到的庫(kù)例到協(xié)議接口的兩點(diǎn)主要不同。同時(shí)介紹協(xié)議實(shí)現(xiàn)常用到的庫(kù)例程。程。 25協(xié)議實(shí)現(xiàn)的問題協(xié)議實(shí)現(xiàn)的問題 1. 進(jìn)程模型進(jìn)程模型 大多數(shù)操作系統(tǒng)都提供一種抽象概念叫大多數(shù)操作系統(tǒng)都提供一種抽象概念叫進(jìn)程(進(jìn)程(p ro c e s s ),或叫或叫線程(線程(t h re a d )。每個(gè)進(jìn)程的運(yùn)行很大程度上獨(dú)立于其。每個(gè)進(jìn)程的運(yùn)行很大程度上獨(dú)立于其他進(jìn)程,操作系統(tǒng)負(fù)責(zé)確保給所有當(dāng)前的進(jìn)程分配如地址空間他進(jìn)程,操作
23、系統(tǒng)負(fù)責(zé)確保給所有當(dāng)前的進(jìn)程分配如地址空間和和C P U 周期這樣的資源。周期這樣的資源。 進(jìn)程這一抽象概念使得在一臺(tái)機(jī)器上并發(fā)運(yùn)行多個(gè)事件變進(jìn)程這一抽象概念使得在一臺(tái)機(jī)器上并發(fā)運(yùn)行多個(gè)事件變得相當(dāng)簡(jiǎn)單;例如,每個(gè)用戶的應(yīng)用程序可以在自己的進(jìn)程中得相當(dāng)簡(jiǎn)單;例如,每個(gè)用戶的應(yīng)用程序可以在自己的進(jìn)程中執(zhí)行,操作系統(tǒng)中的各種事件可以作為其他進(jìn)程執(zhí)行。執(zhí)行,操作系統(tǒng)中的各種事件可以作為其他進(jìn)程執(zhí)行。 操作系統(tǒng)將正在操作系統(tǒng)將正在C P U 上運(yùn)行的進(jìn)程停止并啟動(dòng)另一進(jìn)程時(shí),上運(yùn)行的進(jìn)程停止并啟動(dòng)另一進(jìn)程時(shí),我們稱這一轉(zhuǎn)換為我們稱這一轉(zhuǎn)換為上下文切換(上下文切換(context switch )。26
24、協(xié)議實(shí)現(xiàn)的問題協(xié)議實(shí)現(xiàn)的問題 在設(shè)計(jì)一個(gè)網(wǎng)絡(luò)子系統(tǒng)時(shí),首先要回答的問題在設(shè)計(jì)一個(gè)網(wǎng)絡(luò)子系統(tǒng)時(shí),首先要回答的問題之一是,之一是,“進(jìn)程在哪兒?進(jìn)程在哪兒?”基本上有兩種選擇,基本上有兩種選擇,如圖所示。如圖所示。 第一種選擇,我們稱為第一種選擇,我們稱為進(jìn)程進(jìn)程/協(xié)議協(xié)議(p ro c e s s - p e r- p ro t o c o l )模型,每個(gè)協(xié)議由一個(gè)獨(dú)立)模型,每個(gè)協(xié)議由一個(gè)獨(dú)立的進(jìn)程實(shí)現(xiàn)。這就意味著當(dāng)一條消息向協(xié)議棧的的進(jìn)程實(shí)現(xiàn)。這就意味著當(dāng)一條消息向協(xié)議棧的上方或下方移動(dòng)時(shí),它被從一個(gè)進(jìn)程上方或下方移動(dòng)時(shí),它被從一個(gè)進(jìn)程/協(xié)議傳送到協(xié)議傳送到另一個(gè)進(jìn)程另一個(gè)進(jìn)程/協(xié)議,即實(shí)
25、現(xiàn)協(xié)議協(xié)議,即實(shí)現(xiàn)協(xié)議i 的進(jìn)程處理這個(gè)的進(jìn)程處理這個(gè)消息,然后把它傳給協(xié)議消息,然后把它傳給協(xié)議i -1 ,以此類推。一個(gè),以此類推。一個(gè)進(jìn)程進(jìn)程/協(xié)議如何向下一個(gè)進(jìn)程協(xié)議如何向下一個(gè)進(jìn)程/協(xié)議傳遞消息依賴協(xié)議傳遞消息依賴于主機(jī)操作系統(tǒng)提供的進(jìn)程間通信的支持。通常于主機(jī)操作系統(tǒng)提供的進(jìn)程間通信的支持。通常有一個(gè)簡(jiǎn)單的機(jī)制把消息與進(jìn)程排隊(duì)。然而,重有一個(gè)簡(jiǎn)單的機(jī)制把消息與進(jìn)程排隊(duì)。然而,重要的一點(diǎn)是,協(xié)議圖的每一層都要求上下文切換,要的一點(diǎn)是,協(xié)議圖的每一層都要求上下文切換,這是一個(gè)典型的耗時(shí)操作。這是一個(gè)典型的耗時(shí)操作。27協(xié)議實(shí)現(xiàn)的問題協(xié)議實(shí)現(xiàn)的問題 我們把另一種稱為我們把另一種稱為進(jìn)程進(jìn)
26、程/消息消息(p ro c e s s - p e r-me s s a g e )模型,它把每個(gè)協(xié))模型,它把每個(gè)協(xié)議當(dāng)做一段靜態(tài)編碼并把進(jìn)程同消息聯(lián)系議當(dāng)做一段靜態(tài)編碼并把進(jìn)程同消息聯(lián)系起來。也就是說,當(dāng)網(wǎng)絡(luò)送來一條消息時(shí),起來。也就是說,當(dāng)網(wǎng)絡(luò)送來一條消息時(shí),操作系統(tǒng)調(diào)度一個(gè)進(jìn)程,使之負(fù)責(zé)消息在操作系統(tǒng)調(diào)度一個(gè)進(jìn)程,使之負(fù)責(zé)消息在協(xié)議圖中向上移動(dòng)。在每一層,調(diào)用實(shí)現(xiàn)協(xié)議圖中向上移動(dòng)。在每一層,調(diào)用實(shí)現(xiàn)該協(xié)議的過程,然后調(diào)用實(shí)現(xiàn)下一個(gè)協(xié)議該協(xié)議的過程,然后調(diào)用實(shí)現(xiàn)下一個(gè)協(xié)議的過程,以此類推。對(duì)于輸出的消息,應(yīng)的過程,以此類推。對(duì)于輸出的消息,應(yīng)用程序調(diào)用必要的過程,直到消息被送入用程序調(diào)用
27、必要的過程,直到消息被送入網(wǎng)絡(luò)。在兩個(gè)方向中,協(xié)議圖都被一系列網(wǎng)絡(luò)。在兩個(gè)方向中,協(xié)議圖都被一系列過程調(diào)用一遍。過程調(diào)用一遍。28協(xié)議實(shí)現(xiàn)的問題協(xié)議實(shí)現(xiàn)的問題 結(jié)論:結(jié)論: 雖然有時(shí)感覺進(jìn)程雖然有時(shí)感覺進(jìn)程/協(xié)議模型比較容易,即我在我的協(xié)議模型比較容易,即我在我的進(jìn)程中實(shí)現(xiàn)我的協(xié)議,而你在你的進(jìn)程中實(shí)現(xiàn)你的協(xié)進(jìn)程中實(shí)現(xiàn)我的協(xié)議,而你在你的進(jìn)程中實(shí)現(xiàn)你的協(xié)議。議。 但由于一個(gè)簡(jiǎn)單的原因,進(jìn)程但由于一個(gè)簡(jiǎn)單的原因,進(jìn)程/消息模型通常更有效:消息模型通常更有效:即在大多數(shù)計(jì)算機(jī)上,過程調(diào)用的效率比上下文切換即在大多數(shù)計(jì)算機(jī)上,過程調(diào)用的效率比上下文切換高一個(gè)數(shù)量級(jí)。高一個(gè)數(shù)量級(jí)。 第一種模型要求每一層有一個(gè)上下文切換,而第二第一種模型要求每一層有一個(gè)上下文切換,而第二種模型只要求每一層有一個(gè)進(jìn)程調(diào)用。種模型只要求每一層有一個(gè)進(jìn)程調(diào)用。29協(xié)議實(shí)現(xiàn)的問題協(xié)議實(shí)現(xiàn)的問題 大多數(shù)協(xié)議實(shí)現(xiàn)用大多數(shù)協(xié)議實(shí)現(xiàn)用d e l i v e r 操作代替操作代替r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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í)倉(cāng)儲(chǔ)設(shè)施租賃及管理服務(wù)合同
- 標(biāo)準(zhǔn)新工程設(shè)計(jì)合同樣本
- 2024年多人合伙共盈合同書范本
- 2024年度智能倉(cāng)庫(kù)設(shè)備安裝合同
- 代銷協(xié)議書范例2024
- 全面房屋裝修合同模板集成
- 出口業(yè)務(wù)代理協(xié)議范本
- 2024物流合同范本
- 常見勞務(wù)派遣委托協(xié)議樣本
- 廣州建設(shè)工程裝修施工合同范例
- 雅魯藏布江大拐彎巨型水電站規(guī)劃方案
- 廣西基本醫(yī)療保險(xiǎn)門診特殊慢性病申報(bào)表
- 城市經(jīng)濟(jì)學(xué)習(xí)題與答案
- 國(guó)開成本會(huì)計(jì)第14章綜合練習(xí)試題及答案
- 幼兒園大班科學(xué):《樹葉為什么會(huì)變黃》課件
- 1到50帶圈數(shù)字直接復(fù)制
- 鐵路工程施工組織設(shè)計(jì)(施工方案)編制分類
- 幼兒園中班數(shù)學(xué)《有趣的圖形》課件
- 《規(guī)劃每一天》教案2021
- 草莓創(chuàng)意主題實(shí)用框架模板ppt
- 山大口腔頜面外科學(xué)課件第5章 口腔種植外科-1概論、口腔種植的生物學(xué)基礎(chǔ)
評(píng)論
0/150
提交評(píng)論