0基礎入門Linux 運維,應該先掌握哪些知識?

Linux雲端計算資料自學發表於2019-02-25

640?


Linux作業系統概述

640?wx_fmt=png


Q1.什麼是GNU?Linux與GNU有什麼關係?

A:

1)GNU是GNU is Not Unix的遞迴縮寫,是自由軟體基金會(Free Software Foundation,FSF)的一個專案,該專案已經開發了許多高質量的程式設計工具,包括emacs編輯器、著名的GNU C和C++編譯器(gcc和g++);


2)Linux的開發使用了許多GNU工具,Linux系統上用於實現POSIX.2標準的工具幾乎都是由GNU專案開發的;Linux核心、GNU工具以及其它一些自由軟體組成了人們常說的Linux系統或Linux釋出版。


Q2.Linux系統由哪幾部分組成?Linux核心處於什麼位置?

A:

1)Linux系統由四個部分組成:使用者程式,系統呼叫介面、Linux核心子系統和硬體;


2)Linux核心處於使用者程式和硬體之間,包括系統呼叫介面和Linux核心子系統。


Q3.Linux核心由哪幾部分組成?各個子系統的主要功能是什麼?

A:

(1)Linux核心除系統呼叫外,由五個主要的子系統組成:程式排程、記憶體管理、虛擬檔案系統、網路和程式間通訊(IPC);


(2)各個子系統的主要功能為:
1)程式排程:它控制著程式對CPU的訪問,當需要選擇一個程式開始執行時,由排程程式選擇最應該執行的程式;
2)記憶體管理:它允許多個程式安全地共享主記憶體區域,支援虛擬記憶體;從邏輯上可以分為硬體無關的部分和硬體相關的部分;
3)虛擬檔案系統(VFS):它隱藏了各種不同硬體的具體細節,為所有裝置提供統一的介面,支援多達數十種不同的檔案系統,分為邏輯檔案系統和裝置驅動程式;
4)網路:它提供了對各種網路標準協議的存取和各種網路硬體的支援,分為網路協議和網路驅動程式兩部分;
5)程式間通訊:支援程式間各種通訊機制,包括共享記憶體、訊息佇列和管道等。


記憶體定址

640?wx_fmt=png


Q1.什麼是實體地址?什麼是虛地址?什麼是線性地址?

A:

1)將主機板上的實體記憶體條所提供的記憶體空間定義為實體記憶體空間,其中每個記憶體單元的實際地址就是實體地址;


2)將應用程式設計師看到的記憶體空間定義為虛擬地址空間(或地址空間),其中的地址就叫做虛擬地址(或虛地址),一般用“段:偏移量”的形式來描述,如A815:CF2D;


3)線性地址空間是指一段連續的、不分段的、範圍為0~4GB的地址空間,一個線性地址就是線性地址空間的一個絕對地址。


Q2.在保護模式下,MMU如何把一個虛地址轉換為實體地址?

A:

在保護模式下,記憶體管理單元(MMU)由一個或一組晶片組成,其功能是指虛擬地址對映為實體地址,即進行地址轉換;MMU是一種硬體電路,它包含分段部件和分頁部件兩個部件,分別叫做分段機制和分頁機制,分段機制是把一個虛擬地址轉換為線性地址,分頁機制是把一個線性地址轉換為實體地址。


Q3.為什麼對32位線性地址空間要採用兩級頁表?

A:

頁表是把線性地址對映到實體地址的一種資料結構,4GB的線性空間可以被劃分為1M個4KB大小的頁,每個頁表項佔4位元組,則1M個頁表項的頁表就需要佔用4MB空間,而且還要求是連續的,於是採用兩級頁表來實現;兩級頁表就是對頁表再進行分頁,第一級稱為頁目錄,其中存放關於頁表的資訊;4MB的頁表再次分頁,可以分為1K個4KB大小的頁。


Q4.頁面快取記憶體的作用是什麼?Linux為什麼主要採用分頁機制來實現虛擬儲存管理?它為什麼採用三級分頁模式而不是兩級?

A:

(1)頁面快取記憶體自動保留處理器最近使用的32項頁表項,因此可以覆蓋128KB範圍的記憶體;


(2)Linux主要採用分頁機制來實現虛擬儲存器管理,原因為:
1)Linux的分段機制使得所有的程式都使用相同的段暫存器,這使得記憶體管理變得簡單;
2)Linux的設計目標之一就是能夠被移植到絕大多數流行的處理平臺上,但許多RISC處理器支援的分段功能非常有限;為了保證可移植性,Linux採用三級分頁模式,因為許多處理器都採用64位結構;Linux定義了三種型別的頁表:頁目錄(PGD)、中間目錄(PMD)和頁表(PT)。


程式

640?wx_fmt=png


Q1.程式與程式的概念分別是什麼?為什麼要引入“程式”的概念?

A:

1)程式是一個普通檔案,是機器程式碼指令和資料的集合,這些指令和資料儲存在磁碟上的一個可執行映像中,可執行映像(executable image)就是一個可執行檔案的內容;


2)程式代表程式的執行過程,它是一個動態的實體,隨著程式中指令的執行而不斷地變化,在某個時刻程式的內容被稱為程式映像(process image);


3)程式的執行過程可以說是一個執行環境的總和,這個執行環境除了包括程式中各種指令和資料外,還有一些額外資料;而執行環境的動態變化體現了程式的執行,為了對動態變化的過程進行描述,就引入了“程式”概念。


Q2.什麼是程式控制塊?它包含哪些基本資訊?

A:

1)Linux中把對程式的描述結構叫做task_struct,將這樣的資料結構稱作程式控制塊(PCB);


2)PCB是一個其域多達80多項的相當龐大的資料結構,按其功能將所有域劃分為:狀態資訊,連結資訊、各種識別符號、程式間通訊資訊、時間和定時器資訊、排程資訊、檔案系統資訊、虛擬記憶體資訊和處理器環境資訊。


Q3.Linux核心的狀態有哪些?

A:

1)Linux最基本的程式狀態有三種:執行態、就緒態和阻塞態(或等待態);這三種狀態之間有四種可能的轉換關係:執行態->阻塞態、執行態->就緒態、就緒態->執行態和阻塞態->就緒態;


2)為了管理上的方便,將就緒態和執行態合併為一個狀態—可執行態,再包括其它方面的一些改變,將程式狀態劃分為:可執行態、睡眠(或等待)態(分為深度睡眠態和淺度睡眠態)、暫停狀態和僵死狀態。


Q4.PCB的組織方式有哪幾種?

A:

PCB的組織方式有:程式連結串列、雜湊表、可執行佇列和等待佇列。


Q5.主要的排程演算法包括哪些?一個好的排程演算法要考慮哪些方面?

A:

1)主要的排程演算法包括:時間片輪轉排程演算法、優先順序排程演算法(非搶佔式優先順序演算法和搶佔式優先順序演算法)、多級反饋佇列排程演算法和實時排程演算法;


2)一個好的排程演算法應該考慮五個方面:公平、高效、響應時間、週轉時間和吞吐量。


記憶體管理

640?wx_fmt=png


Q1.為什麼把程式的地址空間劃分為“核心空間”和“使用者空間”?

A:

Linux的虛擬地址空間的大小為4GB,核心將這4GB的空間分為兩部分,較高的1GB(虛地址0xC0000000到0xFFFFFFFF)供核心使用,稱為“核心空間”;而較低的3GB(虛地址0x00000000到0xBFFFFFFF)供各個程式使用,稱為“使用者空間”;因為每個程式可以通過系統呼叫進入核心,因此,核心空間由系統內的所有程式共享;於是,從具體程式的角度來看,每個程式都可以擁有4GB的虛擬地址空間(也叫做虛擬記憶體)。
 


Q2.Linux是如何實現“請求調頁”的?

A:

1)如果被訪問的頁不在記憶體,也就是說,這個頁還沒有被存放在任何一個物理頁面中,那麼,核心分配一個新的頁面並將其適當地初始化,這種技術稱為“請求調頁”;


2)“請求調頁”是一種動態記憶體分配技術,它將頁面的分配推遲到不能再推遲為止,也就是說,一直推遲到程式要訪問的頁不在實體記憶體時為止,由此引起一個缺頁異常;該技術的引入主要是因為程式開始執行時並不訪問其地址空間中的全部地址。


中斷和異常

640?wx_fmt=png


Q1.什麼是中斷?什麼是異常?二者有何不同?

A:

1)中斷控制是為克服對I/O介面採用程式查詢控制服務方式所帶來的處理器低效率而產生的,它的主要優點是隻有在I/O介面需要服務時才能得到處理器的響應,而不需要處理器不斷地進行查詢;因此,最初的中斷全部是對外部裝置而言的,稱為外部中斷(或硬體中斷);


2)異常也叫做內部中斷,它是為解決機器執行時所出現的某些隨機事件及程式設計的方便而出現的;


3)中斷分為外部可遮蔽中斷(INTR)和外部非遮蔽中斷(NMI),所有I/O裝置產生的中斷請求(IRQ)均引起可遮蔽中斷,而緊急事件(如硬體故障)引起的故障則產生非遮蔽中斷;


4)異常又分為故障(fault)和陷阱(trap),它們的共同特點是既不使用中斷控制器,又不能被遮蔽(異常其實是CPU發出的終端訊號)。


Q2.什麼是中斷向量?Linux是如何分配中斷向量的?

A:

(1)為使處理器可以容易地識別每種中斷源,將256種向量中斷從0到255進行編號,即賦以一箇中斷型別碼n,把這個8位的無符號整數叫做向量,即中斷向量;


(2)Linux對256箇中斷向量的分配如下:
1)編號為0~31的向量對應於異常和非遮蔽中斷;
2)編號為32~47的向量(即由I/O裝置引起的中斷)分配給可遮蔽中斷;
3)剩餘的、編號為48~255的向量用來標識軟中斷;Linux只用其中的一個(即128或0x80向量)來實現系統呼叫。


Q3.什麼是中斷描述符表?什麼是門描述符?

A:

1)在實地址模式下,CPU將記憶體中從0開始的1KB空間作為一箇中斷向量表,表中每個表項佔4個位元組;但在保護模式,由4個位元組的表項構成的中斷向量表滿足不了要求;因此在保護模式下,中斷向量表中的表項由8個位元組組成,中斷向量表也改稱為中斷描述符表(IDT);


2)IDT中的每個表項叫做一個門描述符(gate descriptor)。


Q4.門描述符有哪些型別?它們有什麼不同?

A:

門描述符中型別碼佔3位,表示門描述符的型別,主要分為以下幾類:
1)中斷門(interrupt gate):其型別碼為110,包含了一箇中斷或異常處理程式所在段的選擇符和段內偏移量;


2)陷阱門(trap gate):其型別碼為111;


3)系統門(system gate):是Linux核心特別設定的,用來讓使用者態的程式訪問陷阱門。


系統呼叫

640?wx_fmt=png


Q1.什麼是系統呼叫?為什麼要引入系統呼叫?

A:

(1)作業系統為使用者態的程式與硬體裝置(如CPU、磁碟和印表機等)之間的互動提供了一組介面,這些介面使得程式更具有可移植性,因為不同的作業系統只要所提供的一組介面相同,那麼在這些作業系統之上就可以正確地編譯和執行相同的程式,這組介面就是所謂的“系統呼叫”;


(2)引入系統呼叫的原因有:
1)這使得程式設計更加容易;
2)這極大地提高了系統的安全性;
3)最重要的一點,這些介面使得作業系統更具有可移植性。


核心中的同步

640?wx_fmt=png


Q1.什麼是臨界區?什麼是競爭狀態?什麼是同步?

A:

1)臨界區(critical regions)就是訪問和操作共享資料的程式碼段,多個核心任務併發訪問同一個資源通常是不安全的;


2)如果兩個核心任務可能處於同一個臨界區,就是一種錯誤現象;如果確實發生了這種情況,就稱它為競爭狀態;


3)避免併發和防止競爭狀態稱為同步(synchronization)。


Q2.簡要介紹一下死鎖及避免死鎖的方法。

A:

死鎖包括自死鎖和ABBA死鎖,
1)產生死鎖有四個原因:互斥使用、不可搶佔、請求和保持,以及迴圈等待;


2)避免死鎖的方法有:破壞“不可剝奪”條件、破壞“請求和保持”條件、破壞“迴圈等待”條件。


Q3.核心中造成併發執行的原因是什麼?

A:

“併發”分為“偽併發”和“真併發”兩種,核心中造成併發執行的原因有以下幾種:
1)中斷:它可能隨時打斷當前正在執行的程式碼;


2)核心搶佔:核心中的任務可能會被另一個任務搶佔;


3)睡眠及其與使用者空間的同步:在核心執行的程式可能會睡眠,這就會喚醒排程程式,排程一個新的使用者程式執行;


4)對稱多處理:兩個或多個處理器可以同時執行程式碼。


Q4.給出訊號量的定義,並說明down()和up()的含義。
A:

1)Linux中的訊號量是一種睡眠鎖,它是1968年由Dijkstra提出的,如果一個任務試圖獲得一個已被持有的訊號量,訊號量會將其推入等待佇列,然後讓其睡眠;當持有訊號量的程式將訊號量釋放後,在等待佇列中的一個任務將被喚醒,從而可以獲得這個訊號量;


2)訊號量支援兩個原子操作P()和V(),前者叫做測試操作,後者叫做增加操作;後來的系統把這兩種操作分別叫做down()和up();


3)down()操作通過對訊號量計數減1來請求獲得一個訊號量;up()操作用來釋放訊號量,該操作也被稱作“提升”(upping)訊號量,因為它會增加訊號量的計數值。


檔案系統

640?wx_fmt=png


Q1.Linux目錄樹結構是怎樣的?它與Windows的目錄樹結構有什麼區別?為什麼Linux的檔案系統採用固定的目錄形式?

A:

檔案是一個抽象的概念,它是存放一切資料或資訊的倉庫;


1)Linux的目錄樹結構為:根目錄(/)在上,其它的平行在下;


2)Windows作業系統也是採用樹型結構,但其樹型結構的根是磁碟分割槽的碟符,有幾個分割槽就有幾個樹型結構,它們之間的關係式並列的;而在Linux中,無論作業系統管理幾個磁碟分割槽,這樣的目錄樹只有一個;


3)這樣做的原因是:Linux是一個多使用者系統,制定這樣一個固定的目錄規劃有助於對系統檔案和不同的使用者檔案進行統一管理;


4)Linux中的檔案型別包括:常規檔案、目錄檔案、裝置檔案、管道檔案和連結檔案。


Q2.什麼是虛擬檔案系統?什麼是虛擬檔案系統介面?

A:

1)將各種不同檔案系統的操作和管理納入到一個統一的框架中,使得使用者程式可以通過同一個檔案系統介面,也就是同一組系統呼叫,對各種不同的檔案系統以及檔案進行操作;使用者程式可以不關心不同檔案系統的實現細節,而使用系統提供的統一、抽象、虛擬的檔案系統介面;這種統一的框架就是所謂的虛擬檔案系統轉換,一般簡稱虛擬檔案系統(VFS);


2)VFS的物件型別包括:超級塊(superblock)物件、索引節點(inode)物件、目錄項(dentry)物件和檔案(file)物件;


3)虛擬檔案系統介面是虛擬檔案系統所提供的抽象介面,它主要由一組標準的、抽象的操作構成,這些函式(操作)以系統呼叫的形式供使用者呼叫。


裝置驅動

640?wx_fmt=png


Q1.為什麼把裝置分為“塊裝置”和“字元裝置”兩大類?
A:

1)Linux將裝置看成檔案,具有三方面的含義:第一,每個裝置都對應一個檔名,在核心中也就對應一個索引節點;第二,對檔案操作的系統呼叫大都適用於裝置檔案;第三,從應用程式的角度看,裝置檔案的邏輯空間是一個線性空間;對於同一個具體的裝置而言,檔案操作和裝置驅動是同一個事物的不同層次,概念上可以將一個系統劃分為應用、檔案系統和裝置驅動三個層次;


2)Linux將裝置分為兩大類,一類是像磁碟那樣的以塊或扇區為單位、成塊進行輸入/輸出的裝置,稱為塊裝置;另一類是像鍵盤那樣以字元(位元組)為單位,逐個字元進行輸入/輸出的裝置,稱為字元裝置;檔案系統通常都建立在塊裝置上。


Q2.什麼是裝置驅動程式?

A:

Linux中處理和管理硬體控制器的軟體就是裝置驅動程式。


Q3.I/O埠一般包括哪些暫存器?各自功能是什麼?

A:

1)I/O埠包括控制暫存器、狀態暫存器和資料暫存器三大類;


2)根據訪問外設暫存器的不同方式,將CPU分為兩大類:一類是“記憶體對映”(memory-mapped)方式,另一類是“I/O對映”(I/O- mapped)方式。

來自:大師兄

連結:http://www.daxixiong.com/?/article/9

作者:周兆熊(微信公眾號:zhouzxi )

640?wx_fmt=other

雲端計算免費課程火熱開講中,5天運維經典課程免費學,會雲端計算的運維人才到底需要掌握哪些技術,未來前景發展怎麼樣?跟隨行業大咖一起剖根究底,點選文末“閱讀原文”長按下方二維碼即可報名免費課程抓住免費學習的機會,逆襲2019~~

 640?wx_fmt=png

PS:記得查收小編送你的免費大禮包呦~

福利 | 一萬多套PPT模板等你免費來拿!無條件領取!

免費送 | 1000多套簡歷模板免費拿,附贈簡歷製作教程!

免費領 | 《Shell指令碼 100例》電子書免費拿,運維必備乾貨~

640?640

▼▼點選【閱讀原文】,5天運維免費課程,開講在即!

相關文章