**:
1.什麼是作業系統?
os是使用者與硬體之間的介面,管理計算機的軟體和硬體資源。
2.計算機的硬體包括:cpu、輸入輸出裝置、儲存器、匯流排等。
程序是資源分配的獨立單位,程序有獨立的位址空間。是程式的一次執行,包含**和資料。
執行緒是cpu排程的基本單位,執行緒使用父程序的資料空間,排程執行緒比排程程序更快,開銷更小。
*資源分配中的資源是指:cpu時間、 儲存器、檔案和io裝置。
執行緒切換開銷小。(我能想到的就這麼多,具體是指哪些開銷呢?我不知道)
區別:1)乙個程序可以有多個執行緒,多個執行緒可以併發。
2)程序和執行緒是不同的資源管理方式,程序擁有獨立的位址空間,執行緒沒有,同一程序的執行緒共享資料。
3)執行緒不占用系統資源,排程執行緒比排程程序開銷小。
4)對於要求同時進行並且共享變數,只能使用多執行緒。
linux和windows都有的通訊方式:管道、socket、共享記憶體、訊息。
但是具體都是怎麼操作的呢?不知道
執行緒同步是指多執行緒通過特定的方式來控制線程之間的執行順序(同步)。
1)互斥量。只能有乙個執行緒訪問公共資源,擁有互斥物件才能訪問公共資源,保證公共資源不會被多個執行緒同時訪問。
2)訊號量。保證了訪問公共資源的最大的執行緒個數。
3)臨界區,同時只能由乙個執行緒進入臨界區,互斥訪問。
//程序同步:訊號量、管程、分布式系統。
臨界區就是每個程序中訪問臨界資源的那段**,不能多個程序同時進入。
1)如果乙個程序進入了臨界區,那麼其他程序等待;
2)如果當前程序不能進入臨界區,那麼就要釋放cpu資源。
3)進入臨界區的程序有訪問控制時間,以便其他程序進入。
比如訪問印表機的**,
實現臨界區:軟體實現,中斷遮蔽,硬體指令法。
就緒:程序已經獲得了除cpu以外的所有資源,正在等待cpu排程。
執行:獲得了cpu資源。
阻塞:程序等待某些條件,在某些條件達成前無法執行。
需要注意的是:執行到就緒狀態轉換是超時、時間片用完。
1. 給程序分類乙個唯一的識別符號
2.給程序分配儲存空間
3.初始化程序控制塊pcb(pcb見下)
4.放入佇列,等待cpu資源。
2)先來先服務:屬於非搶占排程,實現簡單,但是對短作業不利。
3)多級反饋佇列排程:多個優先順序佇列,根據優先順序的降低時間片長度增加,先執行優先順序高的,每個佇列內部使用時間片輪轉,如果沒在當前時間片內執行完,那麼就放到下一優先順序佇列的隊尾;高優先順序隊列為空時,去執行低優先順序佇列內容。
兩者均有3種狀態,當執行緒進行系統呼叫時會阻塞程序,但是執行緒還是處於執行態,不會阻塞。
使用者級執行緒和核心級執行緒不太懂欸。
在兩個以上的併發程序中,每個程序都保持某種資源,並且申請其他程序所占用的資源,而且又有迴圈等待,無法推進。
條件:互斥、迴圈等待(若干程序首尾相連形成環等待關係)、非剝奪(無法在程序結束前剝奪對資源的占有)、請求與保持(乙個程序請求資源時,不釋放自己占有的資源)
如何解決死鎖?
1)死鎖預防。
破壞後三個條件:
a.破壞迴圈等待,就是不讓申請資源形成環路。對資源排序,程序如果申請到了r資源,那麼下次只能申請排在r後面的,不能申排在其前面的,定製乙個規則。
b.破壞非剝奪。當無法得到自己申請的資源時,先釋放自己的資源,等需要時再申請。
c.破壞請求與保持條件,在程式執行前,必須申請所有需要的資源。(感覺b和c有點像啊!)
2)死鎖避免。
沒有採取上邊三個措施預防,而是在資源動態分配的過程中,防止系統進入不安全狀態。
代表演算法:銀行家演算法。
尋找安全的程序序列,安全才分配資源。
對每個程序檢視現在資源能否滿足 其所需資源,如果可以,那麼就分配,並且現有資源要變為現在有的資源數+已經分配程序的資源。
再對下乙個程序進行同樣的判定。看是否存在安全序列,如果存在才分配資源。
//沒複習之前看見這兩個感覺都是一樣的,並且根本就不知道其中指的內容是什麼。
死鎖檢測與解除:
資源分配圖(其實看見資源分配圖已經不知道是什麼了)
**:有邊和節點,邊表示對資源的申請和占有,點表示程序,是有向圖。
如果圖中存在環路,那麼可能存在死鎖;如果圖中不存在環路,那麼肯定不存在死鎖。
//不知道這個會不會考到啊,但是好像什麼都不記得了,還是複習一下吧!
-讀者-寫者問題
-哲學家就餐問題
1)讀者寫者問題
讀檔案時其他程序也可以讀;寫檔案時,其他程序不能讀也不能寫。
讀者優先:
將所有讀者讀完,才允許寫者進來,會導致寫者飢餓。
怎麼實現呢?
這個就說的很好,有三個變數,因為readercount是乙個全域性的,那麼它需要有個鎖來保持它的更新統一。
當有讀者時,讀者數量++,如果是第乙個讀者,那麼就p讀寫檔案的互斥量;如果最後乙個讀者已經讀完,那麼就v互斥量,允許寫者寫了。
寫者優先:
那麼就讓寫者一直進來,對寫者進行計數,如果是第乙個寫者,那麼就將讀取的鎖p,如果是最後乙個寫者,那麼就將讀取的鎖v;讀者的**是不變的。
總之就是對讀者寫者分別計數,第乙個和最後乙個的情況要做p和v的操作。
每次最多隻允許4位哲學家拿左筷子,這樣就可以允許有一位哲學家就餐,就餐完之後放下筷子,。
**:
物理記憶體是實際的記憶體,在cpu中指的是定址空間的大小,比如有20根匯流排,那麼定址空間就是1mb,32位記憶體定址就是4gb。
那麼為什麼需要虛擬記憶體呢?
因為物理記憶體大小是有限的,如果現在執行的乙個程序需要的記憶體可能是大於物理記憶體的,那麼就不能所有的資料都載入到物理記憶體中,那麼剩下的部分就需要先放到磁碟中,等需要時再調入記憶體,所以虛擬記憶體是程序執行時所用的記憶體空間的總和,並且有一部分是不在物理記憶體當中的。
什麼是虛擬記憶體位址和物理記憶體位址呢?
計算機記憶體是分頁的,有乙個頁表,對映虛擬記憶體頁到磁碟,作業系統有頁面失效功能,作業系統找到乙個最少使用的頁幀,並且將其寫入磁碟,將需要訪問的頁調入記憶體,並且修改頁表項的對映,保證了所有的虛擬頁都會被排程。這就是處理虛擬記憶體到物理記憶體的步驟。
**:
在每個程序建立載入時,核心只是為程序建立了虛擬記憶體的布局,初始化pcb中的相關鍊錶,建立起虛擬記憶體和磁碟的對映關係,並不需要立即把程序的程式和資料拷貝到物理記憶體中,等執行到對應的程式時,才通過缺頁中斷調入記憶體。
虛擬空間都被對映到了磁碟空間中,由頁表對映到磁碟檔案中,當訪問到某個位置的時候,通過頁表項判斷是否在記憶體中,如果不是則缺頁中斷或會發生頁面替換。
四種:固定分割槽(內部碎片)、動態分割槽、分頁、分段。
動態分割槽:最佳適配、首次適配、下次適配(從上次放置的位置開始選擇乙個滿足大小的空閒塊)
分頁和分段的區別:
頁表項對映到記憶體塊中,每次cpu訪問乙個資料,都要兩次訪存,一次是訪問頁表,一次是訪問實際實體地址,可以增加乙個快表,
頁面置換演算法包括:nru最近未使用、fifo先進先出、爾二次機會等。
分段:
OS知識點小記
寫牛客題目時錯了的都記一下 1.響應比高者優先作業排程演算法是通過計算時間和周轉時間來實現的。感謝巨巨的部落格 一.先來先服務 fcfs 思想 從 公平 的角度思考。規則 按照作業 程序到達的先後順序。用於作業 程序排程 作業排程 考慮那個作業先到達 程序排程 考慮那個程序先到達 搶占 非搶占式的演...
os模組相關知識點
import os print os.name 返回作業系統的名字,windows 返回 nt linux 返回 posix 注意該命令不帶括號。以下命令基本都帶括號 print os.getcwd 獲取當前工作的目錄 print os.listdir c users asus desktop 課題...
OS 執行緒相關知識點
作業系統中引入程序的目的,是為了描述和實現多個程式的併發執行,以改善資源利用率以及提高系統吞吐量。那為什麼還需要引入執行緒呢?下面我們先來回顧一下什麼是程序 程序有兩個基本屬性 資源的擁有者 給每個程序分配一虛擬位址空間,儲存程序影像,控制一些資源 檔案 i o裝置 有狀態 優先順序 排程。排程單位...