一、虛擬記憶體是什麼
為了防止記憶體不足導致宕機,系統會在硬碟上開闢一塊空間,linux是乙個固定的分割槽,windows是乙個檔案,就叫作虛擬記憶體。
系統會按照某種策略在適當的時候將物理記憶體中的部分資料移動到虛擬記憶體中,以節省物理記憶體。linux是當物理記憶體不夠用的時候,使用虛擬記憶體。windows會將長時間未使用的資料移動到虛擬記憶體。
二、使用者態和核心態能解釋一下嗎
1、當乙個任務(程序)執行系統呼叫而陷入核心**中執行時,我們就稱程序處於核心執行態(或簡稱為核心態)。此時處理器處於特權級最高的(0級)核心**中執行。當程序處於核心態時,執行的核心**會使用當前程序的核心棧。每個程序都有自己的核心棧。
當程序在執行使用者自己的**時,則稱其處於使用者執行態(使用者態)。即此時處理器在特權級最低的(3級)使用者**中執行。當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態。因為中斷處理程式將使用當前程序的核心棧。這與處於核心態的程序的狀態有些類似。
2、從特權級上解釋就是:當程式執行在3級特權級上時,就可以稱之為執行在使用者態,因為這是最低特權級,是普通的使用者程序執行的特權級,大部分使用者直接面對的程式都是執行在使用者態;
反之,當程式執行在0級特權級上時,就可以稱之為執行在核心態。雖然使用者態下和核心態下工作的程式有很多差別,但最重要的差別就在於特權級的不同,即權力的不同。執行在使用者態下的程式不能直接訪問作業系統核心資料結構和程式。
3、使用者態切換到核心態的3種方式
三、頁面置換演算法有哪些? lru 實現策略
1)最佳置換演算法(opt)(理想置換演算法)
2)先進先出置換演算法(fifo)
3)最近最久未使用(lru)
4)clock置換演算法(lru演算法的近似實現)
5)最少使用(lfu)置換演算法
7)工作集時鐘演算法
8)老化演算法(非常類似lru的有效演算法)
9)nru(最近未使用)演算法
10)第二次機會演算法
lru演算法實現策略
lru 置換將每個頁面與它的上次使用的時間關聯起來。當需要置換頁面時,lru選擇最長時間沒有使用的頁面。這種策略可當作在時間上向後看而不是向前看的最優頁面置換演算法。
lru 策略通常用作頁面置換演算法,並被認為是不錯的策略。它的主要問題是如何實現 lru 置換。lru 頁面置換演算法可能需要重要的硬體輔助。它的問題是,確定由上次使用時間定義的幀的順序。兩個實現是可行的。
四、 什麼是死鎖 ?
(一)死鎖得概念
死鎖是兩個或兩個以上的程序中的每乙個都在等待其中的其它程序釋放資源而被封鎖,它們都無法向前推進,陷入永久等待狀態,這種現象稱為死鎖。
(二)特點
1、占有一定的資源,等待對方釋放資源。
2、獲得對方資源前不釋放自己占有的資源。
(三)死鎖的起因
1、資源有限系統提供的資源數少於併發程序所需要的資源數。
2、資源競爭程序的併發性造成對資源的競爭使用。
(四)產生死鎖的四個必要條件
1、互斥條件:乙個資源每次只能被乙個程序使用;
2、請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放; 3、不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪;
4、迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係;
五、檔案操作(fwrite 和 write 區別)
fwrite是帶緩衝的,write不帶緩衝。
舉例說明如下:
如果檔案的大小是8k。
若用write,且只分配了2k的快取,則要將此檔案讀入需要做4次系統呼叫。
若用fwrite,則系統自動分配快取,則讀入此檔案只要一次系統呼叫。
也就是用write要讀4次磁碟,而用fwrite則只要讀1次磁碟。所以fwrite的效率比write要高4倍。
另外,如果程式對記憶體有限制,則用write比較好。
系統呼叫write的效率取決於使用者buff的大小和要寫入的總數量,如果buff太小,進入核心空間的次數會增加,效率就低下。而fwrite會自動完成快取分配任務,減少了實際出現的系統呼叫,所以效率比較高。
六、庫函式與系統呼叫函式比較
1、系統呼叫函式
系統呼叫是通向作業系統本身的介面,是面向底層硬體的。通過系統呼叫,可以使得使用者態執行的程序與硬體裝置(如cpu、磁碟、印表機等)進行互動,是作業系統留給應用程式的乙個介面。
實際上使用系統呼叫會影響系統的效能,在執行呼叫時的從使用者態切換到核心態,再返回使用者態會有系統開銷。為了減少開銷,因此需要減少系統呼叫的次數,並且讓每次系統呼叫盡可能的完成多的任務。硬體也會限制對底層系統呼叫一次所能寫的資料塊的大小。為了給裝置和檔案提供更高層的介面,linux系統提供了一系列的標準函式庫。使用標準庫函式,可以高效的寫任意長度的資料塊,庫函式在資料滿足資料塊長度要求時安排執行底層系統呼叫。
2、庫函式
庫函式是把函式放到庫里,供別人使用的一種方式。方法是把一些常用到的函式編完放到乙個檔案裡,供不同的人進行呼叫。一般放在.lib檔案中。庫函式呼叫則是面向應用開發的,庫函式可分為兩類,一類是c語言標準規定的庫函式,一類是編譯器特定的庫函式。(由於版權原因,庫函式的源**一般是不可見的,但在標頭檔案中你可以看到它對外的介面)。
七、中斷機制, 軟中斷和硬中斷,中斷處理程式為什麼分為上半部分和下半部分
1、軟中斷和硬中斷
①硬中斷是由外部事件引起的因此具有隨機性和突發性;軟中斷是執行中斷指令產生的,無面外部施加中斷請求訊號,因此中斷的發生不是隨機的而是由程式安排好的。
②硬中斷的中斷響應週期,cpu需要發中斷回合訊號(nmi不需要),軟中斷的中斷響應週期,cpu不需發中斷回合訊號。
③硬中斷的中斷號是由中斷控制器提供的(nmi硬中斷中斷號系統指定為02h);軟中斷的中斷號由指令直接給出,無需使用中斷控制器。
④硬中斷是可遮蔽的(nmi硬中斷不可遮蔽),軟中斷不可遮蔽。
2、為什麼分為上下半部分
目的就是提高系統的響應能力和併發能力。通俗一點來講:當乙個中斷產生,呼叫該中斷對應的處理程式(上半部)然後告訴系統,對應的後半部可以執行了,然後中斷處理。
如果該任務對時間比較敏感,將其放在上半部中執行。
如果該任務和硬體相關,一般放在上半部中執行。
如果該任務要保證不被其他中斷打斷,放在上半部中執行(因為這是系統關中斷)。
其他不太緊急的任務, 一般考慮在下半部執行。下半部分並不需要指明乙個確切時間,只要把這些任務推遲一點,讓它們在系統不太忙並且中斷恢復後執行就可以了。通常下半部分在中斷處理程式一返回就會馬上執行。
八、作業系統 p v 操作是什麼意思?
1、pv操作的含義:pv操作由p操作原語和v操作原語組成(原語是不可中斷的過程),對訊號量進行操作,具體定義如下:
p(s):①將訊號量s的值減1,即s=s-1;②如果s³0,則該程序繼續執行;否則該程序置為等待狀態,排入等待佇列。
v(s):①將訊號量s的值加1,即s=s+1;②如果s>0,則該程序繼續執行;否則釋放佇列中第乙個等待訊號量的程序。
2、pv操作的意義:我們用訊號量及pv操作來實現程序的同步和互斥。pv操作屬於程序的低階通訊。
九、是否了解過 schedule 函式,大概說一下排程的流程?
linux 排程的核心函式為schedule,schedule 函式封裝了核心排程的框架。細節實現上呼叫具體的排程類中的函式實現。schedule 函式主要流程為:
1,將當前程序從相應的執行佇列中刪除;
2,計算和更新排程實體和程序的相關排程資訊;
3,將當前程序重新插入到排程執行佇列中,對於cfs排程,根據具體的執行時間進行插入而對於實時排程插入到對應優先順序佇列的隊尾;
4,從執行佇列中選擇執行的下乙個程序:5,程序排程資訊和上下文切換;
十、實位址模式和保護位址模式的原理
1、實模式是指定址採用和8086相同的16位段和偏移量,最大定址空間1mb,定址時將段暫存器的值左移4位加上偏移位址,得到1mb空間內的位址。它是cpu啟動的時候的模式,這時候就相當於乙個速度超快的8086。
2、保護模式,因為要做到與之前的機器相容,段暫存器還是16位,位址匯流排增加,為了能定址更多的空間,就不能把段暫存器的內容當成實模式下的那種用法,它的值會被當成乙個索引,用來在描述符表中找相應的段描述符,進而找到段基址,從而能定址更大的位址範圍。
3、保護模式同實模式的根本區別是:程序記憶體受保護與否。
實模式將整個物理記憶體看成分段的區域,程式**和資料位於不同區域,系統程式和使用者程式沒有區別對待,而且每乙個指標都是指向"實在"的實體地址。這樣一來,使用者程式的乙個指標如果指向了系統程式區域或其他使用者程式區域,並改變了值,那麼對於這個被修改的系統程式或使用者程式,其後果就很可能是災難性的。為了克服這種低劣的記憶體管理方式,處理器廠商開發出保護模式。這樣,物理記憶體位址不能直接被程式訪問,程式內部的位址(虛擬位址)要由作業系統轉化為實體地址去訪問,程式對此一無所知。
python經典面試題目
print set a set b a,b中相同的元素 print set a set b a,b中不同元素list 1 a b c b a list 1 list set list 1 print list 1 alist defsort by age alist return sorted al...
經典C 面試題目
1 在c 中,string str null 與 string str 請盡量使用文字或圖象說明其中的區別。回答要點 說明詳細的空間分配。10分 答 string str null 是不給他分配記憶體空間,而string str 給它分配長度為空字串的記憶體空間.請詳述在dotnet中類 class...
經典的C 面試題目
1.介紹一下stl,詳細說明stl如何實現vector。answer stl 標準模版庫,standard template library.它由容器演算法迭代器組成。stl有以下的一些優點 可以方便容易地實現搜尋資料或對資料排序等一系列的演算法 除錯程式時更加安全和方便 即使是人們用stl在uni...