作業系統基本概念

2021-06-13 23:19:31 字數 2522 閱讀 1321

一.程序的基本狀態

1.初始態

2.就緒態

3.執行態

4.等待態

5.終止

相互轉換關係如下:

二.執行緒和程序區別

程序:是作業系統分配資源的最小單位

執行緒:是排程的基本單元,共享所在程序的檔案資料**,有自己的棧和程式計數器

一般對於許多相同或相似的任務,傾向於將他們設計為多執行緒模型。因為程序占用的資源較多限制併發量,並且的切換有上下

文的切換,所以較慢,而執行緒占用資源少的較快。

三.系統執行棧

乙份主工作流程中經常包含很多分支流程,不僅主工作流程經常引用分支流程,分支流程之間也經常相互引用。當cpu遇到引用分支流程的情況,就會暫停本流程的執行,先跳轉到被引用的分支流程,執行完那個分支流程之後,才回到之前的流程繼續執行。那麼,之前那個暫停的流程的當前工作狀態存放在**呢?沒錯,就是我們前面講過的執行棧。 

cpu先把之前流程的當前工作狀態存放到執行棧中,然後跳轉到乙個分支流程,開始執行。cpu在執行當前這個分支流程的過程中,也使用同乙個執行棧來存放當前工作狀態,而且是放在之前那個工作流程的工作狀態的上面。當完成當前分支流程之後,cpu就會移走執行棧中當前分支流程的工作狀態,這時候,上乙個沒完成的工作流程的工作狀態就浮出水面,出現在執行棧的最頂層。cpu正好就接著上次未完成的工作狀態繼續進行。 

我們可以看到,執行棧這種「先進後出,後進先出」的特點,恰好就是「棧」這個資料結構的特點,因而得名「執行棧」。 

關於「stack」這個英文名詞的譯法,還有些說道。在一些技術書籍裡,stack被翻譯成「堆疊」。這種譯法還挺常見。但我認為,「堆疊」這種說法是不準確的。因為,「堆」和「棧」是兩種不同的資料結構。 

「堆」這種資料結構主要用於記憶體的分配、組織、管理,結構比「棧」結構複雜得多,本書不會展開詳述,因為對於應用程式設計師來說,並不需要掌握「堆」這個結構的具體原理。不過,應用程式設計師還是應該掌握一些記憶體管理的基本概念。 

我們可以把記憶體想象成乙個巨大無比的木架,上面有無數的大小相同的格仔。那些格仔就是記憶體單元。如同信箱一樣,每乙個小格仔(記憶體單元)都有自己的位址編號,叫做記憶體位址,由作業系統程序統一管理和編制。 

小格仔的數量就是記憶體容量。同樣,作業系統程序所管理的虛擬記憶體容量並不一定和記憶體卡的物理記憶體容量一致。作業系統程序有可能在硬碟上開闢一塊空間,作為虛擬記憶體的備用空間,當記憶體卡的物理記憶體容量不夠時,就把記憶體中一些暫時不用的內容暫存道硬碟上,然後把需要的內容匯入騰出的記憶體空間。這種技術叫做虛擬記憶體置換。 

在「虛擬記憶體」這個巨大的木架上,每乙個小格仔的大小都是完全一致的,每個小格仔都有自己唯一的記憶體位址。我們可以把各種資料存放到小格仔裡面。如果資料尺寸足夠小的話,自然沒問題。如果資料尺寸超過了小格仔的大小怎麼辦?不用擔心,相鄰的小格仔之間都是相通的,我們可以把大尺寸的資料放在相鄰的多個小格仔裡面。 

乍看起來,乙個資料放在乙個小格仔裡面和多個小格仔裡面,並沒有太大的區別。但是,在某些情況下,卻會產生微妙的差別,甚至會對我們的程式設計產生影響。 

cpu工作的時候,經常需要把資料從記憶體這個大木架中取到自己的「暫存器」工作台上。當資料存放在乙個小格仔裡面的時候,cpu只需要取一次就夠了。這種操作叫做原子操作,即不會被打斷的最小工作步驟。 

在物理學中,原子,這個詞的含義就是最本原的粒子,不可能再被分割。當然,後來物理學家又發現了更小的粒子。但原子這個詞的本意卻是不可分割的。原子操作也是這個意思,即不可分割的操作。 

當資料存放在多個小格仔裡面的時候,cpu有可能需要分幾次從記憶體中取出資料,這樣就分成了幾個步驟,中間有可能被打斷,在某些特殊的情況下,         可能發生不可預知的後果,這種操作就叫做非原子操作。 

從程式設計的角度來講,原子操作自然是比非原子操作安全的。因此,我們在設計程式時,腦子裡應該有這個意識,盡量避免引起的非原子操作。這類非原子操作通常由長資料型別引起。至於資料型別是什麼,什麼又是「長」資料型別,非原子操作又可能產生怎麼樣的意外,後面會有專門的章節講解這方面的內容,我們現在不必關心。 

從這裡我們看出,作業系統的記憶體單元的尺寸對於原子操作的意義。記憶體單元越大,就能夠容納更大的資料,就越容易保證原子操作。 

我們常聽到,32位作業系統或64位作業系統之類的說法。這裡的32位或者64位的說法,指的就是cpu的工作台(暫存器)的位數。 

64位作業系統的記憶體單元32位作業系統大了一倍,那麼,原子操作能夠容納的資料尺寸也大了一倍。這意味著,在取用某些「長」資料型別的時候,cpu按照64位作業系統的規則,只需要取一次,就可以把資料取到暫存器中。而cpu按照32位作業系統的規則,卻分兩次把資料取到暫存器中。因此,從處理長資料型別的速度上來說,64位作業系統是優於32位作業系統的。 

記憶體單元是作業系統定義的,原子操作自然也是作業系統來保證的,同時也需要cpu的相應支援。至少,cpu的「暫存器」工作台尺寸不能小於記憶體單元,cpu才能一次就把乙個記憶體單元中的資料取到暫存器中。現代的cpu已經進入多核時代,都已經支援64位寬度的記憶體單元,從而支援64位作業系統。 

作業系統 基本概念

本文為自己學習 unix環境高階程式設計 而來的學習記錄 我的學習方 是將此書作為工具書來使用,當實際工作中遇到相關的問題針對性地學習知識圓點。基礎概念從嚴格意義上說,可講作業系統定義為一種軟體,它控制計算機硬體資源,提供程式執行環境。系統呼叫 共用函式庫 shell 應用程式 unix系統登陸 a...

作業系統基本概念

1 桌面作業系統 macos linux 2 伺服器作業系統 windows server 3 嵌入式作業系統 linux 4 移動裝置作業系統 iosandroid 基於linux 1965 年之前的時候,電腦並不像現在一樣普遍,它可不是一般人能碰的起的,除非是軍事或者學院的研究機構,而且當時大型...

作業系統基本概念

五 使用者態 核心態及系統呼叫 六 微核心結構 七 程序 記憶體和檔案 八 系統呼叫 程式可以執行在機器語言或組合語言上編寫,用這種被稱為 低階 我更願意稱其為底層 的語言編寫出來的機器語言程式無需經過編譯器的翻譯就可以在計算機指令集上執行。如果是在組合語言上編寫的匯程式設計序,則只需要經過彙編器的...