計算機網絡和操作系統常見問題私人memo

本文僅僅是私人memo,由於時間原因存在一些排版問題,本人將抽空重排版並對大概進行擴展。

中斷和輪詢的特點:

    都是對IO設備程序輪詢的方式,是早期計算機系統對IO設備的一種管理方式。定時對各種設備輪詢問一遍有無處理請求。輪詢之後,有要求的就處理,處理完後處理機繼續工作。
    輪詢需要時間,但是輪詢比IO設備速度快很多,但是比IO速度快很多。但是輪詢依然是效率很低的一種方式。
    程序中斷簡稱中斷,指CPU在正常運行程序的過程中,由於預先安排或者發生了各種隨機內部或者外部事件,使得CPU中斷正在運行的程序,而轉到爲響應服務程序去處理。
    輪詢--效率低 等待時間長 CPU利用率低
    中斷--容易遺漏一些問題 CPU利用率高

臨界區
    每個進程訪問臨界資源的那段程序成爲臨界區,每次只允許一個進程進入臨界區。
  (1)如果有若干進程要求進入空閒的臨界區,一次僅允許一個進程進入;
  (2)任何時候,處於臨界區內的進程不可多於一個。如已有進程進入自己的臨界區,則其它所有試圖進入臨界區的進程必須等待;
  (3)進入臨界區的進程要在有限時間內退出,以便其它進程能及時進入自己的臨界區;
  (4)如果進程不能進入自己的臨界區,則應讓出CPU,避免進程出現“忙等”現象。

分段、分頁
    頁是信息的物理單位,分也是爲實現離散分配方式,以效減內存的外零頭,提高內存利用率。或者說,分頁僅僅是由於系統管理的需要,不是用戶的需要。
    段是信息的邏輯單位,它含有一組意義相對完整的信息。目的是爲了能更好滿足用戶的需要。
    頁的大小固定而且由系統確定,把邏輯地址分爲頁號和業內地址兩部分,由及其硬件實現,因而一個系統只能有一個大小的頁面。
    段的長度不固定,取決於用戶編寫的程序,通常由編輯程序對源程序進行編輯時,根據信息的性質來劃分。
    分頁的作業地址空間是一維的,即單一的線性空間,程序員只需要利用一個記憶符就可以表示一個地址。
    分段的作業地址空間是二位的,程序員在標識一個地址時,需要給出段名的同事給出段內地址。

段頁式存儲
    分段式和分頁式結合的存儲組織方法,充分利用和結合分段和分頁管理的優點
    1、分段方法來分配和管理虛擬存儲器。
    2、分頁方法來分配和管理實際存儲塊。
    3、使用邏輯地址結構
    4、段表、頁表、段表地址寄存器。每個作業建立一個段表,並且該段表中每個段建立一個頁表。系統中有一個段表地址寄存器來指出作業的段表起始地址和段表長度。
段頁式存儲管理的優缺點
 優點
   (1) 它提供了大量的虛擬存儲空間。
   (2) 能有效地利用主存,爲組織多道程序運行提供了方便。
缺點:
   (1) 增加了硬件成本、系統的複雜性和管理上的開消。
   (2) 存在着系統發生抖動的危險。
   (3) 存在着內碎片。
   (4) 還有各種表格要佔用主存空間。
 段頁式存儲管理技術對當前的大、中型計算機系統來說,算是最通用、最靈活的一種方案。

頁面置換算法
    進程進行時,若訪問的頁面不在內存而需要調入,但是內存無空閒空間時,需要從內存中調出一夜程序或者數據,進入磁盤兌換區。
    選擇調出頁面的算法就是頁面置換算法。好的置換算法應該由較低的頁面更換頻率。
    1、最佳置換算法(OPT)
    淘汰以後最長時間不再被訪問的頁面,以確保最低的缺頁率。由於人們無法預知將要需要哪些頁面,因此無法實現,但是這是衡量其他算法的算法。
    2、先進先出算法(FIFO)
    淘汰最先進入內存的頁面,也就是停留內存最久的頁面。
    3、最近最久未使用算法(LRU)
    淘汰最長時間未訪問過的頁面。

進程調度算法
    1、(先來先服務)FCFS 非搶佔式的先來先服務算法
    優點:簡單 只需要一個隊列 而且公平
    缺點:有利於長進程 不利於短進程 有利於CPU繁忙的進程 不利於IO繁忙的進程
    2、(最短作業優先)SJF 目標是減少平均週轉時間
    對預計指向時間短的進程優先分派處理機。
    優點:相比FCFS算法,該算法可改善平均週轉時間和平均帶權週轉時間,縮短進程等待時間,提高吞吐量。
    缺點:對長進程不利,可能長時間得不到執行,且不能更具優先級來決定進程的調度。
    3、最高響應比優先法(HRNN) FCFS和SJF的一種綜合平衡。HRN同時考慮每個作業的等待時間長短和估計需要執行的時間長短,選出響應比最高的進行執行。
    優點:使得長作業也有機會投入執行
    缺點:每次調度都要計算響應比 系統開銷也要增加
    4、時間片輪轉算法(RR)
    最公平、最古老、最簡單、使用最廣的算法,又稱RR調度。每個進程被分配一個時間片,這是給他執行的時間。
    讓進程以FCFS方式按時間片輪流使用CPU調度方式,將進程按照FCFS排成隊列,每次調度將CPU分派給首進程,執行一個時間片。時間片結束髮生時鐘中斷,
    根據程序暫停當前進程的執行,將其送到就緒隊列的末尾,通過上下文切換執行當前的隊首進程,進程可以未使用完一個時間片就讓出CPU。
    優點:簡單 平均響應時間短
    缺點:不利於處理緊急作業,時間片大小對性能影響很大。
    時間片大小的確定
        1.系統對響應時間的要求
        2.就緒隊列中進程的數目
        3.系統的處理能力
    5、多級反饋隊列(MFQ) UNIX採用這種調度算法
        1、進程在進入待調度的隊列等待時,首先進入優先級最高的Q1等待。
        2、首先調度優先級高的隊列中的進程。若高優先級中隊列中已沒有調度的進程,則調度次優先級隊列中的進程。
        3、對於同一個隊列中的各個進程,按照時間片輪轉法調度。比如Q1隊列的時間片爲N,那麼Q1中的作業在經歷了N個時間片後若還沒有完成,則進入Q2隊列等待,若Q2的時間片用完後作業還不能完成,一直進入下一級隊列,直至完成。
        4、在低優先級的隊列中的進程在運行時,又有新到達的作業,那麼在運行完這個時間片後,CPU馬上分配給新到達的作業(搶佔式)。
    
進程同步的幾種機制:信號量、管程、自旋鎖、會合、分佈式系統
    適合分佈式系統的同步機制有通信順序進程,會合,分佈式進程,遠程過程調用
    1、信號量(PV操作 P操作將信號量S減1,V操作將信號量S加1)信號量機制必須有公共內存,不能用於分佈式操作系統,這是它最大的弱點。
    2、管程 將共享變量和對它們的操作集中在一個模塊中,操作系統或併發程序就由這樣的模塊構成。這樣模塊之間聯繫清晰,便於維護和修改,易於保證正確性。
     從語言的角度看,管程主要有以下特性:
    (1)模塊化。管程是一個基本程序單位,可以單獨編譯;
    (2)抽象數據類型。管程是中不僅有數據,而且有對數據的操作;
    (3)信息掩蔽。管程外可以調用管程內部定義的一些函數,但函數的具體實現外部不可見;
    3、自旋鎖。調用者申請的資源如果被佔用,即自旋鎖被已經被別的執行單元保持,則調用者一直循環在那裏看是否該自旋鎖的保持着已經釋放了鎖。自旋鎖是一種比較低級的保護數據結構和代碼片段的原始方式,可能會引起以下兩個問題; 1、死鎖 2、過多地佔用CPU資源 傳統自旋鎖由於無序競爭會導致“公平性”問題。
    4、會和。進程直接相互作用。當一個任務調用另一個任務的入口,而且被調用者已經準備好接收這個調用,便發生了會合。
    5、分佈式進程。分佈式操作系統中沒有公共內存,參數全部爲值參。

一、進程間的通信方式
管道( pipe ):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程關係。
有名管道 (namedpipe) : 有名管道也是半雙工的通信方式,但是它允許無親緣關係進程間的通信。
信號量(semophore ) : 信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。
消息隊列( messagequeue ) : 消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
信號 (sinal ) : 信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。
共享內存(shared memory ) :共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的 IPC 方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號兩,配合使用,來實現進程間的同步和通信。
套接字(socket ) : 套解口也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同及其間的進程通信。
二、線程間的通信方式
鎖機制:包括互斥鎖、條件變量、讀寫鎖
 互斥鎖提供了以排他方式防止數據結構被併發修改的方法。
 讀寫鎖允許多個線程同時讀共享數據,而對寫操作是互斥的。
 條件變量可以以原子的方式阻塞進程,直到某個特定條件爲真爲止。對條件的測試是在互斥鎖的保護下進行的。條件變量始終與互斥鎖一起使用。
信號量機制(Semaphore):包括無名線程信號量和命名線程信號量
信號機制(Signal):類似進程間的信號處理
線程間的通信目的主要是用於線程同步,所以線程沒有像進程通信中的用於數據交換的通信機制。

Linux中常用到的命令
  顯示文件目錄命令ls        如ls
  改變當前目錄命令cd        如cd /home
  建立子目錄mkdir           如mkdir xiong
  刪除子目錄命令rmdir       如rmdir /mnt/cdrom
  刪除文件命令rm            如rm /ucdos.bat
  文件複製命令cp            如cp /ucdos /fox
  獲取幫助信息命令man      如man ls
  顯示文件的內容less        如less mwm.lx

一次完整的HTTP請求所經歷的7個步驟
HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列7個步驟:
1. 建立TCP連接
在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族,因此Internet又被稱作是TCP/IP網絡。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之後才能進行更高層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。
2. Web瀏覽器向Web服務器發送請求命令
一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令。例如:GET/sample/hello.jsp HTTP/1.1。
3. Web瀏覽器發送請求頭信息
瀏覽器發送其請求命令之後,還要以頭信息的形式向Web服務器發送一些別的信息,之後瀏覽器發送了一空白行來通知服務器,它已經結束了該頭信息的發送。
4. Web服務器應答
客戶機向服務器發出請求後,服務器會客戶機回送應答, HTTP/1.1 200 OK ,應答的第一部分是協議的版本號和應答狀態碼。
5. Web服務器發送應答頭信息
正如客戶端會隨同請求發送關於自身的信息一樣,服務器也會隨同應答向用戶發送關於它自己的數據及被請求的文檔。
6. Web服務器向瀏覽器發送數據
Web服務器向瀏覽器發送頭信息後,它會發送一個空白行來表示頭信息的發送到此爲結束,接着,它就以Content-Type應答頭信息所描述的格式發送用戶所請求的實際數據。
7. Web服務器關閉TCP連接
一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然後如果瀏覽器或者服務器在其頭信息加入了這行代碼:Connection:keep-alive
TCP連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了爲每個請求建立新連接所需的時間,還節約了網絡帶寬。

HTTP請求報文格式
    HTTP請求報文分爲三個部分 請求行、請求頭、請求體。
    請求行包括請求方法、請求地址、協議及版本 請求地址(url)包括協議、主機、路徑、參數
    請求頭用於傳遞一些附加信息 格式鍵: 值 冒號後面有個空格。

長連接和短連接
長連接:數據傳輸完成保持TCP連接不斷開(不發送RST包、不四次握手),等待在同域名下繼續使用這個通道傳輸數據,否則是短鏈接
長連接關閉:在HTTP請求報文首部加上Connection:close

OSI七層模型
    應用層 http ftp dns
    表示層 ASCLL PICT TIFF JPEG MIDI MPEG
    會話層 RPC SQL NFS ASP
    傳輸層 TCP UDP SPX
    網絡層 IP ICMP
    數據鏈路層 802.2 HDLC、FRAME RELAY
    物理層
 TCP三次握手和四次揮手的全過程

三次握手:
第一次握手:客戶端發送連接請求包(SYN=1,seq=x)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到連接請求包,必須發送響應包(ACK=1,ack=x+1),由於TCP是全雙工連接,所以同時自己也發送一個連接請求包(SYN=1,seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包(ACK=1,ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
握手過程中傳送的包裏不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。理想狀態下,TCP連接一旦建立,在通信雙方中的任何一方主動關閉連接之前,TCP 連接都將被一直保持下去。
四次握手:
與建立連接的“三次握手”類似,斷開一個TCP連接則需要“四次握手”。
第一次揮手:主動關閉方發送一個FIN,用來關閉主動方到被動關閉方的數據傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發數據了
(當然,在fin包之前發送出去的數據,如果沒有收到對應的ack確認報文,主動關閉方依然會重發這些數據),但是,此時主動關閉方還可 以接受數據。
第二次揮手:被動關閉方收到FIN包後,發送一個ACK給對方,確認序號爲收到序號+1(與SYN相同,一個FIN佔用一個序號)。
第三次揮手:被動關閉方發送一個FIN,用來關閉被動關閉方到主動關閉方的數據傳送,也就是告訴主動關閉方,我的數據也發送完了,不會再給你發數據了。
第四次揮手:主動關閉方收到FIN後,發送一個ACK給被動關閉方,確認序號爲收到序號+1,至此,完成四次揮手。

在瀏覽器中輸入www.baidu.com後執行的全部過程
1、客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48,通過這個IP地址找到客戶端到服務器的路徑。客戶端瀏覽器發起一個HTTP會話到220.161.27.48,然後通過TCP進行封裝數據包,輸入到網絡層。
2、在客戶端的傳輸層,把HTTP會話請求分成報文段,添加源和目的端口,如服務器使用80端口監聽客戶端的請求,客戶端由系統隨機選擇一個端口如5000,與服務器進行交換,服務器把相應的請求返回給客戶端的5000端口。然後使用IP層的IP地址查找目的端。
3、客戶端的網絡層不用關係應用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達服務器,期間可能經過多個路由器,這些都是由路由器來完成的工作,我不作過多的描述,無非就是通過查找路由表決定通過那個路徑到達服務器。
4、客戶端的鏈路層,包通過鏈路層發送到路由器,通過鄰居協議查找給定IP地址的MAC地址,然後發送ARP請求查找目的地址,如果得到迴應後就可以使用ARP的請求應答交換的IP數據包現在就可以傳輸了,然後發送IP數據包到達服務器的地址。

TCP和UDP的區別
TCP提供面向連接的、可靠的數據流傳輸,而UDP提供的是非面向連接的、不可靠的數據流傳輸。
TCP傳輸單位稱爲TCP報文段,UDP傳輸單位稱爲用戶數據報。
TCP注重數據安全性,UDP數據傳輸快,因爲不需要連接等待,少了許多操作,但是其安全性卻一般。

TCP可靠傳輸、流量控制和擁塞控制的實現
可靠傳輸:
對於收到的請求,給出確認響應
超時重傳
流量控制:
    所謂流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收。利用滑動窗口實現流量控制。也就是流水線中未確認分組數不能超過某個數N。
擁塞控制:
    所謂擁塞控制就是防止過多的數據注入到網絡中,這樣可以使網絡中的路由器或鏈路不致過載。    
慢開始
  慢開始的“慢”並不是指增長速率的慢,而是指在TCP開始發送報文段時先設置擁塞窗口爲1。
擁塞避免
  使擁塞窗口按線性規律增長。
快重傳
  發送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段,而不必繼續等待爲其設置的重傳計時器到期。
快恢復(與快重傳配合使用)
  當發送方連續收到三個重複確認時,就執行“乘法減小”算法,把慢開始門限減半。這是爲了預防網絡發生擁塞。請注意,接下來不執行慢開始算法。

DNS域名系統,簡單描述其工作原理。
    當DNS客戶機需要在程序中使用名稱時,它會查詢DNS服務器來解析該名稱。
    客戶機發送的每條查詢信息包括三條信息:包括:指定的DNS域名,指定的查詢類型,DNS域名的指定類別。
    基於UDP服務,端口53. 該應用一般不直接爲用戶使用,而是爲其他應用服務,如HTTP,SMTP等在其中需要完成主機名到IP地址的轉換。
    主機向本地域名服務器的查詢一般採用遞歸查詢。
    本地域名服務器向根服務器的查詢一般採用迭代查詢。    

ARP (Address Resolution Protocol) 是個地址解析協議。最直白的說法是:在IP以太網中,當一個上層協議要發包時,有了該節點的IP地址,ARP就能提供該節點的MAC地址。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章