操作系统(概述、组成)、用户态、内核态
1. 概述
1.1 基本特征
1.1.1 并發
并發是指宏觀上在一段時間內能同時運行多個程序,而并行則指同一時刻能運行多個指令。
并行需要硬件支持,如多流水線或者多處理器。
操作系統通過引入進程和線程,使得程序能夠并發運行。
1.1.2 共享
共享是指系統中的資源可以被多個并發進程共同使用。
有兩種共享方式:互斥共享和同時共享。
互斥共享的資源稱為臨界資源,例如打印機等,在同一時間只允許一個進程訪問,需要用同步機制來實現對臨界資源的訪問。
1.1.3 虛擬
虛擬技術把一個物理實體轉換為多個邏輯實體。
主要有兩種虛擬技術:時分復用技術和空分復用技術。
例如多個進程能在同一個處理器上并發執行使用了時分復用技術,讓每個進程輪流占有處理器,每次只執行一小個時間片并快速切換。
1.1.4 異步
異步指進程不是一次性執行完畢,而是走走停停,以不可知的速度向前推進。
1.2 組成部分
(https://blog.51cto.com/13468179/2070798)
1.2.1 進程管理
操作系統的職能之一,主要是對處理機進行管理。
為了提高CPU的利用率而采用多道程序技術。
通過進程管理來協調多道程序之間的關系,使CPU得到充分的利用。
進程控制、進程同步、進程通信、死鎖處理、處理機調度等。
1.2.2 內存管理
內存管.\理是指軟件運行時對計算機內存資源的分配和使用的技術。
其最主要的目的是如何高效,快速的分配,并且在適當的時候釋放和回收內存資源。
內存分配、地址映射、內存保護與共享、虛擬內存等。
1.2.3 文件系統
文件系統是操作系統用于明確存儲設備(常見的是磁盤,也有基于NAND Flash的固態硬盤)或分區上的文件的方法和數據結構;
即在存儲設備上組織文件的方法。
文件存儲空間的管理、目錄管理、文件讀寫管理和保護等。
1.2.4 網絡通訊
網絡是用物理鏈路將各個孤立的工作站或主機相連在一起,組成數據鏈路,從而達到資源共享和通信的目的。
1.2.5 安全機制
安全描述符、訪問控制列表、訪問令牌、訪問掩碼等。
1.2.6 用戶界面
用戶界面(User Interface,簡稱 UI,亦稱使用者界面[1])是系統和用戶之間進行交互和信息交換的媒介,它實現信息的內部形式與人類可以接受形式之間的轉換。
用戶界面是介于用戶與硬件而設計彼此之間交互溝通相關軟件,目的在使得用戶能夠方便有效率地去操作硬件以達成雙向之交互,完成所希望借助硬件完成之工作,用戶界面定義廣泛,包含了人機交互與圖形用戶接口,凡參與人類與機械的信息交流的領域都存在著用戶界面。
1.2.7 驅動程序
驅動程序一般指的是設備驅動程序(Device Driver),是一種可以使計算機和設備通信的特殊程序。
相當于硬件的接口,操作系統只有通過這個接口,才能控制硬件設備的工作,假如某設備的驅動程序未能正確安裝,便不能正常工作。
因此,驅動程序被比作“ 硬件的靈魂”、“硬件的主宰”、和“硬件和系統之間的橋梁”等。
2. 用戶態和系統態
(https://www.cnblogs.com/maxigang/p/9041080.html)
2.1 介紹
用戶態:只能受限的訪問內存,且不允許訪問外圍設備,占用CPU的能力被剝奪,CPU資源可以被其他程序獲取。
內核態:CPU可以訪問內存的所有數據,包括外圍設備,例如硬盤,網卡,CPU也可以將自己從一個程序切換到另一個程序。
2.2 切換
所有用戶程序都是運行在用戶態的, 但是有時候程序確實需要做一些內核態的事情,例如從硬盤讀取數據,或者從鍵盤獲取輸入等。
而唯一可以做這些事情的就是操作系統,所以此時程序就需要向操作系統請求以程序的名義來執行這些操作。
這時需要一個這樣的機制:用戶態程序切換到內核態,但是不能控制在內核態中執行的指令。
這種機制叫系統調用, 在CPU中的實現稱之為陷阱指令(Trap Instruction)
工作流程如下:
當一個任務(進程)執行系統調用而陷入內核代碼中執行時,我們就稱進程處于內核運行態(或簡稱為內核態)。
- 此時處理器處于特權級最高的(0級)內核代碼中執行。
- 當進程處于內核態時,執行的內核代碼會使用當前進程的內核棧。
- 每個進程都有自己的內核棧。
當進程在執行用戶自己的代碼時,則稱其處于用戶運行態(用戶態)。
- 即此時處理器在特權級最低的(3級)用戶代碼中運行。
- 當正在執行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象征性地稱為處于進程的內核態。
- 因為中斷處理程序將使用當前進程的內核棧。這與處于內核態的進程的狀態有些類似。
2.2.1?Linux 的系統調用主要有:
| fork(); exit(); wait(); |
| pipe(); shmget(); mmap(); |
| open(); read(); write(); |
| ioctl(); read(); write(); |
| getpid(); alarm(); sleep(); |
| chmod(); umask(); chown(); |
2.3 用戶態切換到內核態的方式
2.3.1 系統調用
這是用戶態進程主動要求切換到內核態的一種方式;
用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作,比如fork()實際上就是執行了一個創建新進程的系統調用。
而系統調用的機制其核心還是使用了操作系統為用戶特別開放的一個中斷來實現,例如Linux的int 80h中斷。
2.3.2 異常
當CPU在執行運行在用戶態下的程序時,發生了某些事先不可知的異常,這時會觸發由當前運行進程切換到處理此異常的內核相關程序中,也就轉到了內核態,比如缺頁異常。
2.3.3 外圍設備的中斷
當外圍設備完成用戶請求的操作后,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序。
如果先前執行的指令是用戶態下的程序,那么這個轉換的過程自然也就發生了由用戶態到內核態的切換。比如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行后續操作等。
從最終實際完成由用戶態到內核態的切換操作上來說,涉及的關鍵步驟是完全一致的,沒有任何區別,都相當于執行了一個中斷響應的過程,因為系統調用實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的。
涉及到由用戶態切換到內核態的步驟主要包括:
3. 64位系統和32位系統的區別
3.1 運算速度不同
64位CPUGPRs的數據寬度為64位,64位指令集可以運行64位數據指令,也就是說處理器一次可提取64位數據(只要兩個指令,一次提取8個字節的數據),比32位(需要四個指令,一次提取4個字節的數據)提高了一倍,理論上性能會相應提升1倍。
3.2 尋址能力不同
64位處理器的優勢還體現在系統對內存的控制上。由于地址使用的是特殊的整數,因此一個ALU(算術邏輯運算器)和寄存器可以處理更大的整數,也就是更大的地址。
?
總結
以上是生活随笔為你收集整理的操作系统(概述、组成)、用户态、内核态的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 进程和线程(通信方式)、调度算法(6种)
- 下一篇: java信息管理系统总结_java实现科