其實 操做系統並非與計算機硬件一塊兒誕生的linux
它是在人們使用計算機的過程當中,爲了管理硬件資源,提升性能提升資源利用率,而逐步地造成和完善起來的。程序員
操做系統也是一種程序,負責管理系統資源windows
上電自檢(通過BIOS)以後,處理器第一個要處理的程序性能
之因此叫作操做系統,其實就至關於它提供了一個工做臺spa
讓你能夠更加方便的操做計算機的軟硬件資源操作系統
是機器的一種封裝,對於人機交互提供了統一的操做方式線程
自從第二代晶體管計算機以後,計算機的性能有了很大的提高進程
與之矛盾的天然是計算機手動輸入速度慢內存
爲了提供系統利用率,出現了批處理系統資源
用戶將一批做業提交給操做系統後就再也不干預,由操做系統控制它們自動運行。
顯然不具有任何交互性,只是提升了系統的利用率
其中有
聯機批處理系統,聯機就是主機本身來控制輸入輸出
輸入輸出時,計算機的CPU是空閒的,須要等待數據傳輸完成
脫機批處理系統就是輸入輸出不在交由主機處理,託管到另外一個臺機器
顯然,處理機和主機能夠並行工做,他們經過高速磁帶進行對接
可是僅僅只能執行一個程序
人們固然但願計算機能夠同時執行多個任務
而後很天然的出現了多道程序系統
容許多個程序同時進入內存並運行
交替在CPU中運行,它們共享系統中的各類硬、軟件資源。
多道批處理系統
顧名思義就是批處理與多道程序的結合,兼顧了多道與批處理的優勢
不過沒有交互性
把CPU時間分紅時間片,各個任務按照時間片輪流執行,分時就是分配時間片
分時系統的實時性交互性比多道程序有更大的提升
還有一些特定的場景,對於實時性要求更高,好比軍事設備等
分爲實時控制系統/實時信息處理系統
響應更加及時,更加可靠,平時場景通常是用不到的
能夠看得出來,操做系統的發展中有幾個主要矛盾
CPU性能與手工操做的矛盾
CPU性能與輸入輸出的矛盾
運行單一任務與但願能夠執行多程序之間的矛盾
交互性差和但願能夠提供更強交互性之間的矛盾
實時性差與但願能夠提供更加實時可靠系統之間的矛盾
功能單一與但願能夠提供通用功能系統之間的矛盾
整個發展過程就是爲了解決這些矛盾
發展的結果也就是CPU的利用率大幅度上升,功能更加完備
能夠同時執行多個任務
實時性交互性更高更可靠
也出現了更爲通用的計算機
操做系統的類型更多的能夠理解爲邏輯上的意義,他們能夠相互結合,好比上面的多道批處理
還有分時批處理 實時批處理 等
Unix是最先的通用操做系統
此後又出現了linux/windows/蘋果
計算機由硬件和軟件構成
咱們能夠認爲操做系統是計算機軟件程序和硬件之間的一個薄層
這個薄層封裝了底層的硬件實現
基本功能是:
防止硬件被應用程序隨意濫用,而且嚮應用程序提供了簡單一致的機制來控制各類不一樣的硬件設備
操做系統經過幾個基本的抽象概念來達到這個目的
/虛擬內存/進程/文件/
既然是抽象,那天然是像譯碼器同樣,轉換了一種描述呈現表達操做方式
文件是對IO設備的抽象
就是字節序列而已,因此每一個IO設備,哪怕是鍵盤顯示器均可以當作是文件
嚮應用程序提供了一個統一的操做視圖
也能夠理解爲格式,也就是對於全部程序來講 全部的文件都是這樣子的
無論你究竟是什麼樣子的IO設備,應用程序徹底不用關注他具體的樣子
操做系統會提供一致性的解決方案
虛擬內存是對主存和磁盤I/O的設備的抽象
是計算機系統內存管理的一種技術。
它使得應用程序認爲它擁有連續的可用的內存(一個連續完整的地址空間)
好像本身都獨佔使用主存
經過提供連續的內存空間,每一個進程看到的虛擬地址空間由大量的固定的區塊構成
其實能夠理解爲戶型圖,每一個進程的戶型都同樣
包括程序代碼和數據區/堆/棧 等
他們看到的地址空間是一致的
而不用你本身費心的去管理地址
如今的計算機均可以多任務同時執行,以前提到的中斷正是這種功能的硬件基礎
沒有哪一個程序會一直獨佔處理器
每一個程序都須要內存,想要多任務運行天然須要更多的內存
怎麼才能在有限的內存空間服務於愈來愈多的程序呢?
注意到,雖然內存中有許多個程序同時運行,可是同一時間點,只有一個處理器在執行
若是內存不夠的話,可讓暫時不用的數據和代碼 存放到磁盤
騰出來空間加載將要使用的部分
若是須要的話,再將它們用一樣的方式加載回來
這樣編寫程序的時候,不用關注究竟是否有內存可用,
對於當前程序,他會假定他確定有足夠的內存使用
由於這部份內存並不存在,而是位於磁盤上,因此叫作虛擬內存
硬盤的速度是很慢的,若是須要訪問的內容不在內存中,而是從磁盤載入,代價是巨大的
因此計算機天然會很慢
也就是說,虛擬內存犧牲執行效率換執行空間(同時運行更多的程序)
對於程序員來講,操做系統提供的虛擬內存,能夠說是給程序的運行提供了統一的內存空間
進程是對處理器 主存 I/O設備的抽象
每一個程序在計算機上運行,看上去能夠獨佔的使用處理器,主存和I/O設備
處理器好像在不間斷的一條接一條的執行程序中的指令
對於程序來講好像只有他本身的程序的代碼和數據在內存中
好像跟其餘的正在運行的應用程序並無關係
這是操做系統提供的一種假象,這就是進程的概念
進程是對處理器 主存 I/O設備的抽象,也便是一個正在運行的程序的一種抽象
進程也是硬件中斷以及系統cpu時間片調度的產物
一個正在運行的程序,這是一件抽象的事情,
想要把它具體的映射到系統中,並且還能有中斷,還可以從新返回現場繼續執行
你必須用具體的信息去描述記錄跟蹤它的運行
操做系統保持跟蹤進程運行時所須要的全部信息,這種信息也叫做上下文
它包括不少信息,天然取決於操做系統的底層實現
可能包括PC和寄存器的值,主存的內容等
操做系統想要把控制權從當前進程轉移到某個新的進程,就會進行上下文切換
也就是保存當前的上下文,恢復進程的上下文
固然現代操做系統一個進程又實際的被分爲多個稱之爲線程的執行單元組成
每一個線程都運行在進程上下文,共享一樣的代碼和全局數據
操做系統也是計算機發展中的一個偉大創舉
他隱藏了大量的底層細節,提供了大量方便的抽象
總結:
操做系統就是對硬件的封裝,提供簡單統一的訪問形式.