2012年10月27日 星期六

HW 1.FTP的使用流程與解釋 2.recursive call vs iterated call 之差別性(用N階來做舉例兩者之間的差異)

1.FTP的使用流程與解釋
  文件傳輸協議(File Transfer Protocol, FTP)是一個用於在兩台裝有不同作業系統的機器中傳輸電腦文件的軟體標準。它屬於網路協議組的應用層。FTP是一個8位的客戶端-伺服器協議,能操作任何類型的文件而不需要進一步處理,就像MIME或Unencode一樣。但是,FTP有著極高的延時,這意味著,從開始請求到第一次接收需求數據之間的時間會非常長,並且不時的必需執行一些冗長的登陸進程


主動模式(Active Mode)
FTP Client 隨機選擇的TCP port(通常>1024)呼叫FTP server 的port 21請求連線。進行「TCP Three-Way Handshake」當順利完成「TCPThree-Way Handshake」之後,便建立「命令連線」的通道,這個連線通道僅能進行FTP 的「指令」。
1    

被動模式(Passive Mode)
建立「命令連線」的通道的方式和主動模式一樣,但是如果需要資料傳送,就是要建立「資料連線」通道時,Client 會送出PASVPassive)指令,告訴FTP Server,要利用被動模式建立「資料連線」通道。
FTP Server 收到PASV 指令時,便會在某個>1024 port Listen,等待
2
FTP Client 來建立資料連線通道,並利用命令連線通道告知FTP
Client:「我在那個Port 上等你連線」。
然後 FTP Client 會隨機再選一個>1024 port FTP Server 所告知port進行Three-Way Handshake 並建立「資料連線」通道連線。因為這種「資料連線」通道建立方式是FTP Server 被動等FTP Client 來連線,故稱為「被動模式(Active Mode)」。

2.recursive call vs iterated call 之差別性(用N階來做舉例兩者之間的差異)
   recursive:
      所謂遞迴就是允許一個 Procedure 或 Function 呼叫自己本身。當然,他不能無限制地呼叫自己,否則將造成無窮迴圈,所以它都會伴隨一個「終止狀況」(Termination Condition),當程序執行至此終止狀況成立時,便不再呼叫自己,而獲得所求,並傳遞迴呼叫端。

iterated:
      概念上,就是有某 個變數,它的值被一次又一次地代換成新的數值, 而每次代換之後都做同樣的動作。 通常程式語言提供三種迭代的語法:for 迴圈、while 迴圈和 do-until 迴圈。 在此我們先講 for 迴圈 (for-loop)。 技術上,我們要學習各種程式語言所提供的迭代語法。

2012年10月20日 星期六

HW 1.找一個HTML語法的 (Client-Server) programming 然後對這支程式內容做解釋 2.如何提高Cache的hit ratio?

1.找一個HTML語法的 (Client-Server) programming 然後對這支程式內容做解釋
    <!-- Search Google -->
<center>
<form method=get action="http://www.google.com/search">
<table bgcolor="#FFFFFF"><tr><td>
<a href="http://www.google.com">
<img src="http://www.google.com/logos/Logo_40wht.gif" border="0" 
alt="Google" align="absmiddle"></a>
<input type=text name=q size=31 maxlength=255 value="">
<input type=hidden name=ie value=Big5>
<input type=hidden name=oe value=Big5>
<input type=hidden name=hl value=zh-TW>
<input type=submit name=btnG value="Google搜尋">
</td></tr></table>
</form>
</center>
<!-- Search Google -->
讓網頁具有 Google 搜尋功能
標準語法:<a href="想連結網址">連結地的名稱</a>===可與其它網站連結

2.如何提高Cache的hit ratio?
     絕大部分CPU都有一個cache,許多CPU還有二級cache(相對於一級cache,二級cache容量大一些,但是速度慢一些)。如果在訪問數據時,數據沒有在cache中,則成為cache沒有命中(cache miss),這是需要將數據從內存加載到cache中,這個過程非常慢,因此要盡量保證cache的命中。
如果提高cache的命中率呢?要將頻繁訪問的數據集中存放:將頻繁訪問的數據按照順序保存,而不要使用指針。這樣,最常用的數據會盡可能的保存在一級cache中。順序訪問數據:在cache miss後,包含需要訪問數據在內的一段數據會被加載到cache中,如果順序訪問,就可以提高cache的命中。避免同時遍歷多個比較大的數據buffer:多個緩衝區在cache上互相衝突對導致cache miss的概率提高。

2012年10月12日 星期五

HW-1.IPC相關應用與解釋 2.program counter 如何時做 在電腦中應用在哪 3.找一個Socket programming 然後對這支程式內容做解釋

1.IPC相關應用與解釋
         進程間通信IPCInter-Process Communication),指至少兩個進程線程間傳送數據或信號的一些技術或方法。線程是計算機系統分配資源的最小單位。每個進程都有自己的一部分獨立的系統資源,彼此是隔離的。為了能使不同的進程互相訪問資源並進行協調工作,才有了進程間通信。這些進程可以運行在同一計算機上或網絡連接的不同計算機上。進程間通信技術包括消息傳遞、同步、共享內存和遠程過程調用。IPC是一種標準的Unix通信機制。
  

實作:命名和匿名管道信號標共享內存消息隊列.....


2.program counter 如何時做 在電腦中應用在哪(需寫出與compiler and linking loader and assmbler 之間的關係)
          程序計數器英語Program counter),或在某些 電腦中稱為指令指標Instruction Pointer),是在電腦 處理器中的一個 暫存器,用來指示電腦正在執行的指令序列。依照特定機器的細節而不同,他可能是保存著正在被執行的指令,也可能是下一個要執行指令的地址。程式計數器在每個指令週期會自動地增加,所以指令會正常地從暫存器中連續地被取出。某些指令,像是跳躍和子程序呼叫,會中斷程序執行的序列,將新的數值內容存放到程序計數器中。在大部分的處理器,指令指標都是在提取程式指令後就被立即增加;也就是說跳躍指令的目的位址,是由跳躍指令的運算元加上跳躍指令之後下一個指令的位址 (位元或位元組,是電腦形態而定) 來獲得目的地。

3.找一個Socket programming 然後對這支程式內容做解釋
       

主從式架構模型(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是通訊的端點,好比是電腦的網路介面卡,使得網路應用程式可以像介面卡插在主機板上一樣,插入網路中。一般說來你只會有一片網路卡在電腦中,但是你可以有許多sockets,而且它們也可以同時使用一片網路卡。用戶端與伺服器端都需要一個socket以存取網路資料,使用socket()函式呼叫就可開啟一個socket。(如圖一所示)
  • 為socket命名:
              伺服器端的程式必須為它的socket命名,這樣用戶端才能找到並正確地辨識出它的socket,如果伺服器沒有替它的socket命名,則協定堆疊會拒絕用戶端要通訊的請求。要幫socket取名必須設定三個參數:協定、連結埠號碼、及位址,而用戶端就要用這些值來和伺服器建立連結。要為socket命名,伺服器必須為socket位址結構設初始值並呼叫bind()函式,以指定本身連結埠號碼和IP位址,完成命名的工作。
  • 與另一個socket結合:
              假設我們在用戶端與伺服器端均開啟一個socket,並至少為伺服器端的socket命名。接下來伺服器要準備接收封包,而用戶端要準備發送封包,當此準備工作完成後,此兩端的sockets就叫建立一個”結合”(association)。如何為結合此兩端的socket做準備呢?在WinSock API中提供了幾個函式來完成此動作。在伺服器端則以呼叫listen()來準備接受用戶端送來的連結要求,如果收到連線要求,則開啟另一個新的socket來和用戶端進行連線(使用accept()函式);而在用戶端則是呼叫connect()函式與伺服器端的socket完成結合。
  • 在sockets間收送資料:
                此時我們已經在用戶端和伺服器的sockets間建立了結合,也就是說,我們已經可以開始收送資料了。如何收送資料呢?在一個已連結的socket上收送資料可呼叫recv()與send()來完成;而在一個無連結的socket上收送資料可呼叫recvfrom()與sendto()來完成。
  • 關閉socket
            當用戶端完成收送資料且往後並不會在使用時,必須關閉socket,對TCP socket而言,關閉socket除了將socket的資源還給協定堆疊,此外並嘗試將以建立的連結關閉。但對UDP socket而言,則是單純地將資源還給協定堆疊。關閉socket可呼叫closesocket()來完成。
TCP Socket Connection
UDP Socket Connectoin
圖一 Socket程式簡圖

2012年10月5日 星期五

HW.舉例 transparent and virtual的應用

 transparent透通
           意思實際上有,但是使用時感覺它好像不存在
           例開車時你不必了解車的內部構造零件 .你也可以開車
 virtual虛擬
           意思實際不存在,但在使用時存在
              例虛擬記憶體,你並沒有那麼多的記憶體,但你卻能使用到它