關於作業系統的基本常識
關於作業系統,我們需要掌握一些基本的常識問題。下面由小編為大家整理了的相關知識,希望對大家有幫助!
作業系統基本常識1:程序與執行緒
程序是一個具有獨立功能的程式的一次執行活動,是系統進行資源分配的一個基本單元。
執行緒是程序的一個實體,是cpu排程的基本單元,自己並不擁有系統資源,他的資源和該程序內的其他執行緒共享。、
引入執行緒的優點:
排程開銷小,易於排程;
方便的實現併發;
充分利用多處理器的效能;
執行緒和程序的不同:
執行緒必定屬於某個程序;但是一個程序可以擁有多個執行緒並且至少擁有一個執行緒。
不同程序互相獨立,資源分開,但是執行緒共用資源,沒有獨立的記憶體空間。
程序是程式的一次執行,執行緒可以理解為該程式中一個片段的執行。
程式和程序和執行緒的關係:
獨立功能的一次程式執行可以開啟一個程序,同程式可以多次開啟形成多個程序,每個程序中又可以開啟執行緒,當然每個程式都至少會有一個執行緒,比如main
執行緒同步的方法:
互斥量,訊號量,條件變數,臨界區。
作業系統基本常識2:核心執行緒和使用者執行緒
核心執行緒的建立和銷燬都是作業系統負責,通過系統呼叫完成。
使用者執行緒不需要作業系統負責,利用執行緒函式庫呼叫完成建立銷燬同步管理,並且允許自己定製自己的排程演算法,排程的代價比核心執行緒的代價低很多。
作業系統基本常識3:記憶體管理
方式:按照控制元件利用率排序的話為:塊式管理<頁式管理<段式管理<段頁式管理***其中段頁式管理每次操作要訪問三次記憶體***
分頁和分段的區別:
頁是資訊的物理單位,分頁是出於系統管理的需要
段式資訊的邏輯段位,分段是為了滿足使用者的需要,每次分頁的大小也取決於使用者
虛擬記憶體:虛擬記憶體是記憶體管理的一種技術,相對於實體記憶體而言,可以理解為假記憶體,使得應用程式把記憶體當做連續可用,允許程式設計師編寫比實際系統擁有的記憶體大得多的程式,實際上他的有一部分記憶體暫時儲存於外部儲存上面,在需要時在進行資料交換
虛擬記憶體的好處:
擴大地址空間
記憶體保護。每個程序獨自執行在自己的虛擬記憶體空間,互相不干擾,而且虛擬記憶體還對特定的記憶體地址進行防寫。
當程序需要通訊時,可以採用虛存共享的方式實現。
虛擬記憶體的壞處:
建立很多的資料結構,佔用額外的記憶體。
虛擬地址到實體地址的轉換,增加了執行時間。
頁面的換入換出需要磁碟io。
記憶體碎片:多次進行記憶體分配時就會出現記憶體碎片。
記憶體格式:***使用者使用段******空白段******使用者使用段***
內碎片:分配給使用者的儲存空間***使用者使用段***沒有使用完,其他程式也無法使用的部分記憶體,直到程序釋放。
外碎片:比如上面的空白段,他不屬於任何程序,但是又由於他太小不足以給與下一個程序分配空間,造成了外碎片。
作業系統基本常識4:cache替換演算法
資料可以存放在cpu和記憶體中,但是cpu處理速度快,容量小,記憶體容量大,但是轉給cpu的速度慢。所以就需要cache來做一個折中,先從記憶體調入cache再從cache調入cpu,又由於主存的快比cache多所以從主存調塊到chche中的時候,會出現該塊對映的對映的cache已經被使用的情況,需要cache被迫騰出其中的某一塊來接受新塊,就需要替換。
隨機演算法***RAND***
先進先出演算法***FIFO***
近期最少使用演算法***LRU***
最優替換演算法***OPT***
作業系統基本常識5:靜態連結和動態連結
靜態連結就是把要呼叫的函式或者是過程直接拷貝到可執行檔案中,當多個程式都需要呼叫該函式的時候,比較浪費記憶體資源。
動態連結就是並沒有在被呼叫時複製到可執行檔案中,而是加入了一些重定位資訊,當需要呼叫的時候到這裡來執行就ok了。
靜態連結庫:.lib檔案,裡面不允許再包含其他的動態或者靜態庫
動態連結庫:.dll檔案
作業系統基本常識6:庫函式呼叫與系統呼叫
庫函式呼叫屬於上層,執行在使用者空間,屬於程式和使用者的一部分,不同的系統但是使用相同的庫那麼效果就是一樣的。
系統呼叫是呼叫核心提供給應用程式的介面,屬於系統的一部分,而且不同的系統的系統呼叫是不一樣的。
作業系統基本常識7:使用者棧和核心棧
核心在建立執行緒的時候,會為程序建立相應的堆疊,每個程序會有兩個棧,一個使用者棧,一個核心棧,當程序在使用者空間時使用使用者棧,在核心空間時使用核心棧。並且通過設定堆疊指標暫存器的內容可以在使用者棧和核心棧之間相互轉換。