作業系統常見面試問題

2022-06-26 12:39:09 字數 1439 閱讀 3352

三年前學的東西差不多都忘了,複試臨時準備一下,不看底層實現(最後還是老老實實滾去看電路板了)只看邏輯

程序是系統中擁有資源和獨立排程的基本單位,乙個程序可以包括多個執行緒。

程序有自己的記憶體空間,其執行緒可以共享記憶體。程序間通訊則需要ipc(程序間通訊)。

此外同一程序內的執行緒切換比程序切換的開銷小很多。

在cpu中執行的作業系統程式和使用者程式對應的機器指令集是不同的。作業系統程式使用所有指令,但使用者程式只能使用部分指令。

從資源管理和程式控制執行的角度出發,將指令系統分為兩大部分:特權指令和非特權指令。在程式執行時,根據執行程式對資源和機器指令的使用許可權,把機器設定為兩個狀態:核心態和使用者態

也就是說,當系統處於核心態時,就可以使用所有指令、資源,並具備改變cpu狀態的能力;而當cpu在使用者態時,只能使用非特權指令。

如果cpu執行使用者程式時(使用者態)出現了中斷,系統將自行轉到中斷處理程式,cpu就由使用者態轉換到核心態;中斷處理結束後,返回繼續執行使用者程式,此時cpu又由核心態轉到使用者態。

那麼使用者態和核心態之間的區別是什麼呢?(以下區別摘至《unix作業系統設計》)

使用者態的程序能訪問它們自己的指令和資料,但不能訪問核心指令和資料(或其他程序的指令和資料)。然而,核心態下的程序能夠訪問核心和使用者位址

某些機器指令是特權指令,在使用者態下執行特權指令會引起錯誤

此處牽引出另外乙個概念:使用者級執行緒和核心級執行緒

在傳統的作業系統中,是不支援核心級執行緒的(只有核心程序,出於安全沒有把執行緒這個新生事物放入到核心中),每次都是乙個程序去到乙個cpu核心(但是多核cpu仍然可以處理多個程序),因此使用者級執行緒是對核心透明的,也做不到程序那樣的時間片輪轉排程(時間一到直接停你程序,執行緒都得一塊停),此時的執行緒管理全部交給使用者態做,且可以用jacket進行優化效率

在如今的多核cpu/多cpu支援核心級執行緒的情況下(實際上的意思是執行緒對於核心可見了,核心可以接手執行緒管理),那就可以多個核心級執行緒並行執行了。不會再出現同乙個程序下的執行緒一損俱損的情況了。缺點是:讓核心來排程執行緒的話會出現切換執行緒得經歷使用者態到核心態的切換,代價更大

然而在今天的作業系統中,常見的操作是   n個使用者態執行緒----對映到---->1個核心態執行緒   算是乙個折中方案

①內部異常中斷

計算機硬體異常或故障引起的中斷

②軟(件)中斷(指令中斷)

程式中執行了引起中斷的指令而造成的中斷,比如使用者態到核心態的系統呼叫就是使用了訪管指令

③外中斷(強迫中斷)

外設請求的中斷

SVM常見面試問題

答 幾何間隔與樣本的誤分次數間存在關係 其中的分母就是樣本到分類間隔距離,分子中的r是所有樣本中的最長向量值 答 會,超平面會靠近樣本少的類別。因為使用的是軟間隔分類,而如果對所有類別都是使用同樣的懲罰係數,則由於優化目標裡面有最小化懲罰量,所以靠近少數樣本時,其懲罰量會少一些。比如 假設理想的分隔...

C 常見面試問題

一 抽象與介面的區別 1,抽象 abstract 1 抽象類中可以有抽象方法,也可沒有 2 抽象方法包含實現,也可以由子類實現 3 抽象類不能被sealed修飾,只能使用abstract關鍵字 4 抽象方法不能在抽象類外部宣告 5 抽象類只能單繼承 6 可以有虛方法 virtual 在不同的繼承中,...

SpringMVC 常見面試問題

springmvc流程 原理 流程圖 亂碼問題 重定向和 在返回值前面加 redirect 或 forward return forward 跳轉的頁面或路由 重定向和 的區別 全域性異常 自定義實現spring的全域性異常解析器handlerexceptionresolver springboot...