擼一擼簡單的操作系統知識

前言

打開瀏覽器,做個簡單計算,我們能看到控制檯打印出計算結果,這個過程究竟發生了什麼?

一個簡單計算

首先,我們使用鍵盤輸入計算式子,指令會被放入內存中,相應的控制器會取出內存中的指令,運算器拿到結果之後仍然會返回給內存,輸出設備繼續讀取內存講結果展示出來。

那麼操作系統是幹什麼的呢?如果沒有操作系統,JS要處理硬件的協調工作,進程之間的切換等等,說到了進程,Node.js問這個的可能性可是很大的。

操作系統

操作系統有四個特徵,併發,共享,異步,虛擬。

首先併發,併發並不是指多個任務同時執行,只是通過任務調度使得看起來是可以同時執行。操作系統的併發性指的是操作系統中可以同時存在多個運行的程序,舉例來說就是單核CPU運行着多個應用程序。

共享,當你用quicklook和vscode同時訪問一個文件時,你會發現並沒有想象中的報錯,這就是一種共享的方式;同時當你訪問某個文件,卻又刪除這個文件時,你會發現他會有報錯,這也是一種共享的體現,只不過叫做互斥共享。

虛擬我們經常接觸,從xp開始就知道配置虛擬內存了,包括虛擬存儲和虛擬處理器,虛擬的特性是以併發作爲基礎的。

異步就不用解釋了。

剛剛提到了指令,一般來說,指令是CPU能識別和執行的最基本命令,依據權限大小可以分爲特權指令和非特權指令,同時CPU也有兩種狀態,用戶態和內核態,前者只能執行非特權指令。

看一張圖:
在這裏插入圖片描述

時鐘管理,如進程切換,獲取時間信息,都依賴時鐘管理,如一個程序的時間分片結束之後,要切換下一個程序,而如果某個程序要進行系統資源調用,運行在用戶態的程序已經無法滿足需求,我們需要切換到內核態,經過一定的調度後,該系統資源準備就緒,通過I/O控制器會給操作系統發出一箇中斷信號,從用戶態切換到內核態,這個過程就是中斷處理的過程,也是唯一實現的方法。除此之外,中斷還有很多其他的分類。

進程

現代操作系統的特性決定了每個應用程序都需要分配一定的資源,如CPU,內存等,系統自然要生成一種數據結構稱爲PCB(進程控制塊),來描述進程信息。

進程有三種基本狀態,運行態,就緒態和阻塞態,還有兩種額外狀態,創建和終止。
在這裏插入圖片描述
在這裏插入圖片描述
需要注意的是,因爲進程資源都是獨立分配的,所以他們所擁有的內存地址空間都是互相獨立的,因此進程通信就是很必要的。

一般來說,通信方式有共享內存,這個很好理解。

有管道,即一個用與鏈接獨寫進程的一個共享文件,在內存中開闢一塊緩存區,需要注意的是pipe是半雙工通信,即只能單向,實現全雙工需要兩個 pipe。

還有消息傳遞等,如通過中間件實現發佈訂閱模式等。

其他

內存是硬件設備與CPU溝通的中轉站,程序執行前需要先放到內存中才能被CPU處理。

內存分配分爲連續分配和非連續分配,連續分配是指用戶進程分配的必須是一個連續的內存空間。

文件其實是一組數據的集合,整個文件系統可以看作一個樹結構。

其他還有IO控制設備等。

參考文章

看這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章