1. 進(jìn)程和線程的區(qū)別
進(jìn)程和線程都是一個(gè)時(shí)間段的描述馍佑,是CPU工作時(shí)間段的描述酒甸,不過是顆粒大小不同堆巧。
在CPU看來所有的任務(wù)都是一個(gè)一個(gè)的輪流執(zhí)行的礁叔,具體的輪流方法就是:先加載程序A的上下文牍颈,然后開始執(zhí)行A,保存程序A的上下文琅关,調(diào)入下一個(gè)要執(zhí)行的程序B的程序上下文颂砸,然后開始執(zhí)行B,保存程序B的上下文。。人乓。勤篮。
進(jìn)程就是包換上下文切換的程序執(zhí)行時(shí)間總和 = CPU加載上下文+CPU執(zhí)行+CPU保存上下文(敲黑板??)
程序A得到CPU =》CPU加載上下文,開始執(zhí)行程序A的a小段色罚,然后執(zhí)行A的b小段碰缔,然后再執(zhí)行A的c小段,最后CPU保存A的上下文戳护。
這里的a金抡,b,c就是線程腌且,也就是說線程是共享了進(jìn)程的上下文環(huán)境梗肝,的更為細(xì)小的CPU時(shí)間段。(敲黑板??)
2. 死鎖的必要條件铺董,怎么處理死鎖
死鎖的必要條件:
(1) 互斥條件巫击。即某個(gè)資源在一段時(shí)間內(nèi)只能由一個(gè)進(jìn)程占有,不能同時(shí)被兩個(gè)或兩個(gè)以上的進(jìn)程占有精续。這種獨(dú)占資源如CD-ROM驅(qū)動(dòng)器坝锰,打印機(jī)等等,必須在占有該資源的進(jìn)程主動(dòng)釋放它之后重付,其它進(jìn)程才能占有該資源顷级。這是由資源本身的屬性所決定的。如獨(dú)木橋就是一種獨(dú)占資源确垫,兩方的人不能同時(shí)過橋弓颈。
(2) 不可搶占條件。進(jìn)程所獲得的資源在未使用完畢之前删掀,資源申請(qǐng)者不能強(qiáng)行地從資源占有者手中奪取資源翔冀,而只能由該資源的占有者進(jìn)程自行釋放。如過獨(dú)木橋的人不能強(qiáng)迫對(duì)方后退爬迟,也不能非法地將對(duì)方推下橋橘蜜,必須是橋上的人自己過橋后空出橋面(即主動(dòng)釋放占有資源),對(duì)方的人才能過橋付呕。
(3) 占有且申請(qǐng)條件计福。進(jìn)程至少已經(jīng)占有一個(gè)資源,但又申請(qǐng)新的資源徽职;由于該資源已被另外進(jìn)程占有象颖,此時(shí)該進(jìn)程阻塞;但是姆钉,它在等待新資源之時(shí)说订,仍繼續(xù)占用已占有的資源抄瓦。還以過獨(dú)木橋?yàn)槔滓覂扇嗽跇蛏舷嘤鎏绽洹<鬃哌^一段橋面(即占有了一些資源)钙姊,還需要走其余的橋面(申請(qǐng)新的資源),但那部分橋面被乙占有(乙走過一段橋面)埂伦。甲過不去煞额,前進(jìn)不能,又不后退沾谜;乙也處于同樣的狀況膊毁。
(4) 循環(huán)等待條件。存在一個(gè)進(jìn)程等待序列{P1基跑,P2婚温,...,Pn}媳否,其中P1等待P2所占有的某一資源栅螟,P2等待P3所占有的某一源,......逆日,而Pn等待P1所占有的的某一資源嵌巷,形成一個(gè)進(jìn)程循環(huán)等待環(huán)萄凤。就像前面的過獨(dú)木橋問題室抽,甲等待乙占有的橋面,而乙又等待甲占有的橋面靡努,從而彼此循環(huán)等待坪圾。
一般地,解決死鎖的方法分為死鎖的預(yù)防惑朦,避免兽泄,檢測(cè)與恢復(fù)三種(注意:死鎖的檢測(cè)與恢復(fù)是一個(gè)方法)。
(1) 死鎖的預(yù)防是保證系統(tǒng)不進(jìn)入死鎖狀態(tài)的一種策略漾月。它的基本思想是要求進(jìn)程申請(qǐng)資源時(shí)遵循某種協(xié)議病梢,從而打破產(chǎn)生死鎖的四個(gè)必要條件中的一個(gè)或幾個(gè),保證系統(tǒng)不會(huì)進(jìn)入死鎖狀態(tài)梁肿。
(2) 在資源分配過程中若預(yù)測(cè)有發(fā)生死鎖的可能性蜓陌,則加以避免。
安全序列吩蔑、銀行家算法
(3) 在實(shí)際的操作系統(tǒng)中往往采用死鎖的檢測(cè)與恢復(fù)方法來排除死鎖钮热。
具體見http://blog.csdn.net/abigale1011/article/details/6450845/??
3. Window內(nèi)存管理方式:段存儲(chǔ),頁存儲(chǔ)烛芬,段頁存儲(chǔ)
請(qǐng)看上圖隧期,給出邏輯地址的頁號(hào)和頁內(nèi)地址飒责,開始進(jìn)行地址變換:
(1) 在被調(diào)進(jìn)程的PCB中取出頁表始址和頁表大小,裝入頁表寄存器
(2) 頁號(hào)與頁表寄存器的頁表長(zhǎng)度比較仆潮,若頁號(hào)大于等于頁表長(zhǎng)度宏蛉,發(fā)生地址越界中斷,停止調(diào)用性置,否則繼續(xù)
(3) 由頁號(hào)結(jié)合頁表始址求出塊號(hào)
(4) 塊號(hào)&頁內(nèi)地址檐晕,即得物理地址
請(qǐng)看上圖,給出邏輯地址的段號(hào)和段內(nèi)地址蚌讼,開始進(jìn)行地址變換:
(1) 在被調(diào)進(jìn)程的PCB中取出段表始址和段表長(zhǎng)度辟灰,裝入控制寄存器
(2) 段號(hào)與控制寄存器的頁表長(zhǎng)度比較,若頁號(hào)大于等于段表長(zhǎng)度篡石,發(fā)生地址越界中斷停止調(diào)用芥喇,否則繼續(xù)
(3) 由段號(hào)結(jié)合段表始址求出基址
(4) 基址+段內(nèi)地址,即得物理地址
請(qǐng)看上圖凰萨,給出邏輯地址的段號(hào)继控、頁號(hào)、頁內(nèi)地址胖眷,開始進(jìn)行地址變換:
(1) 在被調(diào)進(jìn)程的PCB中取出段表始址和段表長(zhǎng)度武通,裝入段表寄存器
(2) 段號(hào)與控制寄存器的頁表長(zhǎng)度比較,若頁號(hào)大于等于段表長(zhǎng)度珊搀,發(fā)生地址越界中斷冶忱,停止調(diào)用,否則繼續(xù)
(3) 由段號(hào)結(jié)合段表始址求出頁表始址和頁表大小
(4) 頁號(hào)與段表的頁表大小比較境析,若頁號(hào)大于等于頁表大小囚枪,發(fā)生地址越界中斷,停止調(diào)用劳淆,否則繼續(xù)
(5) 由頁表始址結(jié)合段內(nèi)頁號(hào)求出存儲(chǔ)塊號(hào)
(6) 存儲(chǔ)塊號(hào)&頁內(nèi)地址链沼,即得物理地址
在頁式、段式存儲(chǔ)管理中沛鸵,為獲得一條指令或數(shù)據(jù)括勺,須兩次訪問內(nèi)存;
而段頁式則須三次訪問內(nèi)存
還有三種方式都是離散分配(即將一個(gè)進(jìn)程直接分散地裝入到許多不相鄰的內(nèi)存分區(qū)中)
4. 進(jìn)程的幾種狀態(tài)
(1) 創(chuàng)建狀態(tài):進(jìn)程在創(chuàng)建時(shí)需要申請(qǐng)一個(gè)空白PCB(進(jìn)程管理塊)曲掰,向其中填寫控制和管理進(jìn)程的信息疾捍,完成資源分配。如果創(chuàng)建工作無法完成蜈缤,比如資源無法滿足拾氓,就無法被調(diào)度運(yùn)行,把此時(shí)進(jìn)程所處狀態(tài)稱為創(chuàng)建狀態(tài)
(2) 就緒狀態(tài):進(jìn)程已經(jīng)準(zhǔn)備好底哥,已分配到所需資源咙鞍,只要分配到CPU就能夠立即運(yùn)行房官,如果進(jìn)程運(yùn)行時(shí)間片使用完也會(huì)進(jìn)入就緒狀態(tài)
(3) 執(zhí)行狀態(tài):進(jìn)程處于就緒狀態(tài)被調(diào)度后,進(jìn)程進(jìn)入執(zhí)行狀態(tài)
(4) 阻塞狀態(tài):正在執(zhí)行的進(jìn)程由于某些事件(I/O請(qǐng)求续滋,申請(qǐng)緩存區(qū)失敽彩亍)而暫時(shí)無法運(yùn)行,進(jìn)程受到阻塞疲酌。在滿足請(qǐng)求時(shí)進(jìn)入就緒狀態(tài)等待系統(tǒng)調(diào)用
(5) 終止?fàn)顟B(tài):進(jìn)程結(jié)束蜡峰,或出現(xiàn)錯(cuò)誤,或被系統(tǒng)終止朗恳,進(jìn)入終止?fàn)顟B(tài)湿颅。無法再執(zhí)行
5. IPC(進(jìn)程間的通訊)幾種通信方式
為什么要進(jìn)行進(jìn)程間的通訊
(1) 數(shù)據(jù)傳輸:一個(gè)進(jìn)程需要將它的數(shù)據(jù)發(fā)送給另一個(gè)進(jìn)程,發(fā)送的數(shù)據(jù)量在一個(gè)字節(jié)到幾M字節(jié)之間
(2) 數(shù)據(jù)共享:多個(gè)進(jìn)程想要操作共享數(shù)據(jù)粥诫,一個(gè)進(jìn)程對(duì)共享數(shù)據(jù)的修改油航,別的進(jìn)程應(yīng)該立刻看到。
(3) 事件通知:一個(gè)進(jìn)程需要向另一個(gè)或一組進(jìn)程發(fā)送消息怀浆,通知它(它們)發(fā)生了某種事件(如進(jìn)程終止時(shí)要通知父進(jìn)程)谊囚。
(4) 資源共享:多個(gè)進(jìn)程之間共享同樣的資源。為了作到這一點(diǎn)执赡,需要內(nèi)核提供鎖和同步機(jī)制镰踏。
(5) 進(jìn)程控制:有些進(jìn)程希望完全控制另一個(gè)進(jìn)程的執(zhí)行(如Debug進(jìn)程),此時(shí)控制進(jìn)程希望能夠攔截另一個(gè)進(jìn)程的所有陷入和異常沙合,并能夠及時(shí)知道它的狀態(tài)改變奠伪。
linux常用的進(jìn)程間的通訊方式
(1) 管道(pipe):管道可用于具有親緣關(guān)系的進(jìn)程間的通信,是一種半雙工的方式灌诅,數(shù)據(jù)只能單向流動(dòng)芳来,允許一個(gè)進(jìn)程和另一個(gè)與它有共同祖先的進(jìn)程之間進(jìn)行通信含末。
(2) 命名管道(named pipe):命名管道克服了管道沒有名字的限制猜拾,同時(shí)除了具有管道的功能外(也是半雙工),它還允許無親緣關(guān)系進(jìn)程間的通信佣盒。命名管道在文件系統(tǒng)中有對(duì)應(yīng)的文件名挎袜。命名管道通過命令mkfifo或系統(tǒng)調(diào)用mkfifo來創(chuàng)建。
(3) 信號(hào)(signal):信號(hào)是比較復(fù)雜的通信方式肥惭,用于通知接收進(jìn)程有某種事件發(fā)生了盯仪,除了進(jìn)程間通信外,進(jìn)程還可以發(fā)送信號(hào)給進(jìn)程本身蜜葱;linux除了支持Unix早期信號(hào)語義函數(shù)sigal外全景,還支持語義符合Posix.1標(biāo)準(zhǔn)的信號(hào)函數(shù)sigaction(實(shí)際上,該函數(shù)是基于BSD的牵囤,BSD為了實(shí)現(xiàn)可靠信號(hào)機(jī)制爸黄,又能夠統(tǒng)一對(duì)外接口滞伟,用sigaction函數(shù)重新實(shí)現(xiàn)了signal函數(shù))。
(4) 消息隊(duì)列:消息隊(duì)列是消息的鏈接表炕贵,包括Posix消息隊(duì)列system V消息隊(duì)列梆奈。有足夠權(quán)限的進(jìn)程可以向隊(duì)列中添加消息,被賦予讀權(quán)限的進(jìn)程則可以讀走隊(duì)列中的消息称开。消息隊(duì)列克服了信號(hào)承載信息量少亩钟,管道只能承載無格式字節(jié)流以及緩沖區(qū)大小受限等缺
(5) 共享內(nèi)存:使得多個(gè)進(jìn)程可以訪問同一塊內(nèi)存空間,是最快的可用IPC形式鳖轰。是針對(duì)其他通信機(jī)制運(yùn)行效率較低而設(shè)計(jì)的清酥。往往與其它通信機(jī)制,如信號(hào)量結(jié)合使用蕴侣,來達(dá)到進(jìn)程間的同步及互斥总处。
(6) 內(nèi)存映射:內(nèi)存映射允許任何多個(gè)進(jìn)程間通信,每一個(gè)使用該機(jī)制的進(jìn)程通過把一個(gè)共享的文件映射到自己的進(jìn)程地址空間來實(shí)現(xiàn)它睛蛛。
(7) 信號(hào)量(semaphore):主要作為進(jìn)程間以及同一進(jìn)程不同線程之間的同步手段鹦马。
(8) 套接字(Socket):更為一般的進(jìn)程間通信機(jī)制,可用于不同機(jī)器之間的進(jìn)程間通信忆肾。起初是由Unix系統(tǒng)的BSD分支開發(fā)出來的荸频,但現(xiàn)在一般可以移植到其它類Unix系統(tǒng)上:Linux和System V的變種都支持套接字。
6. 什么是虛擬內(nèi)存
虛擬內(nèi)存是計(jì)算機(jī)系統(tǒng)內(nèi)存管理的一種技術(shù)客冈,它使得應(yīng)用程序認(rèn)為它擁有一個(gè)連續(xù)完整的地址空間旭从,虛擬內(nèi)存不只是“用磁盤空間來擴(kuò)展物理內(nèi)存”的意思。
具體見http://blog.csdn.net/guoweimelon/article/details/50849710
7. 虛擬地址场仲、邏輯地址和悦、線性地址、物理地址的區(qū)別
不明覺厲??https://www.zhihu.com/question/29918252/answer/163114415