文章目錄
操作系統概述
簡介
- 本文主要針對操作系統裏面一些原理進行剖析, 操作系統也可以說是程序員必經之路, 學的好壞會有本質的區別,尤其是大公司(BAT)的面試, 對操作系統有了解必然是極大的加分項, 個人極力推薦一位老師-陳向羣老師(北京大學), 我的大部分理論也是從她那裏學來的, 博主會把一些關鍵點記錄好給大家方便查看, 後期有時間會優化下結構。
一個完整的程序執行
- 下面展示一段c語言代碼,大家想一下我們執行的時候到底經歷了什麼?
#include<stdio.h>
int main(int argc, char const *argv[])
{
/* code */
puts("hello world");
return 0;
}
- 首先這段代碼變爲可執行文件的過程可以參考我之前的文章c語言中間那些姿勢
- 瞭解即可
- 下面瞭解下完整的執行過程:
• 用戶告知操作系統(方式很多)
• 操作系統判斷文件是否是可執行文件(pe, elf)
• 操作系統創建一個進程,將可執行文件格式映射到進程結構,由該進程執行程序
• 操作系統將控制權交給調度程序,爲hello world程序設置上下文環境,跳到程序開始之處(調度程序如何選中? i/o多路複用?)
• 執行第一條指令,發生缺頁異常(爲什麼缺頁異常?)
• 因爲代碼執行需要將代碼load到內存, 但是你一開始沒有被分配, 於是操作系統(內存管理模塊)就會分配一塊空閒的內存來執行helloworld,有時候一頁還不夠,就有可能進行多次的缺頁異常以及分配內存的操作 ps.代碼是從 磁盤讀入內存
• 接着操作系統執行puts函數(系統調用), 作用是在標準的輸出設備上顯示字符串
• 操作系統把需要寫入屏幕的字符串送給一個進程
• 控制設備的進程通知窗口顯示字符串, 窗口系統確定是個合法操作,將字符串->像素->設備存儲映像區
• 視頻硬件->顯示器可以接受的控制數據信號
最後 在屏幕上看到了hello world
操作系統作用
作用一: 操作系統是資源的管理者
- 管理哪些資源?
- 硬件資源: CPU, 內存, 設備(I/O設備, 磁盤, 時鐘, 網卡等)
- 軟件資源: 磁盤上的文件, 各類管理信息等
- 怎麼管理資源?
- 通過數據結構和算法 跟蹤記錄資源的使用情況(數據結構決定可以有哪些功能, 基於這些功能可以策劃有哪些算法支持資源如何分配,有哪些空閒資源可以分配等問題)
- 相關策略
- 靜態分配策略: 程序運行前就將資源全部分配完成, 會造成資源浪費
- 動態分配策略: 執行過程中, 需要資源再提出申請, 會根據數據結構決定是否分配
- 分配和回收: 具體取決於數據結構(如 可以使用位圖去實現, 已分配標註1 未分配0)
- 資源管理角度-操作系統五大基本功能
- 進程線程管理(CPU管理): 進程線程狀態, 控制, 同步/互斥, 通信, 調度…
- 存儲管理: 分配/回收, 地址轉換, 存儲保護, 內存擴充…
- 文件管理: 文件目錄, 文件操作, 磁盤空間, 文件存儲控制 …
- 設備管理: 設備驅動, 分配回收, 緩衝技術…
- 用戶接口: 系統命令, 編程接口
作用二: 操作系統是系統服務的提供者
- 舉例
- 進程的創建,執行
- 文件和目錄的操作
- I/O 設備的使用
作用三: 操作系統對機器硬件的擴展
- 舉例
- 操作系統是硬件基礎上的第一層軟件
- 將硬件的複雜程度簡化(例如: 軟盤的I/O操作)
操作系統的特徵
併發
- 指的是操作系統具有同時處理多個任務的能力
- 併發引起的問題
- 任務切換,保護,互相依賴任務之間同步的問題
- 同時執行多個程序的錯覺: 單CPU場景下, 任務之間輪流執行
- 並行: 不同任務同時在多個硬件部件上執行。 (注意併發和並行的區別)
共享
- 指的就是多個用戶程序共同使用操作系統的資源
- 舉例
- 互斥共享(打印機)
- 同時共享(重入代碼, 磁盤文件)
- 問題: 操作系統資源分配,保證不同進程間不被影響
虛擬
- 將物理實體(CPU,內存) 映射爲若干個邏輯實體-分時,分空間
- 目的: 提升資源利用率
- 舉例:
- CPU: 每個進程在虛擬CPU上在跑, 但是微觀上只有一個進程在一個CPU上在跑
- 進程獨立地址空間,物理上是共用一塊物理內存
- 顯示設備可以多開, 也是虛擬化的結果
隨機
- 操作系統必須隨時對次序不可預測的任務進行響應
- 舉例
- 進程運行速度不可預知,多個進程同時運行 (上下CPU)
- 難以重現系統在某一個時刻的狀態
操作系統架構
windows
- 簡化了一版基本架構,如圖:
- 其中和硬件打交道的就是 內核和硬件抽象層
- 用戶和操作系統打交道的是 動態鏈接庫
unix
- 看下簡單版的unix架構
- 看下相對全面一些的
linux
- 感覺用的最多的, 按照自己的理解整了一套架構圖, 不知道對不對,哈哈
操作系統的分類
- 操作系統的發展是隨着計算機硬件技術的發展
批處理系統
- 單道批處理系統
- 多道批處理系統
- 真脫機
- 假脫機(Spooling技術) : 這個覺得很經典
分時操作系統
- 輪流爲每個用戶服務
- 時間片: 按照時間片輪轉爲每個用戶服務
- 追求目標: 響應時間
通用操作系統
- 將分時和批處理結合
- 場景前臺: (分時優先,批處理後)
- 場景後臺: (批處理先,分時後)
實時操作系統
- 能夠及時響應外部請求, 能夠在嚴格的時間內完成
- 實時過程控制: 航空
- 實時通信系統: 交換機, 銀行
- 追求目標
1 嚴格時間內能有響應
2 高可靠性
個人計算機操作系統
- 計算機在某一時刻只爲一個人服務
- 追求目標: 界面友好,使用簡單, 豐富應用軟件
網絡操作系統
- 基於網絡體系結構和網絡協議標準開發的網絡模塊
- 功能: 網絡通信, 安全, 資源共享, 以及各種網絡應用
分佈式操作系統
- 以網絡爲基礎 或者 以多機爲基礎, 特徵是將計算任務分佈在不同計算機上
- 技術點: 任務分配, 調度, 負載均衡
- 優點: 處理能力強, 速度快, 可靠性強, 具有透明性
嵌入式操作系統
- 對應不同設備的軟硬件系統, 他是某一個設備中的系統, 不一定是計算機
- 功能: 控制設備中的各個部件協調工作, 合理調度
智能卡操作系統
- 智能卡: 一種帶有CPU芯片的卡片
- 特點: 由於非常小,對能耗和存儲都有嚴格的限制
- 舉例: 電子支付
核心點
- 操作系統的定義
- 操作系統的三個作用, 四個特徵
- Spooling技術
- windows, linux, unix架構特點
參考
[1] 陳向羣老師操作系統課程-北京大學