1 程序基本概念
1.1 多程序模型
多個程序是分時執行的,每個程序的指令流按順序執行。
多個程序在一個處理器上分時運作,如圖:

作業系統需要做的事情是:維護一個全局的程序表,記錄下目前有哪些程序正在被執行;把時間分成适當的片段,現代處理器結構可以通過設定時鐘中斷,每次時鐘中斷到來時系統就會獲得控制權,在程序間實施切換,即保留上一個程序的環境資訊,恢複下一個程序的執行環境。
1.2 程序和程式
程式的記憶體布局結構
一個c/c++ 程式的典型布局結構,如圖:
程式記憶體區域有三種類型:靜态資料區,動态資料區,以及維護控制流資訊和局部狀态的調用棧區域。
靜态資料區存放的時全局變量以及靜态變量等資訊,編寫代碼時确定。
動态資料區存放程式執行過程中根據需要而配置設定或回收的區域。
調用棧存放的時程式執行過程中的函數狀态資訊,函數參數。
2 線程基本概念
2.1 線程模型
現代計算機結構中有兩種線程模型:使用者級線程(user-level threads)和核心級線程(kernel-level threads)。
使用者級線程是指,應用程式在作業系統提供的單個控制流的基礎上,通過在某些控制點(比如系統調用)上分離出一些虛拟的控制流,進而模拟多個控制流的行為。
核心級線程往往指作業系統提供的線程語義。是以,系統有必要維護一個全局的線程表,線上程表中記錄每個線程的寄存器、狀态以及其他一些資訊。
2.2 線程排程算法
線程排程算法可以分為非搶占式算法和搶占式算法。
三種典型的線程排程算法:先到先服務算法、時間片輪轉排程算法、優先級排程算法。
2.3 線程和程序的關系
如圖:
a圖:不支援線程語義的系統中,程序提供一個完全的執行環境,同時也有一個控制流完成其預定的功能。
b圖:作業系統按程序來配置設定處理器資源,對線程的支援可以在使用者模式下完成。
c圖:支援核心級線程的系統中,程序僅提供一個執行環境,它包含一個或多個線程,每個線程代表一個單獨的指令流,作業系統按線程配置設定處理器資源。