利用insert、update和delete命令可以同时对多个表进行操作_学习笔记-操作系统(1)...
概念
- 負責管理協調硬件、軟件等計算機資源的工作
- 為上層用戶、應用程序提供簡單易用的服務
- 是一種系統軟件
功能和目標
- 資源的管理者
- 處理機管理:進程管理(進程控制、進程同步、進程通信、死鎖處理、處理機調度)
- 存儲器管理:內存管理(內存分配、地址映射、內存保護與共享、虛擬內存)
- 文件管理:文件存儲空間的管理、目錄管理、文件讀寫管理和保護
- 設備管理:完成用戶的I/O請求,方便用戶使用各種設備,并提高設備的利用率。主要包括緩沖管理、設備分配、設備處理、虛擬設備
- 向用戶提供服務
- 命令接口(聯機命令接口、脫機命令接口)
- 程序接口(由一組系統調用組成)
- GUI用戶圖形界面
- 對硬件機器的擴展
- 擴充機器
操作系統的特征
并發、共享、虛擬、異步
并發
兩個或多個事件在同一時間間隔內發生。宏觀上是同時發生的,但微觀上是交替發生的。常考易混概念——并行:指兩個或多個事件在同一時刻同時發生。
單核CPU同一時刻只能執行一個程序,各個程序只能并發地執行
多核CPU同一時刻可以同時執行多個程序,多個程序可以并行地執行
共享
共享即資源共享,是指系統中的資源可供內存中多個并發執行的程序共同使用。
兩種資源共享方式:互斥共享方式、同時共享方式
虛擬
虛擬是指將一個物理上的實體變成若干個邏輯上的對應物。
虛擬技術:空分復用技術(如虛擬存儲器技術)、時分復用技術(如虛擬處理器)
異步
異步是指在多道程序環境下,允許多個程序并發執行,但是由于資源有限,進程執行不是一貫到底的,而是走走停停,以不可預知的速度向前推進,這就是進程的異步性。
操作系統的運行機制
兩種指令:處理器能識別、執行的最基本命令
- 特權指令:如內存清零指令
- 非特權指令如普通的運算指令
兩種處理器狀態(用程序狀態字寄存器PSW中的標志位識別)
- 核心態(管態):特權指令、非特權指令都能執行
- 用戶態(目態):只能執行非特權指令
兩種程序
內核程序、應用程序
操作系統的內核
內核是計算機上配置的底層軟件,是操作系統最基本、最核心的部分。
操作系統的體系結構
大內核、微內核
中斷
- 當中斷發生時,CPU立即進入核心態
- 當中斷發生后,當前運行的進程暫停運行,并由操作系統內核對中斷進行處理
- 對于不同的中斷信號,會進行不同的處理
中斷:內中斷和外中斷
系統調用
如果一個進程在用戶態需要使用內核態的功能,就進行系統調用從而陷入內核,由操作系統代為完成。
操作系統作為用戶和計算機之間的接口,需要向上提供簡易的服務。主要包括命令接口和程序接口。其中程序接口由一組系統調用組成。(核心態)
大內核
大內核是將操作系統功能作為一個緊密結合的整體放到內核。由于各模塊共享信息,因此有很高的性能。
微內核
將一部分操作系統功能移出內核,從而降低內核的復雜性。在微內核結構下,操作系統被劃分為小的、定義良好的模塊,只有微內核這一模塊運行在內核態,其余模塊運行在用戶態。
中斷分類
- 外中斷:由CPU執行指令以外的事件引起。
- 異常:由CPU執行指令的內部事件引起,如非法操作碼、地址越界、算術溢出等。
- 陷入:在用戶程序中使用系統調用。
進程是資源分配的基本單位。
線程是獨立調度的基本單位。一個進程中可以有多個線程,他們共享資源。
區別
進程狀態的切換
- 就緒狀態(ready):等待被調度
- 運行狀態(running)
- 阻塞狀態(waiting):等待資源
進程調度算法
進程同步
進程通信
進程間傳輸信息
死鎖發生的必要條件
- 互斥:每個資源要么已經分配給了一個進程,要么就是可用的
- 占有和等待:已經得到了某個資源的進程可以再請求新的資源
- 不可搶占:只能被占有它的進程顯式的釋放
- 環路等待:進程組成環路
處理方法
1.鴕鳥策略
不采取措施
2.死鎖檢測和死鎖恢復
檢測到死鎖后采取措施進行恢復
- 每種類型一個資源的死鎖檢測:通過檢測有向圖是否存在環。深度優先算法。
- 每種類型多個資源的死鎖檢測:每個進程最開始時都不被標記,執行過程有可能被標記。當算法結束時,任何沒有被標記的進程都是死鎖進程。
3.死鎖恢復
- 利用搶占恢復
- 利用回滾恢復
- 通過殺死進程恢復
死鎖預防
- 破壞互斥條件
- 破壞占有和等待條件
- 破壞不可搶占條件
- 破壞環路等待:編號
死鎖避免
- 安全狀態
- 單個資源的銀行家算法
- 多個資源的銀行家算法
虛擬內存
讓物理內存擴充成更大的邏輯內存,從而讓程序獲得更多的可用內存。
分頁系統地址映射
內存管理單元(MMU)管理著地址空間和物理內存的轉換,其中的頁表(Page table)存儲著頁(程序地址空間)和頁框(物理內存空間)的映射表。
一個虛擬地址分成兩個部分,一部分存儲頁面號,一部分存儲偏移量。
頁面置換算法
訪問的頁面不在內存中,將該頁調入內存,如果無空閑空間,系統調出一個頁面騰空間。
使頁面置換頻率最低(缺頁率最低)
- 最佳(OPT):被換出的頁面是最長時間不再被訪問的,保證最低的缺頁率。
- 最近最久未使用(LRU):鏈表實現
- 最近未使用(NRU)
- 先進先出(FIFO):選擇換出的頁面是最先進入的頁面
- 第二次機會算法
- 時鐘
分段
虛擬內存采用的是分頁技術,也就是將地址空間劃分成固定大小的頁,每一頁再與內存進行映射。分段的做法是把每個表分成段,一個段構成一個獨立的地址空間。每個段的長度可以不同,并且可以動態增長。
段頁式
程序的地址空間劃分成多個擁有獨立地址空間的段,每個段上的地址空間劃分成大小相同的頁。這樣既擁有分段系統的共享和保護,又擁有分頁系統的虛擬內存功能。
分頁和分段的比較:
- 對程序員的透明性:分頁透明,但是分段需要程序員顯式劃分每個段。
- 地址空間的維度:分頁是一維地址空間,分段是二維的。
- 大小是否可以改變:頁的大小不可變,段的大小可以動態改變。
- 出現的原因:分頁主要是用于實現虛擬內存,從而獲得更大的地址空間;分段是為了使程序和數據可以被劃分為邏輯上獨立的地址空間并且有助于共享和保護。
磁盤的結構
- 盤面(Platter):一個磁盤有多個盤面;
- 磁道(Track):盤面上的圓形帶狀區域,一個盤面可以有多個磁道;
- 扇區(Track Sector):磁道上的一個弧段,一個磁道可以有多個扇區,它是最小的物理儲存單位,目前主要有 512 bytes 與 4 K 兩種大小;
- 磁頭(Head):與盤面非常接近,能夠將盤面上的磁場轉換為電信號(讀),或者將電信號轉換為盤面的磁場(寫);
- 制動手臂(Actuator arm):用于在磁道之間移動磁頭;
- 主軸(Spindle):使整個盤面轉動。
磁盤調度算法
讀寫一個磁盤塊的時間的影響因素有:
- 旋轉時間(主軸轉動盤面,使得磁頭移動到適當的扇區上)
- 尋道時間(制動手臂移動,使得磁頭移動到適當的磁道上)
- 實際的數據傳輸時間
其中,尋道時間最長,因此磁盤調度的主要目標是使磁盤的平均尋道時間最短。
編譯系統
- 預處理階段:處理以 # 開頭的預處理命令;
- 編譯階段:翻譯成匯編文件(.s);
- 匯編階段:將匯編文件翻譯成可重定位目標文件(.o);
- 鏈接階段:將可重定位目標文件和 printf.o 等單獨預編譯好的目標文件進行合并,得到最終的可執行目標文件。
靜態鏈接
靜態鏈接器以一組可重定位目標文件為輸入,生成一個完全鏈接的可執行目標文件作為輸出。鏈接器主要完成以下兩個任務:
- 符號解析:每個符號對應于一個函數、一個全局變量或一個靜態變量,符號解析的目的是將每個符號引用與一個符號定義關聯起來。
- 重定位:鏈接器通過把每個符號定義與一個內存位置關聯起來,然后修改所有對這些符號的引用,使得它們指向這個內存位置。
目標文件
- 可執行目標文件:可以直接在內存中執行;
- 可重定位目標文件:可與其它可重定位目標文件在鏈接階段合并,創建一個可執行目標文件;
- 共享目標文件:這是一種特殊的可重定位目標文件,可以在運行時被動態加載進內存并鏈接;
動態鏈接
靜態庫有以下兩個問題:
- 當靜態庫更新時那么整個程序都要重新進行鏈接;
- 對于 printf 這種標準函數庫,如果每個程序都要有代碼,這會極大浪費資源。
共享庫是為了解決靜態庫的這兩個問題而設計的,在 Linux 系統中通常用 .so 后綴來表示,Windows 系統上它們被稱為 DLL(數據庫模式定義語言Data Definition Language)。它具有以下特點:
- 在給定的文件系統中一個庫只有一個文件,所有引用該庫的可執行目標文件都共享這個文件,它不會被復制到引用它的可執行文件中;
- 在內存中,一個共享庫的 .text 節(已編譯程序的機器代碼)的一個副本可以被不同的正在運行的進程共享。
參考資料
https://github.com/CyC2018/CS-Notes/blob/master/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%20-%20%E7%9B%AE%E5%BD%95.md?github.com總結
以上是生活随笔為你收集整理的利用insert、update和delete命令可以同时对多个表进行操作_学习笔记-操作系统(1)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ftp 追加远程文件_远程办公彻底火了,
- 下一篇: python自由落体_VPython -