關(guān)于操作系統(tǒng)的基本常識(shí)
關(guān)于操作系統(tǒng)的基本常識(shí)
關(guān)于操作系統(tǒng),我們需要掌握一些基本的常識(shí)問(wèn)題。下面由學(xué)習(xí)啦小編為大家整理了關(guān)于操作系統(tǒng)的基本常識(shí)的相關(guān)知識(shí),希望對(duì)大家有幫助!
關(guān)于操作系統(tǒng)的基本常識(shí)
操作系統(tǒng)基本常識(shí)1:進(jìn)程與線程
進(jìn)程是一個(gè)具有獨(dú)立功能的程序的一次運(yùn)行活動(dòng),是系統(tǒng)進(jìn)行資源分配的一個(gè)基本單元。
線程是進(jìn)程的一個(gè)實(shí)體,是cpu調(diào)度的基本單元,自己并不擁有系統(tǒng)資源,他的資源和該進(jìn)程內(nèi)的其他線程共享。、
引入線程的優(yōu)點(diǎn):
調(diào)度開(kāi)銷小,易于調(diào)度;
方便的實(shí)現(xiàn)并發(fā);
充分利用多處理器的性能;
線程和進(jìn)程的不同:
線程必定屬于某個(gè)進(jìn)程;但是一個(gè)進(jìn)程可以擁有多個(gè)線程并且至少擁有一個(gè)線程。
不同進(jìn)程互相獨(dú)立,資源分開(kāi),但是線程共用資源,沒(méi)有獨(dú)立的內(nèi)存空間。
進(jìn)程是程序的一次執(zhí)行,線程可以理解為該程序中一個(gè)片段的執(zhí)行。
程序和進(jìn)程和線程的關(guān)系:
獨(dú)立功能的一次程序執(zhí)行可以開(kāi)啟一個(gè)進(jìn)程,同程序可以多次開(kāi)啟形成多個(gè)進(jìn)程,每個(gè)進(jìn)程中又可以開(kāi)啟線程,當(dāng)然每個(gè)程序都至少會(huì)有一個(gè)線程,比如main
線程同步的方法:
互斥量,信號(hào)量,條件變量,臨界區(qū)。
操作系統(tǒng)基本常識(shí)2:內(nèi)核線程和用戶線程
內(nèi)核線程的建立和銷毀都是操作系統(tǒng)負(fù)責(zé),通過(guò)系統(tǒng)調(diào)用完成。
用戶線程不需要操作系統(tǒng)負(fù)責(zé),利用線程函數(shù)庫(kù)調(diào)用完成創(chuàng)建銷毀同步管理,并且允許自己定制自己的調(diào)度算法,調(diào)度的代價(jià)比內(nèi)核線程的代價(jià)低很多。
操作系統(tǒng)基本常識(shí)3:內(nèi)存管理
方式:按照控件利用率排序的話為:塊式管理<頁(yè)式管理<段式管理<段頁(yè)式管理(其中段頁(yè)式管理每次操作要訪問(wèn)三次內(nèi)存)
分頁(yè)和分段的區(qū)別:
頁(yè)是信息的物理單位,分頁(yè)是出于系統(tǒng)管理的需要
段式信息的邏輯段位,分段是為了滿足用戶的需要,每次分頁(yè)的大小也取決于用戶
虛擬內(nèi)存:虛擬內(nèi)存是內(nèi)存管理的一種技術(shù),相對(duì)于物理內(nèi)存而言,可以理解為假內(nèi)存,使得應(yīng)用程序把內(nèi)存當(dāng)做連續(xù)可用,允許程序員編寫(xiě)比實(shí)際系統(tǒng)擁有的內(nèi)存大得多的程序,實(shí)際上他的有一部分內(nèi)存暫時(shí)存儲(chǔ)于外部存儲(chǔ)上面,在需要時(shí)在進(jìn)行數(shù)據(jù)交換
虛擬內(nèi)存的好處:
擴(kuò)大地址空間
內(nèi)存保護(hù)。每個(gè)進(jìn)程獨(dú)自運(yùn)行在自己的虛擬內(nèi)存空間,互相不干擾,而且虛擬內(nèi)存還對(duì)特定的內(nèi)存地址進(jìn)行寫(xiě)保護(hù)。
當(dāng)進(jìn)程需要通信時(shí),可以采用虛存共享的方式實(shí)現(xiàn)。
虛擬內(nèi)存的壞處:
建立很多的數(shù)據(jù)結(jié)構(gòu),占用額外的內(nèi)存。
虛擬地址到物理地址的轉(zhuǎn)換,增加了執(zhí)行時(shí)間。
頁(yè)面的換入換出需要磁盤(pán)io。
內(nèi)存碎片:多次進(jìn)行內(nèi)存分配時(shí)就會(huì)出現(xiàn)內(nèi)存碎片。
內(nèi)存格式:(用戶使用段)(空白段)(用戶使用段)
內(nèi)碎片:分配給用戶的存儲(chǔ)空間(用戶使用段)沒(méi)有使用完,其他程序也無(wú)法使用的部分內(nèi)存,直到進(jìn)程釋放。
外碎片:比如上面的空白段,他不屬于任何進(jìn)程,但是又由于他太小不足以給與下一個(gè)進(jìn)程分配空間,造成了外碎片。
操作系統(tǒng)基本常識(shí)4:cache替換算法
數(shù)據(jù)可以存放在cpu和內(nèi)存中,但是cpu處理速度快,容量小,內(nèi)存容量大,但是轉(zhuǎn)給cpu的速度慢。所以就需要cache來(lái)做一個(gè)折中,先從內(nèi)存調(diào)入cache再?gòu)腸ache調(diào)入cpu,又由于主存的快比cache多所以從主存調(diào)塊到chche中的時(shí)候,會(huì)出現(xiàn)該塊映射的映射的cache已經(jīng)被使用的情況,需要cache被迫騰出其中的某一塊來(lái)接受新塊,就需要替換。
隨機(jī)算法(RAND)
先進(jìn)先出算法(FIFO)
近期最少使用算法(LRU)
最優(yōu)替換算法(OPT)
操作系統(tǒng)基本常識(shí)5:靜態(tài)鏈接和動(dòng)態(tài)鏈接
靜態(tài)鏈接就是把要調(diào)用的函數(shù)或者是過(guò)程直接拷貝到可執(zhí)行文件中,當(dāng)多個(gè)程序都需要調(diào)用該函數(shù)的時(shí)候,比較浪費(fèi)內(nèi)存資源。
動(dòng)態(tài)鏈接就是并沒(méi)有在被調(diào)用時(shí)復(fù)制到可執(zhí)行文件中,而是加入了一些重定位信息,當(dāng)需要調(diào)用的時(shí)候到這里來(lái)執(zhí)行就ok了。
靜態(tài)鏈接庫(kù):.lib文件,里面不允許再包含其他的動(dòng)態(tài)或者靜態(tài)庫(kù)
動(dòng)態(tài)鏈接庫(kù):.dll文件
操作系統(tǒng)基本常識(shí)6:庫(kù)函數(shù)調(diào)用與系統(tǒng)調(diào)用
庫(kù)函數(shù)調(diào)用屬于上層,運(yùn)行在用戶空間,屬于程序和用戶的一部分,不同的系統(tǒng)但是使用相同的庫(kù)那么效果就是一樣的。
系統(tǒng)調(diào)用是調(diào)用內(nèi)核提供給應(yīng)用程序的接口,屬于系統(tǒng)的一部分,而且不同的系統(tǒng)的系統(tǒng)調(diào)用是不一樣的。
操作系統(tǒng)基本常識(shí)7:用戶棧和內(nèi)核棧
內(nèi)核在創(chuàng)建線程的時(shí)候,會(huì)為進(jìn)程創(chuàng)建相應(yīng)的堆棧,每個(gè)進(jìn)程會(huì)有兩個(gè)棧,一個(gè)用戶棧,一個(gè)內(nèi)核棧,當(dāng)進(jìn)程在用戶空間時(shí)使用用戶棧,在內(nèi)核空間時(shí)使用內(nèi)核棧。并且通過(guò)設(shè)置堆棧指針寄存器的內(nèi)容可以在用戶棧和內(nèi)核棧之間相互轉(zhuǎn)換。