計(jì)算機(jī)系統(tǒng)基本概念

系統(tǒng)軟件

用于管理計(jì)算機(jī)本身的軟件稱為系統(tǒng)軟件,可以分成兩塊:

一塊是平臺性的,如操作系統(tǒng)內(nèi)核、驅(qū)動、運(yùn)行庫;

另外一塊是用于程序開發(fā)的,如編譯器、匯編器、鏈接器。


軟件體系架構(gòu)

軟件體系架構(gòu)

計(jì)算機(jī)中的主要資源

CPU

不要讓CPU空閑

多道程序:通過監(jiān)控程序使CPU不空閑,一空閑,就把等待著的程序啟動(策略粗糙,不分輕重)。

分時(shí)系統(tǒng):部分系統(tǒng)調(diào)用時(shí),OS判斷是否有其他程序在等待,有就讓出CPU。(問題:如果有1個(gè)程序進(jìn)行耗時(shí)運(yùn)算或陷入無限循環(huán),不進(jìn)行系統(tǒng)調(diào)用,OS就好像死機(jī)了一樣。

多任務(wù)系統(tǒng):通過搶占式分配CPU。所有應(yīng)用程序以進(jìn)程的方式,運(yùn)行在比OS權(quán)限低的級別。CPU由OS進(jìn)行分配,每個(gè)進(jìn)程有優(yōu)先級。OS將CPU執(zhí)行的進(jìn)程快速切換,造成了很多進(jìn)程同時(shí)運(yùn)行的假象。

存儲(磁盤+內(nèi)存)

磁盤

物理磁盤分為多個(gè)盤片,每個(gè)盤片2個(gè)盤面,每面按同心圓分為若干磁道,每個(gè)磁道分為若干扇區(qū),每個(gè)扇區(qū)一般存儲512字節(jié)數(shù)據(jù)。

硬盤g

現(xiàn)代磁盤已經(jīng)演進(jìn)為 => 屏蔽了復(fù)雜的硬件細(xì)節(jié),通過LBA(Logical Block Address),對整個(gè)磁盤的扇區(qū)從001進(jìn)行編號。

內(nèi)存

早期,各程序是直接運(yùn)行在物理內(nèi)存上的,

因此帶來了3個(gè)問題:

  1. 進(jìn)程間地址空間不隔離,程序間可以相互改寫數(shù)據(jù)

  2. 內(nèi)存使用效率低,進(jìn)程需要連續(xù)大小的內(nèi)存,導(dǎo)致內(nèi)存碎片

  3. 程序運(yùn)行地址不確定,導(dǎo)致函數(shù)重定位困難

為此提出過2個(gè)解決方案:

  1. 分段:提出了每個(gè)進(jìn)程獨(dú)自的虛擬地址,通過頁表與物理地址間進(jìn)行映射
分段映射

這個(gè)方案解決了問題1、3,但是沒有解決連續(xù)內(nèi)存的問題,于是提出了方案2。

  1. 分頁:在方案1的基礎(chǔ)上,將虛擬內(nèi)存分頁(每頁4kb)、物理內(nèi)存分幀(每幀也是4kb),然后將頁幀間進(jìn)行映射

    分頁映射

    ps.內(nèi)存中每個(gè)地址可容納1個(gè)byte的數(shù)據(jù)

    分頁之后其他問題:單進(jìn)程的最大虛擬地址4GB(32位OS),物理內(nèi)存最大4GB,會導(dǎo)致多進(jìn)程運(yùn)行時(shí),物理內(nèi)存可能會不夠用。

    解決方法:將進(jìn)程中使用次數(shù)少的數(shù)據(jù)映射到磁盤。

  2. 虛擬內(nèi)存分段:在進(jìn)程的虛擬內(nèi)存中,會根據(jù)數(shù)據(jù)類型進(jìn)行分段管理。

虛擬內(nèi)存地址分配

IO設(shè)備


線程

因多核CPU的發(fā)展而誕生

輕量級進(jìn)程,程序執(zhí)行流的最小單元

每個(gè)進(jìn)程由1~3個(gè)線程組成,會共享進(jìn)程的text、data、heap段中的數(shù)據(jù),寄存器和棧中的數(shù)據(jù)不共享。

線程有三種狀態(tài):

  • 運(yùn)行

  • 就緒:可以立即運(yùn)行,但是當(dāng)前無空閑CPU

  • 等待:等待IO,無法執(zhí)行

每個(gè)線程擁有一段可執(zhí)行的時(shí)間,稱為時(shí)間片

線程狀態(tài)切換

調(diào)度

優(yōu)先級調(diào)度 + 輪轉(zhuǎn)法

每個(gè)線程有優(yōu)先級,高優(yōu)先級的線程更早被分配時(shí)間片。

線程可分為IO密集型線程(經(jīng)常IO主動放棄時(shí)間片)和CPU密集型線程(很少等待IO,一直在進(jìn)行運(yùn)算),

其中IO密集型線程更容易獲得優(yōu)先級的提升。

導(dǎo)致的問題:進(jìn)程餓死,優(yōu)先級過低的線程,始終分配不到時(shí)間片,無法執(zhí)行。

解決:等待過久的線程將獲得優(yōu)先級提升。

備注

Linux下不存在真正意義上的線程概念,都稱為任務(wù)(task)。但是不同的任務(wù)間可以共享內(nèi)存空間,構(gòu)成同一個(gè)進(jìn)程,這些任務(wù)也就成了這個(gè)進(jìn)程里的線程。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容