C++面試問題總結 3
/* 使用者態與核心態之間如何切換? */
系統為了限制不同程式的訪問能力,防止它們獲取別的記憶體資料,劃分了兩個等級 核心態與使用者態
核心態:CPU可以訪問記憶體所有資料, 包括外圍裝置, 例如硬碟, 網絡卡. CPU也可以將自己從一個程式切換到另一個程式
使用者態: 只能受限的訪問記憶體, 且不允許訪問外圍裝置. 佔用CPU的能力被剝奪, CPU資源可以被其他程式獲取
以下情況會從使用者態切換到核心態:
1. 系統呼叫
使用者態程序主動要求進入核心態的一種方式,使用者態的程序通過系統呼叫申請作業系統提供的服務完成工作
2. 異常
使用者態的程序執行過程中產生了一個未知的異常,此時將進入核心態呼叫作業系統核心的異常處理程式
3. 外設中斷
當外設完成使用者請求後,會向CPU傳送相應的中斷訊號,這時CPU會暫停執行下一條指令轉而執行中斷對應的處理程式;若之前執行的是使用者態的指令,則此時切換至核心態
/* 兩個程序之間如何切換?*/
假設當前系統中只有兩個程序執行
1. 程序A時間片用盡返回就緒,程序B執行
2. 程序A等待某事件(I/O、同步)陷入阻塞,程序B執行
/* 寫時拷貝會不會影響 全域性變數區、區域性變數區、堆區? */
當父(子)程序中某個變數的值被改變時,該變數所在頁會拷貝一份在子(父)程序中,而不是完全將資料域拷貝
/*
------------------------------------------------------------------------------------------
*/
/* 互斥鎖、自旋鎖的區別? */
當一個執行緒去獲得臨界資源時,此時這個資源被另一個執行緒所佔有
互斥鎖:該執行緒阻塞,進入等待佇列,直到資源被釋放;
自旋鎖:該執行緒不會陷入阻塞,而是不停的迴圈請求獲取資源,直到資源被釋放;
/*
------------------------------------------------------------------------------------------
*/
/* 可變引數中形參的入棧佔用空間? */