1. 程式人生 > >C++面試問題總結 3

C++面試問題總結 3

/* 使用者態與核心態之間如何切換? */

系統為了限制不同程式的訪問能力,防止它們獲取別的記憶體資料,劃分了兩個等級  核心態與使用者態

核心態:CPU可以訪問記憶體所有資料, 包括外圍裝置, 例如硬碟, 網絡卡. CPU也可以將自己從一個程式切換到另一個程式

使用者態: 只能受限的訪問記憶體, 且不允許訪問外圍裝置. 佔用CPU的能力被剝奪, CPU資源可以被其他程式獲取

以下情況會從使用者態切換到核心態:

1. 系統呼叫

使用者態程序主動要求進入核心態的一種方式,使用者態的程序通過系統呼叫申請作業系統提供的服務完成工作

2. 異常

使用者態的程序執行過程中產生了一個未知的異常,此時將進入核心態呼叫作業系統核心的異常處理程式

3. 外設中斷

當外設完成使用者請求後,會向CPU傳送相應的中斷訊號,這時CPU會暫停執行下一條指令轉而執行中斷對應的處理程式;若之前執行的是使用者態的指令,則此時切換至核心態

/* 兩個程序之間如何切換?*/

假設當前系統中只有兩個程序執行

1. 程序A時間片用盡返回就緒,程序B執行

2. 程序A等待某事件(I/O、同步)陷入阻塞,程序B執行

/* 寫時拷貝會不會影響 全域性變數區、區域性變數區、堆區? */

當父(子)程序中某個變數的值被改變時,該變數所在頁會拷貝一份在子(父)程序中,而不是完全將資料域拷貝

/*
------------------------------------------------------------------------------------------


*/

/* 互斥鎖、自旋鎖的區別? */

當一個執行緒去獲得臨界資源時,此時這個資源被另一個執行緒所佔有

互斥鎖:該執行緒阻塞,進入等待佇列,直到資源被釋放;

自旋鎖:該執行緒不會陷入阻塞,而是不停的迴圈請求獲取資源,直到資源被釋放;

/*
------------------------------------------------------------------------------------------
*/

/* 可變引數中形參的入棧佔用空間? */