關于 Linux 操作系統(tǒng)的20個問題
共 6296字,需瀏覽 13分鐘
·
2024-04-02 23:30
鏈接:https://www.cnblogs
Q1.Linux系統(tǒng)由哪幾部分組成?Linux內核處于什么位置?
A:
2)Linux內核處于用戶進程和硬件之間,包括系統(tǒng)調用接口和Linux內核子系統(tǒng)。
Q2. Linux內核由哪幾部分組成?各個子系統(tǒng)的主要功能是什么?
(1) Linux內核除系統(tǒng)調用外,由五個主要的子系統(tǒng)組成:進程調度、內存管理、虛擬文件系統(tǒng)、網(wǎng)絡和進程間通信(IPC);
(2)各個子系統(tǒng)的主要功能為:
1)進程調度:它控制著進程對CPU的訪問,當需要選擇一個進程開始運行時,由調度程序選擇最應該運行的進程;
2)內存管理:它允許多個進程安全地共享主內存區(qū)域,支持虛擬內存;從邏輯上可以分為硬件無關的部分和硬件相關的部分;
3)虛擬文件系統(tǒng)(VFS):它隱藏了各種不同硬件的具體細節(jié),為所有設備提供統(tǒng)一的接口,支持多達數(shù)十種不同的文件系統(tǒng),分為邏輯文件系統(tǒng)和設備驅動程序;
4)網(wǎng)絡:它提供了對各種網(wǎng)絡標準協(xié)議的存取和各種網(wǎng)絡硬件的支持,分為網(wǎng)絡協(xié)議和網(wǎng)絡驅動程序兩部分;
5)進程間通信:支持進程間各種通信機制,包括共享內存、消息隊列和管道等。
Q3.什么是物理地址?什么是虛地址?什么是線性地址?
A:
1)將主板上的物理內存條所提供的內存空間定義為物理內存空間,其中每個內存單元的實際地址就是物理地址;
2)將應用程序員看到的內存空間定義為虛擬地址空間(或地址空間),其中的地址就叫做虛擬地址(或虛地址),一般用“段:偏移量”的形式來描述,如A815:CF2D;
3)線性地址空間是指一段連續(xù)的、不分段的、范圍為0~4GB的地址空間,一個線性地址就是線性地址空間的一個絕對地址。
Q4.在保護模式下,MMU如何把一個虛地址轉換為物理地址?
A:
在保護模式下,內存管理單元(MMU)由一個或一組芯片組成,其功能是指虛擬地址映射為物理地址,即進行地址轉換;
MMU是一種硬件電路,它包含分段部件和分頁部件兩個部件,分別叫做分段機制和分頁機制,分段機制是把一個虛擬地址轉換為線性地址,分頁機制是把一個線性地址轉換為物理地址。
Q5.為什么對32位線性地址空間要采用兩級頁表?
A:
兩級頁表就是對頁表再進行分頁,第一級稱為頁目錄,其中存放關于頁表的信息;4MB的頁表再次分頁,可以分為1K個4KB大小的頁。
A:
(1)頁面高速緩存自動保留處理器最近使用的32項頁表項,因此可以覆蓋128KB范圍的內存;
(2)Linux主要采用分頁機制來實現(xiàn)虛擬存儲器管理,原因為:
1)Linux的分段機制使得所有的進程都使用相同的段寄存器,這使得內存管理變得簡單;
2)Linux的設計目標之一就是能夠被移植到絕大多數(shù)流行的處理平臺上,但許多RISC處理器支持的分段功能非常有限;為了保證可移植性,Linux采用三級分頁模式,因為許多處理器都采用64位結構;Linux定義了三種類型的頁表:頁目錄(PGD)、中間目錄(PMD)和頁表(PT)。
Q7.程序與進程的概念分別是什么?為什么要引入“進程”的概念?
A:
1)程序是一個普通文件,是機器代碼指令和數(shù)據(jù)的集合,這些指令和數(shù)據(jù)存儲在磁盤上的一個可執(zhí)行映像中,可執(zhí)行映像(executable image)就是一個可執(zhí)行文件的內容;
2)進程代表程序的執(zhí)行過程,它是一個動態(tài)的實體,隨著程序中指令的執(zhí)行而不斷地變化,在某個時刻進程的內容被稱為進程映像(process image);
3)程序的執(zhí)行過程可以說是一個執(zhí)行環(huán)境的總和,這個執(zhí)行環(huán)境除了包括程序中各種指令和數(shù)據(jù)外,還有一些額外數(shù)據(jù);而執(zhí)行環(huán)境的動態(tài)變化體現(xiàn)了程序的運行,為了對動態(tài)變化的過程進行描述,就引入了“進程”概念。
Q8.什么是進程控制塊?它包含哪些基本信息?
A:
2)PCB是一個其域多達80多項的相當龐大的數(shù)據(jù)結構,按其功能將所有域劃分為:狀態(tài)信息,鏈接信息、各種標識符、進程間通信信息、時間和定時器信息、調度信息、文件系統(tǒng)信息、虛擬內存信息和處理器環(huán)境信息。
Q9.Linux內核的狀態(tài)有哪些?
A:
1) Linux最基本的進程狀態(tài)有三種:運行態(tài)、就緒態(tài)和阻塞態(tài)(或等待態(tài));這三種狀態(tài)之間有四種可能的轉換關系:運行態(tài)->阻塞態(tài)、運行態(tài)->就緒態(tài)、就緒態(tài)->運行態(tài)和阻塞態(tài)->就緒態(tài);
2) 為了管理上的方便,將就緒態(tài)和運行態(tài)合并為一個狀態(tài)—可運行態(tài),再包括其它方面的一些改變,將進程狀態(tài)劃分為:可運行態(tài)、睡眠(或等待)態(tài)(分為深度睡眠態(tài)和淺度睡眠態(tài))、暫停狀態(tài)和僵死狀態(tài)。
Q10.PCB的組織方式有哪幾種?
A:
Q11.主要的調度算法包括哪些?一個好的調度算法要考慮哪些方面?
A:
1)主要的調度算法包括:時間片輪轉調度算法、優(yōu)先級調度算法(非搶占式優(yōu)先級算法和搶占式優(yōu)先級算法)、多級反饋隊列調度算法和實時調度算法;
2)一個好的調度算法應該考慮五個方面:公平、高效、響應時間、周轉時間和吞吐量。
Q12.為什么把進程的地址空間劃分為“內核空間”和“用戶空間”?
A:
因為每個進程可以通過系統(tǒng)調用進入內核,因此,內核空間由系統(tǒng)內的所有進程共享;于是,從具體進程的角度來看,每個進程都可以擁有4GB的虛擬地址空間(也叫做虛擬內存)。
Q13.Linux是如何實現(xiàn)“請求調頁”的?
A:
1)如果被訪問的頁不在內存,也就是說,這個頁還沒有被存放在任何一個物理頁面中,那么,內核分配一個新的頁面并將其適當?shù)爻跏蓟?,這種技術稱為“請求調頁”;
Q14.什么是中斷向量?Linux是如何分配中斷向量的?
A:
(1)為使處理器可以容易地識別每種中斷源,將256種向量中斷從0到255進行編號,即賦以一個中斷類型碼n,把這個8位的無符號整數(shù)叫做向量,即中斷向量;
(2)Linux對256個中斷向量的分配如下:
1)編號為0~31的向量對應于異常和非屏蔽中斷;
2)編號為32~47的向量(即由I/O設備引起的中斷)分配給可屏蔽中斷;
3)剩余的、編號為48~255的向量用來標識軟中斷;Linux只用其中的一個(即128或0x80向量)來實現(xiàn)系統(tǒng)調用。
Q15.什么是中斷描述符表?什么是門描述符?
A:
1)在實地址模式下,CPU將內存中從0開始的1KB空間作為一個中斷向量表,表中每個表項占4個字節(jié);但在保護模式,由4個字節(jié)的表項構成的中斷向量表滿足不了要求;因此在保護模式下,中斷向量表中的表項由8個字節(jié)組成,中斷向量表也改稱為中斷描述符表(IDT);
2)IDT中的每個表項叫做一個門描述符(gate descriptor)。
Q16.門描述符有哪些類型?它們有什么不同?
A:
門描述符中類型碼占3位,表示門描述符的類型,主要分為以下幾類:
1)中斷門(interrupt gate):其類型碼為110,包含了一個中斷或異常處理程序所在段的選擇符和段內偏移量;
2)陷阱門(trap gate):其類型碼為111;
3)系統(tǒng)門(system gate):是Linux內核特別設置的,用來讓用戶態(tài)的進程訪問陷阱門。
Q17.什么是系統(tǒng)調用?為什么要引入系統(tǒng)調用?
A:
3)最重要的一點,這些接口使得操作系統(tǒng)更具有可移植性。
Q18.什么是臨界區(qū)?什么是競爭狀態(tài)?什么是同步?
A:
1)臨界區(qū)(critical regions)就是訪問和操作共享數(shù)據(jù)的代碼段,多個內核任務并發(fā)訪問同一個資源通常是不安全的;
2)如果兩個內核任務可能處于同一個臨界區(qū),就是一種錯誤現(xiàn)象;如果確實發(fā)生了這種情況,就稱它為競爭狀態(tài);
3)避免并發(fā)和防止競爭狀態(tài)稱為同步(synchronization)。
Q19.簡要介紹一下死鎖及避免死鎖的方法。
A:
死鎖包括自死鎖和ABBA死鎖,
1)產(chǎn)生死鎖有四個原因:互斥使用、不可搶占、請求和保持,以及循環(huán)等待;
2)避免死鎖的方法有:破壞“不可剝奪”條件、破壞“請求和保持”條件、破壞“循環(huán)等待”條件。
Q20.內核中造成并發(fā)執(zhí)行的原因是什么?
A:
4)對稱多處理:兩個或多個處理器可以同時執(zhí)行代碼。
Q21.給出信號量的定義,并說明down()和up()的含義。
A:
Q22.Linux目錄樹結構是怎樣的?它與Windows的目錄樹結構有什么區(qū)別?為什么Linux的文件系統(tǒng)采用固定的目錄形式?
A:
文件是一個抽象的概念,它是存放一切數(shù)據(jù)或信息的倉庫;
1)Linux的目錄樹結構為:根目錄(/)在上,其它的平行在下;
2)Windows操作系統(tǒng)也是采用樹型結構,但其樹型結構的根是磁盤分區(qū)的盤符,有幾個分區(qū)就有幾個樹型結構,它們之間的關系式并列的;而在Linux中,無論操作系統(tǒng)管理幾個磁盤分區(qū),這樣的目錄樹只有一個;
3)這樣做的原因是:Linux是一個多用戶系統(tǒng),制定這樣一個固定的目錄規(guī)劃有助于對系統(tǒng)文件和不同的用戶文件進行統(tǒng)一管理;
4)Linux中的文件類型包括:常規(guī)文件、目錄文件、設備文件、管道文件和鏈接文件。
Q23.什么是虛擬文件系統(tǒng)?什么是虛擬文件系統(tǒng)界面?
A:
1)將各種不同文件系統(tǒng)的操作和管理納入到一個統(tǒng)一的框架中,使得用戶程序可以通過同一個文件系統(tǒng)界面,也就是同一組系統(tǒng)調用,對各種不同的文件系統(tǒng)以及文件進行操作;用戶程序可以不關心不同文件系統(tǒng)的實現(xiàn)細節(jié),而使用系統(tǒng)提供的統(tǒng)一、抽象、虛擬的文件系統(tǒng)界面;這種統(tǒng)一的框架就是所謂的虛擬文件系統(tǒng)轉換,一般簡稱虛擬文件系統(tǒng)(VFS);
2)VFS的對象類型包括:超級塊(superblock)對象、索引節(jié)點(inode)對象、目錄項(dentry)對象和文件(file)對象;
3)虛擬文件系統(tǒng)界面是虛擬文件系統(tǒng)所提供的抽象界面,它主要由一組標準的、抽象的操作構成,這些函數(shù)(操作)以系統(tǒng)調用的形式供用戶調用。
Q24.為什么把設備分為“塊設備”和“字符設備”兩大類?
A:
1)Linux將設備看成文件,具有三方面的含義:
第一,每個設備都對應一個文件名,在內核中也就對應一個索引節(jié)點;
第二,對文件操作的系統(tǒng)調用大都適用于設備文件;
第三,從應用程序的角度看,設備文件的邏輯空間是一個線性空間;對于同一個具體的設備而言,文件操作和設備驅動是同一個事物的不同層次,概念上可以將一個系統(tǒng)劃分為應用、文件系統(tǒng)和設備驅動三個層次;
2)Linux將設備分為兩大類,一類是像磁盤那樣的以塊或扇區(qū)為單位、成塊進行輸入/輸出的設備,稱為塊設備;另一類是像鍵盤那樣以字符(字節(jié))為單位,逐個字符進行輸入/輸出的設備,稱為字符設備;文件系統(tǒng)通常都建立在塊設備上。
Q25.什么是設備驅動程序?
A:
Linux中處理和管理硬件控制器的軟件就是設備驅動程序。
Q26.I/O端口一般包括哪些寄存器?各自功能是什么?
A:
1)I/O端口包括控制寄存器、狀態(tài)寄存器和數(shù)據(jù)寄存器三大類;
2)根據(jù)訪問外設寄存器的不同方式,將CPU分為兩大類:
一類是“內存映射”(memory-mapped)方式,另一類是“I/O映射”(I/O- mapped)方式。
春招已經(jīng)開始啦,大家如果不做好充足準備的話,春招很難找到好工作。
送大家一份就業(yè)大禮包,大家可以突擊一下春招,找個好工作!
