什么是系統(tǒng)調(diào)用呢?
用戶態(tài)(user mode) : 用戶態(tài)運(yùn)行的進(jìn)程可以直接讀取用戶程序的數(shù)據(jù)。
系統(tǒng)態(tài)(kernel mode):可以簡(jiǎn)單的理解系統(tǒng)態(tài)運(yùn)行的進(jìn)程或程序幾乎可以訪問(wèn)計(jì)算機(jī)的任何資源,不受限制。
系統(tǒng)調(diào)用就是用戶態(tài)切換到內(nèi)核態(tài)。
線程和進(jìn)程以及它們的區(qū)別
1、線程是CPU調(diào)度和分配的基本單位,進(jìn)程是系統(tǒng)資源調(diào)度和分配的基本單位。
2、一個(gè)進(jìn)程里有多個(gè)線程,多個(gè)線程可以并發(fā)執(zhí)行,如果一個(gè)線程中斷了,那么這個(gè)進(jìn)程就結(jié)束了。多個(gè)進(jìn)程可以并行執(zhí)行,互不影響。
3、每個(gè)進(jìn)程都有獨(dú)立的代碼和資源,而每個(gè)線程都有自己的程序計(jì)數(shù)器,線程共享資源,線程間切換的開(kāi)銷(xiāo)小。
進(jìn)程有哪幾種狀態(tài)? 5種
創(chuàng)建、就緒、運(yùn)行、阻塞、結(jié)束
進(jìn)程間的通信方式
管道、信號(hào)量、消息隊(duì)列、共享內(nèi)存、套接字
線程間的同步的方式有哪些?
互斥量、信號(hào)量、事件
進(jìn)程的調(diào)度算法
1、先到先服務(wù)(FCFS)調(diào)度算法
2、短作業(yè)優(yōu)先(SJF)的調(diào)度算法
3、時(shí)間片輪轉(zhuǎn)調(diào)度算法
4、多級(jí)反饋隊(duì)列調(diào)度算法
5、優(yōu)先級(jí)調(diào)度
什么是死鎖
多個(gè)進(jìn)程/線程同時(shí)被阻塞,它們中的一個(gè)或者全部都在等待某個(gè)資源被釋放。由于進(jìn)程/線程被無(wú)限期地阻塞,因此程序不可能正常終止。
死鎖的四個(gè)條件
互斥、請(qǐng)求和保持、循環(huán)等待、不可搶占
解決死鎖的方法
預(yù)防,避免,檢測(cè)和解除四種。
死鎖的預(yù)防
1、靜態(tài)分配策略
2、層次分配策略
死鎖的避免
銀行家算法
操作系統(tǒng)常見(jiàn)的幾種內(nèi)存管理機(jī)制
塊式管理:將內(nèi)存分為幾個(gè)固定大小的塊,每個(gè)塊中只包含一個(gè)進(jìn)程。
頁(yè)式管理 :把主存分為大小相等且固定的一頁(yè)一頁(yè)的形式,頁(yè)較小,相比于塊式管理的劃分粒度更小,提高了內(nèi)存利用率,減少了碎片。
段式管理 :段式管理把主存分為一段段的,段是有實(shí)際意義的,每個(gè)段定義了一組邏輯信息
簡(jiǎn)單來(lái)說(shuō):頁(yè)是物理單位,段是邏輯單位。分頁(yè)可以有效提高內(nèi)存利用率,分段可以更好滿足用戶需求。
段頁(yè)式管理機(jī)制 : 簡(jiǎn)單來(lái)說(shuō)段頁(yè)式管理機(jī)制就是把主存先分成若干段,每個(gè)段又分成若干頁(yè),也就是說(shuō) 段頁(yè)式管理機(jī)制 中段與段之間以及段的內(nèi)部的都是離散的。
快表
為了提高虛擬地址到物理地址的轉(zhuǎn)換速度,操作系統(tǒng)在 頁(yè)表方案 基礎(chǔ)之上引入了 快表 來(lái)加速虛擬地址到物理地址的轉(zhuǎn)換。我們可以把快表理解為一種特殊的高速緩沖存儲(chǔ)器(Cache),其中的內(nèi)容是頁(yè)表的一部分或者全部?jī)?nèi)容。
多級(jí)頁(yè)表
引入多級(jí)頁(yè)表的主要目的是為了避免把全部頁(yè)表一直放在內(nèi)存中占用過(guò)多空間,特別是那些根本就不需要的頁(yè)表就不需要保留在內(nèi)存中。
分頁(yè)機(jī)制和分段機(jī)制的共同點(diǎn)和區(qū)別
1、共同點(diǎn) :
分頁(yè)機(jī)制和分段機(jī)制都是為了提高內(nèi)存利用率,減少內(nèi)存碎片。
頁(yè)和段都是離散存儲(chǔ)的,所以兩者都是離散分配內(nèi)存的方式。但是,每個(gè)頁(yè)和段中的內(nèi)存是連續(xù)的。
2、區(qū)別 :
頁(yè)的大小是固定的,由操作系統(tǒng)決定;而段的大小不固定,取決于我們當(dāng)前運(yùn)行的程序。
分頁(yè)僅僅是為了滿足操作系統(tǒng)內(nèi)存管理的需求,而段是邏輯信息的單位,在程序中可以體現(xiàn)為代碼段,數(shù)據(jù)段,能夠更好滿足用戶的需要。
什么是虛擬內(nèi)存?
虛擬內(nèi)存是它定義了一個(gè)連續(xù)的虛擬地址空間,并且把內(nèi)存擴(kuò)展到硬盤(pán)空間
什么是局部性原理
某個(gè)較短的時(shí)間段內(nèi),程序執(zhí)行局限于某一小部分,程序訪問(wèn)的存儲(chǔ)空間也局限于某個(gè)區(qū)域。利用局部性原理實(shí)現(xiàn)髙速緩存
頁(yè)面置換算法
最佳頁(yè)面置換算法
FIFO(First In First Out) 頁(yè)面置換算法(先進(jìn)先出頁(yè)面置換算法)
LRU (Least Recently Used)頁(yè)面置換算法(最近最久未使用頁(yè)面置換算法)
LFU (Least Frequently Used)頁(yè)面置換算法(最少使用頁(yè)面置換算法)
孤兒進(jìn)程和僵尸進(jìn)程
僵尸進(jìn)程:一個(gè)進(jìn)程使用 fork 創(chuàng)建子進(jìn)程,如果子進(jìn)程退出,而父進(jìn)程并沒(méi)有調(diào)用 wait 或 waitpid 獲取子進(jìn)程的狀態(tài)信息,這種進(jìn)程稱之為僵死進(jìn)程
孤兒進(jìn)程:一個(gè)父進(jìn)程退出,而它的一個(gè)或多個(gè)子進(jìn)程還在運(yùn)行,那么這些子進(jìn)程將成為孤兒進(jìn)程。
危害:孤兒進(jìn)程并不會(huì)有什么危害,而大量的產(chǎn)生僵死進(jìn)程,將因?yàn)闆](méi)有可用的進(jìn)程號(hào)而導(dǎo)致系統(tǒng)不能產(chǎn)生新的進(jìn)程。
線程數(shù)量根據(jù)什么考慮:
CPU密集型任務(wù):一般配置線程數(shù)=CPU總核心數(shù)+1
IO密集型任務(wù):一般配置線程數(shù)=CPU總核心數(shù) * 2 +1 (一般情況)
CPU密集型:所謂CPU密集型就是說(shuō)處理任務(wù)不需要依賴外部I/O,比如科學(xué)計(jì)算、矩陣運(yùn)算等等。
I/O密集型:這一類任務(wù)可能計(jì)算部分所占用時(shí)間不多,大部分時(shí)間都用在了比如磁盤(pán)I/O、網(wǎng)絡(luò)I/O等,記為WT(wait time),以及CPU計(jì)算所需要的時(shí)間,這里極為CT(computing time),那么對(duì)于一個(gè)N核的系統(tǒng),合適的線程數(shù)大概是N * (1 + WT/CT)