操作系統(tǒng)相關(guān)

1澎灸、什么是可重入函數(shù)

可重入函數(shù)是指能夠被多個(gè)線程“同時(shí)”調(diào)用的函數(shù)(線程安全)夫啊,并且能夠保證結(jié)果的正確性的函數(shù)。

在C語言中編寫可重入函數(shù)時(shí)运沦,盡量不使用全局變量和靜態(tài)變量泵额。如果使用了,則在線程中對(duì)這類變量訪問時(shí)携添,要注意對(duì)其訪問的互斥嫁盲。一般,可以采用以下幾種措施來保證函數(shù)的可重用:信號(hào)量機(jī)制烈掠、關(guān)調(diào)度機(jī)制羞秤、關(guān)中斷機(jī)制。

需要注意的是左敌,不要調(diào)用不可重入的函數(shù)瘾蛋。一旦調(diào)用,則會(huì)使得該函數(shù)也變得不可重入矫限。一般驅(qū)動(dòng)程序都是不可重入函數(shù)哺哼,因此在編寫驅(qū)動(dòng)程序時(shí)一定要注意重入問題。

2叼风、線程相關(guān)

線程有時(shí)候被稱為輕量級(jí)進(jìn)程(LWP)取董,是程序執(zhí)行流中最小的單位。線程是進(jìn)程中的實(shí)體无宿,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單位茵汰,不擁有自己的資源,只擁有一些必不可小的資源孽鸡,可與進(jìn)程中其他線程共享所擁有的資源蹂午。

一個(gè)線程獨(dú)立 的部分包括線程ID,當(dāng)前指針(PC)彬碱,寄存器集合豆胸,堆棧,錯(cuò)誤返回碼巷疼,信號(hào)屏蔽碼晚胡,線程優(yōu)先級(jí)。

引入線程后的進(jìn)程只作為除CPU外皮迟,系統(tǒng)資源的分配單元線程則作為處理器的分配單元搬泥。同一進(jìn)程切換線程不會(huì)引起進(jìn)程切換桑寨,但一個(gè)進(jìn)程的切換到另一個(gè)進(jìn)程的線程則會(huì)引起進(jìn)程的切換伏尼。

3、臨界區(qū)與互斥量的區(qū)別

1)臨界區(qū)只能用來同步進(jìn)程內(nèi)的線程尉尾,而不可用來同步多個(gè)進(jìn)程中的線程:互斥量爆阶,事件都可以被跨進(jìn)程使用來同步數(shù)據(jù)操作。

2)臨界區(qū)是非內(nèi)核對(duì)象,只能用在用戶態(tài)進(jìn)行鎖操作辨图,速度快班套;互斥體是內(nèi)核對(duì)象,在和心態(tài)進(jìn)行鎖操作故河,速度慢吱韭。

3)互斥體在Windows和Linux下都有,臨界區(qū)只在Windows平臺(tái)下可用鱼的。

4理盆、地址重定位

當(dāng)裝入程序?qū)⒖蓤?zhí)行代碼裝入內(nèi)存時(shí),必須通過地址轉(zhuǎn)換將邏輯地址轉(zhuǎn)化為物理地址凑阶,這個(gè)過程稱為地址重定位猿规。

5、分段宙橱,分頁姨俩,段頁

基本分段存儲(chǔ)管理:段內(nèi)要求連續(xù),段間不要求連續(xù)师郑。段式系統(tǒng)中环葵,段號(hào)和段內(nèi)偏移必須由用戶顯示提供,在高級(jí)設(shè)計(jì)語言中呕乎,這個(gè)工作由編譯程序完成积担,整個(gè)作業(yè)的地址空間是二維的。

基本分頁系統(tǒng)中猬仁,邏輯地址的頁號(hào)和頁內(nèi)偏移對(duì)用戶是透明的帝璧。

段頁式系統(tǒng)中,邏輯地址分為三個(gè)部分:段號(hào)湿刽,頁號(hào)的烁,頁內(nèi)偏移量。為實(shí)現(xiàn)地址變換诈闺,系統(tǒng)為每一個(gè)進(jìn)程建立一張段表渴庆,而每個(gè)分段有一張頁表。

6雅镊、如何減少頻繁分配內(nèi)存造成的內(nèi)存碎片

內(nèi)存池(Memory Pool)是一種內(nèi)存分配方式襟雷。通常,我們使用new malloc 分配內(nèi)存仁烹,但頻繁使用會(huì)造成大量的內(nèi)存碎片耸弄,并降低性能。內(nèi)存池是在真正使用內(nèi)存之前卓缰,先申請(qǐng)一定數(shù)量的计呈,大小相等的(一般情況下)的內(nèi)存留作備用砰诵,當(dāng)新需求到來時(shí),就從內(nèi)存池中分配一部分內(nèi)存塊捌显,若不夠再繼續(xù)申請(qǐng)新的內(nèi)存茁彭,避免了內(nèi)存碎片,提高了效率扶歪。

7理肺、內(nèi)存泄漏與緩沖區(qū)溢出

內(nèi)存泄漏是指沒有用相應(yīng)方式釋放已經(jīng)不再使用的內(nèi)存,導(dǎo)致該快內(nèi)存無法被再次使用善镰。

緩沖區(qū)溢出是指緩沖區(qū)數(shù)據(jù)位超過了緩沖區(qū)本身的容量哲嘲。由于絕大多數(shù)程序都會(huì)假設(shè)數(shù)據(jù)長(zhǎng)度總與分配空間相匹配,這就為緩沖區(qū)溢出埋下隱患媳禁。例如strcpy,sprintf等眠副。緩沖區(qū)溢出是導(dǎo)致黑客型病毒橫行的重要原因。

8竣稽、什么是線程安全

如果多線程程序運(yùn)行結(jié)果是可預(yù)期的囱怕,而且與單線程運(yùn)行結(jié)果一樣,那么說明“線程安全”毫别。

9娃弓、多線程同步和互斥有幾種方法實(shí)現(xiàn)

臨界區(qū)(critical section)、事件(event)岛宦、互斥量(mutex)台丛、信號(hào)量(semaphores)、條件變量砾肺。臨界區(qū)是效率最高的挽霉,因?yàn)椴恍枰渌_銷。

10变汪、死鎖的必要條件與處理

互斥條件侠坎,請(qǐng)求和保持,不可剝奪裙盾,循環(huán)等待

死鎖處理方案:
1)預(yù)防死鎖:通過設(shè)置某些條件去破壞產(chǎn)生死鎖的一個(gè)或幾個(gè)條件來防止死鎖实胸。但,由于限制條件往往太嚴(yán)格番官,導(dǎo)致資源利用率和系統(tǒng)吞吐率低庐完。

2)避免死鎖:不事先采取限制措施,而是在資源動(dòng)態(tài)分配過程中徘熔,用某種方法防止系統(tǒng)進(jìn)入不安全狀態(tài)门躯,從而避免死鎖。銀行家算法是常見避免死鎖算法近顷。

3)檢測(cè)死鎖生音,設(shè)置檢測(cè)機(jī)構(gòu)及時(shí)檢測(cè)死鎖,不事先采取任何措施

4)與檢測(cè)死鎖配套使用窒升,將進(jìn)程從死鎖狀態(tài)中解脫出來缀遍,常用的方法是撤銷或掛起一些進(jìn)程。

11饱须、上下文切換

為了控制進(jìn)程的執(zhí)行域醇,內(nèi)核必須有能力掛起正在CPU上運(yùn)行的進(jìn)程,并恢復(fù)以前掛起的某個(gè)進(jìn)程的執(zhí)行蓉媳。這種行為被稱為進(jìn)程切換譬挚。因此可以說,任何進(jìn)程都是在操作系統(tǒng)內(nèi)核的支持下運(yùn)行的酪呻,是與內(nèi)核緊密相關(guān)的减宣。

從一個(gè)進(jìn)程的運(yùn)行轉(zhuǎn)到另一個(gè)進(jìn)程上運(yùn)行,這個(gè)過程中經(jīng)過下面這些變化:

  1. 保存處理機(jī)上下文玩荠,包括程序計(jì)數(shù)器和其他寄存器漆腌。
  2. 更新PCB信息。
  3. 把進(jìn)程的PCB移入相應(yīng)的隊(duì)列阶冈,如就緒闷尿、在某事件阻塞等隊(duì)列。
  4. 選擇另一個(gè)進(jìn)程執(zhí)行女坑,并更新其PCB填具。
  5. 更新內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)。
  6. 恢復(fù)處理機(jī)上下文匆骗。
12劳景、進(jìn)程與線程的區(qū)別

進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合的依次運(yùn)行活動(dòng),它是操作系統(tǒng)資源分配的基本單位碉就。線程又稱為輕量級(jí)線程枢泰,是CPU調(diào)度和分配的基本單位。

二者區(qū)別主要有:
1铝噩、關(guān)系:一個(gè)線程必定屬于一個(gè)進(jìn)程衡蚂,一個(gè)進(jìn)程可以擁有多個(gè)線程。
2骏庸、資源:進(jìn)程擁有自己的資源毛甲,一個(gè)進(jìn)程的所有線程共享該進(jìn)程的所有資源,包括打開的文件具被,創(chuàng)建的socket等玻募。不同進(jìn)程間相互獨(dú)立。線程只擁有運(yùn)行時(shí)必不可少的資源一姿。
3七咧、并發(fā):線程間切換開銷小跃惫,效率高,提高了并發(fā)性艾栋。
4爆存、健壯:線程有自己的堆棧和局部變量,但線程之間沒有單獨(dú)的地址空間蝗砾,一個(gè)線程崩潰將影響該進(jìn)程內(nèi)其他線程先较,多進(jìn)程的程序要比多線程的程序健壯。

13悼粮、內(nèi)核線程和用戶線程的區(qū)別

根據(jù)操作系統(tǒng)內(nèi)核是否可感知闲勺,可把線程分為內(nèi)核線程和用戶線程。

內(nèi)核線程的建立和銷毀都是由操作系統(tǒng)負(fù)責(zé)的扣猫,通過系統(tǒng)調(diào)用完成菜循。在操作系統(tǒng)調(diào)用時(shí),參考各進(jìn)程內(nèi)的線程情況作出調(diào)度決定申尤。如果一個(gè)進(jìn)程沒有就緒態(tài)的線程债朵,那么這個(gè)進(jìn)程也不會(huì)調(diào)度占用CPU。

與內(nèi)核線程相對(duì)的是用戶線程瀑凝,用戶線程指不需要內(nèi)核支持序芦,而在用戶程序中實(shí)現(xiàn)的線程,其不依賴于操作系統(tǒng)的核心粤咪,用戶利用線程庫創(chuàng)建谚中,調(diào)度,同步寥枝,和管理線程宪塔。

引入用戶線程的優(yōu)點(diǎn):
1、可以在不支持線程的操作系統(tǒng)中實(shí)現(xiàn)
2囊拜、創(chuàng)建某筐、銷毀、切換線程不需要經(jīng)過用戶態(tài)冠跷、內(nèi)核態(tài)的切換南誊,因此代價(jià)低,效率高
3蜜托、允許每個(gè)進(jìn)程定制自己的調(diào)度算法抄囚,線程管理比較靈活
4、線程能利用的表空間和堆空間比內(nèi)核級(jí)線程多

用戶線程的缺點(diǎn):
1橄务、同一個(gè)進(jìn)程只能有一個(gè)線程在運(yùn)行幔托,如果有一個(gè)線程使用了系統(tǒng)調(diào)用而阻塞,那么整個(gè)進(jìn)程都會(huì)被掛起。
2重挑、頁面失效也會(huì)導(dǎo)致整個(gè)進(jìn)程被掛起嗓化。

13、庫函數(shù)與系統(tǒng)調(diào)用的區(qū)別

庫函數(shù)調(diào)用是語言或應(yīng)用程序的一部分谬哀,它是高層的刺覆,完全運(yùn)行在用戶空間,是為程序員提供實(shí)際事務(wù)操作的調(diào)用接口玻粪。

系統(tǒng)函數(shù)則是內(nèi)核提供給應(yīng)用程序的接口,屬于系統(tǒng)的一部分诬垂。函數(shù)調(diào)用是語言或應(yīng)用程序的一部分劲室,而系統(tǒng)調(diào)用是操作系統(tǒng)的一部分。

庫函數(shù)調(diào)用通常比行內(nèi)展開的代碼慢结窘,因?yàn)樗枰冻龊瘮?shù)調(diào)用的開銷很洋。但,系統(tǒng)調(diào)用比庫函數(shù)調(diào)用還慢得多隧枫,因?yàn)樾枰M(jìn)行進(jìn)行兩次上下文環(huán)境切換喉磁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市官脓,隨后出現(xiàn)的幾起案子协怒,更是在濱河造成了極大的恐慌,老刑警劉巖卑笨,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孕暇,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡赤兴,警方通過查閱死者的電腦和手機(jī)妖滔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桶良,“玉大人座舍,你說我怎么就攤上這事≡煞” “怎么了曲秉?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疲牵。 經(jīng)常有香客問我岸浑,道長(zhǎng),這世上最難降的妖魔是什么瑰步? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任矢洲,我火速辦了婚禮,結(jié)果婚禮上缩焦,老公的妹妹穿的比我還像新娘读虏。我一直安慰自己责静,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布盖桥。 她就那樣靜靜地躺著灾螃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揩徊。 梳的紋絲不亂的頭發(fā)上腰鬼,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音塑荒,去河邊找鬼熄赡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛齿税,可吹牛的內(nèi)容都是我干的彼硫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凌箕,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼拧篮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起牵舱,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤串绩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后芜壁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赏参,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年沿盅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了把篓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腰涧,死狀恐怖韧掩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窖铡,我是刑警寧澤疗锐,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站费彼,受9級(jí)特大地震影響滑臊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜箍铲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一雇卷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦关划、人聲如沸小染。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽裤翩。三九已至,卻和暖如春调榄,著一層夾襖步出監(jiān)牢的瞬間踊赠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來泰國打工每庆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筐带,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓扣孟,卻偏偏與公主長(zhǎng)得像烫堤,于是被迫代替她去往敵國和親荣赶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子凤价,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • word直接復(fù)制來了,格式就不改了拔创。至于這門課怎么復(fù)習(xí)利诺,只要平時(shí)實(shí)驗(yàn)都認(rèn)真完成、報(bào)告認(rèn)真寫剩燥,平時(shí)分都很高慢逾;考試的話...
    Jozhn閱讀 4,551評(píng)論 0 8
  • 早上還好買了早餐(一個(gè)饅頭)再去工作。 上午和普通話老師約好明天早上7點(diǎn)半說命題說話灭红÷绿玻回到辦公室工作時(shí)老師給了牛奶...
    逆風(fēng)追夢(mèng)人閱讀 236評(píng)論 0 0
  • 一夜 路旁枯黑的樹枝 頓時(shí)嫩芽點(diǎn)點(diǎn) 滿是生機(jī) 有人說 “看!這是春之綠变擒,春的生機(jī)” 滿心歡喜 仿佛自己也煥然一新 ...
    鏡子的碎片閱讀 312評(píng)論 0 1
  • 再次下載這個(gè)軟件君珠,沒想到上次在這里寫文章已經(jīng)隔了一年之久,久的讓我覺得有些生疏娇斑,有些不太認(rèn)識(shí)一年前的自己了策添。 這周...
    獅子座的line不一樣閱讀 141評(píng)論 0 0