操作系统与数据库知识点
操作系統
操作系統的主要目的:
管理系統資源,提高資源利用率,方便用戶使用
進程的三種基本狀態:
- 就緒狀態:進程已獲得除CPU外的所有必要資源,只等待CPU時的狀態。
- 執行狀態:進程已獲CPU,正在執行。單處理機系統中,處于執行狀態的進程只一個;多處理機系統中,有多個處于執行狀態的進程。
- 阻塞狀態:正在執行的進程由于某種原因而暫時無法繼續執行,即進程執行受阻。
狀態轉換:
- 就緒->運行:經過處理機調度,就緒進程得到處理機資源
- 運行->就緒:時間片用完或在可剝奪系統中有更高優先級進程進入
- 運行->阻塞:進行需要的某一資源還沒準備好
- 阻塞->就緒:進程需要的資源已準備好
掛起
掛起進程在操作系統中可以定義為暫時被淘汰出內存的進程。機器的資源是有限的,在資源不足的情況下,有的進程被暫時調離出內存,當條件允許的時候,會被操作系統再次調回內存,解除掛起為就緒態。
同步機制的原則:
- 空閑讓進;
- 忙則等待(保證對臨界區的互斥訪問);
- 有限等待(有限代表有限的時間,避免死等);
- 讓權等待,(當進程不能進入自己的臨界區時,應該釋放處理機,以免陷入忙等狀態)。
進程間通信(IPC,InterProcess Communication)方式
管道? ? ? 又稱無名管道
- 半雙工的(即數據只能在一個方向上流動),具有固定的讀端和寫端。
- 只能用于父子進程之間的通信。
- 可以看成是一種特殊的文件,對于它的讀寫也可以使用普通的read、write 等函數。但是它不是普通的文件,并不屬于其他任何文件系統,并且只存在于內存中。
FIFO? ? ? 又稱命名管道,一種文件類型
- 也是半雙工通信。
- FIFO可以在無關的進程之間交換數據,與無名管道不同。
- FIFO有路徑名與之相關聯,它以一種特殊設備文件形式存在于文件系統中。
消息隊列? ? ? 鏈接表,存放在內核中,由一個標識符來標識?? ?
- 消息隊列是面向記錄的,其中的消息具有特定的格式以及特定的優先級。
- 消息隊列獨立于發送與接收進程。進程終止時,消息隊列及其內容并不會被刪除。
- 消息隊列可以實現消息的隨機查詢,消息不一定要以先進先出的次序讀取,也可以按消息的類型讀取。
信號量? ? ? 計數器
- 信號量用于實現進程間的互斥與同步,而不是用于存儲進程間通信數據。
- 信號量基于操作系統的 PV 操作,程序對信號量的操作都是原子操作。
共享內存
- 共享內存是最快的一種 IPC,因為進程是直接對內存進行存取。
- 因為多個進程可以同時操作,所以需要進行同步。
- 信號量+共享內存通常結合在一起使用,信號量用來同步對共享內存的訪問。
上下文切換
內核在 CPU 上對于進程(包括線程)進行以下的活動:
進程與線程
進程(Process)?計算機中的程序關于某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位。
- 資源分配給進程,同一進程的所有線程共享該進程的所有資源。
- 同一進程中的多個線程共享常量池,堆,方法區。
組成:
- PCB進程控制塊:保存進程運行期間相關的數據,是進程存在的唯一標志
- 程序段:能被進程調度程序調度到CPU運行的程序代碼段
- 數據段:存儲程序運行期間的相關數據,可以是原始數據也可以是相關結果
線程(thread)?操作系統能夠進行運算調度的最小單位,一個進程中可以并發多個線程。
- 每個線程擁有自己的棧。
區別:
- 進程有自己的獨立地址空間
- 進程是資源分配的最小單位,線程是CPU調度的最小單位
- 一個進程掛掉不會影響其他進程,而線程掛掉會影響其他線程
調度算法:
先來先服務算法FCFS
短作業優先算法SJF
優先級調度算法
- 非搶占式? ??分配給就緒隊列中優先權最高的進程后,該進程便一直執行下去,直至完成
- 搶占式? ? ? ? 在其執行期間,一出現優先權更高的進程就會停止當前進程的執行,將處理機分配給新到的優先權最高的進程
高響應比優先算法
- 響應比=(等待時間+需要執行的時間)/需要執行的時間
時間片輪轉調度算法
- 遵循了先來先服務的原則,就緒的進程隊列中每個進程輪流運行一次規定的時間片(比如100ms),沒有執行完畢,進程丟到隊列的末尾,繼續就緒等待。
多級反饋隊列算法
- 多個反饋隊列,隊列有優先級排序,優先級越高的隊列時間片越少。
- 進程調用,先進入頭隊列,多個進程則按FCFS,經過時間片后沒有完成則進入下一個隊列,以此類推。
死鎖
在兩個或多個并發進程中,如果每個進程持有某種資源而又都等待別的進程釋放它或它們現在保持著的資源,在未改變這種狀態之前都不能向前推進,稱這一組進程產生了死鎖。
產生死鎖的必要條件:
- 互斥條件:資源不能被共享,只能由一個進程使用。
- 請求與保持條件:已經得到資源的進程可以再次申請新的資源。
- 非搶占條件:已經分配的資源不能從相應的進程中被強制地剝奪。
- 循環等待條件:系統中若干進程組成環路,該環路中每個進程都在等待相鄰進程正占用的資源。
處理死鎖問題:
- 忽略該問題,鴕鳥算法。
- 仔細地對資源進行動態分配,使系統始終處于安全狀態以避免死鎖。
- 通過破除死鎖四個必要條件之一,來防止死鎖產生。
虛擬內存
一種內存管理技術,將應用程序所占的部分內存暫時轉為外存,在需要時進行數據交換。
- 優點:可以彌補內存大小的不足;一定程度的提高反映速度;延長內存使用壽命。
- 缺點:占用一定的物理硬盤空間;加大了對硬盤的讀寫;設置不得當會影響整機穩定性與速度。
調度方式:
- 分頁式:將邏輯和物理地址空間都分成固定大小的頁。沒有外碎片。
每頁大小為4KB,主存大小為4GB。則地址長度為32 位,其中0~11位為頁內地址,即:12~31位為頁號,地址空間最多允許有2^20頁。
- 段式:按程序的邏輯結構劃分地址空間,段長度可以動態改變。沒有內碎片。
段號為16位,段內偏移量為16位,則一個作業最多可有2^16=65536個段,最大段長為64KB。
- 段頁式:每個分段又被分成若干個固定大小的頁。
頁面置換算法
- OPT最優算法:需要知道以后要被用到的頁,然后將不會被用到的頁換出內存;如果所有頁都會被用到,就把需要使用時間離現在最長的頁換出。不可能實現的,因為當前無法獲知以后哪些頁要被用到。不過最優算法還是能夠作為其他算法優秀程度的衡量。
- FIFO算法:置換出當前已經待在內存里時間最長的那個頁。沒有考慮頁面的重要性的問題。
- LRU最近最少使用算法:將最近使用最少的頁面換出內存。
中斷
計算機執行程序的過程中,由于出現了某些特殊事情,使得CPU暫停對程序的執行,轉而去執行處理這一事件的程序。
每個中斷都有一個對應的優先級,當處理器在處理某一中斷的時候,只有比這個中斷優先級高的中斷可以被處理器接受并且被處理。
中斷一般分為三類:
- 內部異常中斷:由計算機硬件異常或故障引起的中斷。
- 軟中斷:由程序中執行了引起中斷的指令而造成的中斷。
- 外部中斷:由外部設備請求引起的中斷。
系統調用
操作系統的核心是內核(kernel),它獨立于普通的應用程序,可以訪問受保護的內存空間,也有訪問底層硬件設備的所有權限。為了保證內核的安全,現在的操作系統一般都強制用戶進程不能直接操作內核。具體的實現方式基本都是由操作系統將虛擬地址空間劃分為兩部分,一部分為內核空間,另一部分為用戶空間。
- 內核態:cpu可以訪問內存的所有數據,包括外圍設備。
- 用戶態:只能受限的訪問內存,且不允許訪問外圍設備。
用戶態切換到內核態的方式:
- 系統調用:程序需要使用操作系統提供的服務時,比如說打開某一設備、創建文件、讀寫文件(這些均屬于系統調用)等,就需要向操作系統發出調用服務的請求,這就是系統調用。
- 異常:發生異常,由當前進程切換到處理此異常的內核相關程序中,也就轉到了內核態,比如缺頁異常。
- 外圍設備的中斷:當外圍設備完成用戶請求的操作后,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序。
信號量(Semaphore)和互斥鎖(Mutex)
- 互斥鎖:只允許一個線程/進程訪問資源,保證了使用資源線程的唯一性和排他性,但是無法限制資源釋放后其他線程申請的順序問題,所以是無序的。
- 信號量:在初始化變量的時候可以控制允許多少個線程/進程同時訪問一個臨界區,其他的線程/進程會被堵塞,直到有人解鎖。
信號量:利用PV操作實現互斥
- P操作即wait(S)?申請資源
- V操作即signal(S) 釋放資源
- S 表示可用資源的數量
數據庫
事務:事務是并發控制的基本單元,事務是一個操作序列,要么都執行,要么都不執行,他是一個不可分割的工作單位,事務是維護數據庫一致性的單位。
事務特性ACID:
- A,?atomacity原子性:? ? ?要么都執行,要么都不執行。
- C,?consistency一致性: 數據改變前后狀態一致,如買家花100,賣家賺100。
- I,?isolation隔離性:? ? ? ? ?允許多個用戶并發訪問。
- D,?durability?持久性:? ? ?事務結束后,事務處理的結果必須得到固化。即一旦提交,對數據庫改變是永久的。
隔離級別:一個事務必須與由其他事務進行的資源或數據更改相隔離的程度。隔離級別從允許的并發副作用(例如,臟讀或虛擬讀取)的角度進行描述。
四種隔離級別:
- 未提交讀:所有事務都可以“看到”未提交事務的執行結果,讀取未提交數據,也被稱為“臟讀”。
- 已提交讀:只讀取提交的數據并等待其他事務釋放鎖。
- 可重復讀:保證同一事務的多個實例在并發讀取事務時,會“看到同樣的”數據行。
- 可序列化:制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡而言之,在每個讀的數據行上加鎖。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 臟讀? 不可重復讀 幻讀
Read uncommitted? ? ?√? ? ? ? ? ? √? ? ? ? ? ?? √
Read committed ? ? ? ? ×?? ? ? ? ? ?√ ? ? ? ? ? ??√
Repeatable read ? ? ? ? ×? ? ? ? ? ? ×? ? ? ? ? ? ?√
Serializable? ? ? ? ? ? ? ? ?× ? ? ? ? ? ?×? ? ? ? ? ? ?×
MYSQL的兩種存儲引擎
- MyISAM管理非事務表。它提供高速存儲和檢索,以及全文搜索能力。如果應用中需要執行大量的SELECT查詢,那么MyISAM是更好的選擇。
- InnoDB用于事務處理應用程序,具有眾多特性,包括ACID事務支持。如果應用中需要執行大量的INSERT或UPDATE操作,則應該使用InnoDB,這樣可以提高多用戶并發操作的性能。
索引
拿漢語字典的目錄頁(索引)打比方,我們可以按拼音、筆畫、偏旁部首等排序的目錄(索引)快速查找到需要的字。用于提高數據庫表數據訪問速度。
常見索引類
- 普通索引:最基本的索引,沒有任何限制
- 唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
- 主鍵索引:它 是一種特殊的唯一索引,不允許有空值。?
- 全文索引:僅可用于 MyISAM 表,針對較大的數據,生成全文索引很耗時耗空間。
- 組合索引:為了更多的提高mysql效率可建立組合索引,遵循”最左前綴“原則。
最左前綴原則:顧名思義,最左優先,比如,我們建立了一個以(a,b,c)為組合的索引,那么將會得到:a, ab,abc三種索引。若我們按列“b”進行查找,都不會使用到a, ab,abc三種索引。
Join
- INNER JOIN(內連接,或等值連接):兩個表屬性的交集
- LEFT JOIN(左連接):取得左表完全記錄,即是右表并無對應匹配記錄。?
- RIGHT JOIN(右連接):與 LEFT JOIN 相反,取得右表完全記錄,即是左表并無匹配對應記錄。
?
聚集索引、哈希索引、b+樹索引
- B+樹的簡單定義:B+樹是為磁盤或其他存儲設備設計的一種平衡查找樹。B+樹中所有記錄都是按鍵值大小順序存放在葉子節點上,各葉子節點通過指針進行連接。
- 哈希索引(Hash indexes)采用哈希表來對鍵值進行查找,時間復雜度為O(1)。使用哈希索引時對于鍵值的等值查詢是非??斓?#xff0c;但是其他類型的查詢如范圍查詢、模糊查詢、排序等是不能使用哈希索引的。這是哈希索引使用比較少的主要原因。
- 聚集索引(Clustered Index)又稱聚簇索引,其葉子節點存放記錄。每個InnoDB 表有一個特定的索引叫做聚集索引,存儲行的數據。如果你的表定義了主鍵那么主鍵就是聚集索引,如果沒有定義主鍵,MySQL 會選擇第一個非空唯一索引列作為聚集索引,如果表中也沒有唯一索引,InnoDB會生成一個類似RowId的隱藏的聚集索引。
語法
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
Distinct
用途:被用作返回唯一的值。SELECT DISTINCT column-name(s) FROM table-name
Alias
用途:可用在表、結果集或者列上,為它們取一個邏輯名稱。 SELECT column AS column_alias FROM table
聚集函數:
count
用途:傳回選取的結果集中行的數目。
sum
用途:以表達式傳回所有值的總和,或僅 DISTINCT 值。SUM 僅可用于數值行。已忽略 Null 值。
avg
用途:傳回選取的結果集中值的平均值。已忽略 Null 值。
max
用途:傳回選取的結果集中值的最大值。已忽略 Null 值。
min
用途:傳回選取的結果集中值的最小值。已忽略 Null 值。
?
?
總結
以上是生活随笔為你收集整理的操作系统与数据库知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android—MVC、MVP、MVVM
- 下一篇: 编译器vs.代码 谁之过