program counter(PC)
通常被稱為英特爾的x86和安騰微處理器的指令指針(IP),有時也被稱為 指令暫存器(IAR)[ 1 ]或只是其中的一部分指令定序,[ 2 ]是一個處理器的寄存器指示在計算機在其程序序列。
在大多數的處理器,PC遞增後取指令,並持有(“點”)將被執行的下一條指令的內存地址。(遞增之前的獲取,PC指向當前正在執行的指令的處理器。)
指令通常取順序從內存中,但控制權轉移指令改變PC放入一個新值序列。這些措施包括分支(有時也被稱為跳躍),子程序調用,並返回。一個傳輸的一些斷言的真理是有條件的,可以讓電腦按照不同的順序在不同的條件下。
一個分支的下一個指令是從別的地方在內存中取出。子程序調用中不僅分支,但保存前,PC的內容的地方。一個返回檢索保存的內容,並把它的PC在PC,恢復後的指令順序執行的子程序調用。
IPC
行程間通訊(IPC,Inter-Process Communication),指至少兩個行程或緒程間傳送資料或訊號的一些技術或方法。緒程是電腦系統分配資源的最小單位。每個行程都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的行程互相存取資源並進行協調工作,才有了行程間通訊。這些行程可以執行在同一電腦上或網路連線的不同電腦上。
行程間通訊技術包括訊息傳遞、同步、共享記憶體和遠端程序呼叫。IPC是一種標準的Unix通訊機制。
使用IPC 的理由:
- 資訊共享
- 加速;
- 模組化;
- 方便; 以及
- 私有權分離.
Socket Programming
何謂socket
從網路的角度來看,socket就是通訊連結的端點;從程式設計者的角度來看,socket提供了一個良好的介面,使程式設計者不需知道下層網路協定運作的細節便可以撰寫網路通訊程式。
Windows Socket是以實作於Berkeley Software Distribution(BSD, release 4.3)中的UNIX sockets為基礎所發展出來的一套API,其不僅支援TCP/IP,對於 XeroxR Network System (XNS),Digital Equipment Corporation's DECNet protocol,NovellR Corporation's Internet Packet Exchange/Sequenced Packed Exchange(IPX/SPX) 亦可以支援。此外也提供機器碼的相容性,因此在不同的作業系統上移植時並不需要做任何修改。
Windows Socket API是一套動態連結函式庫(DLL),即程式在編譯時期並不會和這些函式庫連結,而是等到執行期間才會呼叫這函式。
Sockets的分類
在TCP/IP架構下,sockets可分為下面兩類:
(1)Datagram sockets(connectionless)
資料在datagram sockets間是利用UDP封包傳送,因此接收端socket可能會收到次序錯誤的資料,且其中部分資料亦可能會遺失。
(2)Stream sockets(connection-oriented)
資料在stream sockets間是利用TCP封包來傳送,因此接收端socket可以收到順序無誤、無重覆、正確的資料。此外TCP傳送時是採資料流的方式,因在傳送時會所有資料會視情況被分割在數個TCP封包中。
主從式架構模型(Client/Server model)
每個網路應用程式都有一個通訊端點,一種端點是用戶端,另一種是伺服器。根據定義,用戶端會先送出第一個封包,由一個伺服器接收。在初步接觸後,用戶端和伺服器均能開始收送資料。
依據socket所提供的服務來將它分類,然而在用戶端和伺服器上的這兩個sockets必須是同一類才能互相通訊,也就是說,他們必須都是stream(TCP)或都是datagram(UDP)。用戶端的應用程式必須要能找到並識別伺服器的socket,而伺服器會將它的socket命名以讓用戶端識別,就TCP/IP而言,一個socket name包括了IP位址、連結埠編號、以及協定本身。用戶端可用Windows Sockets的名稱伺服函式來查到標準伺服器的連結埠編號,而如果知道伺服器的主機名,則可以Windows Sockets的主機名稱分析函式,來查得伺服器的IP。當用戶端socket成功地聯繫上伺服器端之socket後,這兩者便形成一個“結合”(association)。在此時,每個socket都可以由它的名字及對方的名字所形成的組合加以識別。這個結合包括五個要素:所用的協定、用戶端IP位址、用戶端連結埠號碼、伺服器端IP位址、伺服器端連結埠號碼。這個“結合”的觀念並不只是Windows Sockets程式設計的基礎,它也是一般網路通訊的重要觀念。在結合中的資訊可識別及引導封包通過網路,從這一端的程式傳至另一端。
所有的網路應用程式皆可分為五個步驟:
- 開啟一個socket
- 為socket命名
- 與另一個socket結合
- 在sockets間收送資料
- 關閉socket