Linux操做系統基礎知識學習

本文是我在學校自學Linux時所作的筆記,純理論,但願對你們有所幫助。文章中,Q表示問題,A表示回答。node

Linux操做系統概述程序員

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

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. 進程間通訊:支持進程間各類通訊機制,包括共享內存、消息隊列和管道等。

內存尋址

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)。

進程

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.一個好的調度算法應該考慮五個方面:公平、高效、響應時間、週轉時間和吞吐量。

內存管理

Q1.爲何把進程的地址空間劃分爲「內核空間」和「用戶空間」?
A:

Linux的虛擬地址空間的大小爲4GB,內核將這4GB的空間分爲兩部分,較高的1GB(虛地址0xC0000000到0xFFFFFFFF)供內核使用,稱爲「內核空間」;而較低的3GB(虛地址0x00000000到0xBFFFFFFF)供各個進程使用,稱爲「用戶空間」;由於每一個進程能夠經過系統調用進入內核,所以,內核空間由系統內的全部進程共享;因而,從具體進程的角度來看,每一個進程均可以擁有4GB的虛擬地址空間(也叫作虛擬內存)。

Q2.Linux是如何實現「請求調頁」的?
A:

1.若是被訪問的頁不在內存,也就是說,這個頁尚未被存放在任何一個物理頁面中,那麼,內核分配一個新的頁面並將其適當地初始化,這種技術稱爲「請求調頁」;
2.「請求調頁」是一種動態內存分配技術,它將頁面的分配推遲到不能再推遲爲止,也就是說,一直推遲到進程要訪問的頁不在物理內存時爲止,由此引發一個缺頁異常;該技術的引入主要是由於進程開始運行時並不訪問其地址空間中的所有地址。

中斷和異常

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內核特別設置的,用來讓用戶態的進程訪問陷阱門。

系統調用

Q1.什麼是系統調用?爲何要引入系統調用?
A:

(1)操做系統爲用戶態的進程與硬件設備(如CPU、磁盤和打印機等)之間的交互提供了一組接口,這些接口使得程序更具備可移植性,由於不一樣的操做系統只要所提供的一組接口相同,那麼在這些操做系統之上就能夠正確地編譯和執行相同的程序,這組接口就是所謂的「系統調用」;
(2)引入系統調用的緣由有:

  1. 這使得編程更加容易;

  2. 這極大地提升了系統的安全性;

  3. 最重要的一點,這些接口使得操做系統更具備可移植性。

內核中的同步

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)信號量,由於它會增長信號量的計數值。

文件系統

Q1.Linux目錄樹結構是怎樣的?它與Windows的目錄樹結構有什麼區別?爲何Linux的文件系統採用固定的目錄形式?
A:
文件是一個抽象的概念,它是存放一切數據或信息的倉庫;

1.Linux的目錄樹結構爲:根目錄(/)在上,其它的平行在下;
2.Windows操做系統也是採用樹型結構,但其樹型結構的根是磁盤分區的盤符,有幾個分區就有幾個樹型結構,它們之間的關係式並列的;而在Linux中,不管操做系統管理幾個磁盤分區,這樣的目錄樹只有一個;
3.這樣作的緣由是:Linux是一個多用戶系統,制定這樣一個固定的目錄規劃有助於對系統文件和不一樣的用戶文件進行統一管理;
4.Linux中的文件類型包括:常規文件、目錄文件、設備文件、管道文件和連接文件。

Q2.什麼是虛擬文件系統?什麼是虛擬文件系統界面?
A:

1.將各類不一樣文件系統的操做和管理歸入到一個統一的框架中,使得用戶程序能夠經過同一個文件系統界面,也就是同一組系統調用,對各類不一樣的文件系統以及文件進行操做;用戶程序能夠不關心不一樣文件系統的實現細節,而使用系統提供的統1、抽象、虛擬的文件系統界面;這種統一的框架就是所謂的虛擬文件系統轉換,通常簡稱虛擬文件系統(VFS);
2.VFS的對象類型包括:超級塊(superblock)對象、索引節點(inode)對象、目錄項(dentry)對象和文件(file)對象;
3.虛擬文件系統界面是虛擬文件系統所提供的抽象界面,它主要由一組標準的、抽象的操做構成,這些函數(操做)以系統調用的形式供用戶調用。

設備驅動

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)方式。

Creat by zhouzx

相關文章
相關標籤/搜索