一、???
操作系統(tǒng)(淺淺概念):是用來(lái)搞管理軟件的
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.對(duì)下,要管理各種硬件設(shè)備
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.對(duì)上,要給應(yīng)用程序提供一個(gè)穩(wěn)定的運(yùn)行環(huán)境
二、??
進(jìn)程:正在運(yùn)行的程序,假如程序沒(méi)有運(yùn)行就不叫程序,同一個(gè)程序運(yùn)行多次,假如你開(kāi)了三個(gè)QQ,那也就是產(chǎn)生了三個(gè)進(jìn)程。
我們說(shuō)的程序往往是可執(zhí)行文件(exe)只是硬盤(pán)中的一個(gè)靜態(tài)的東西(只有你雙擊程序,此時(shí)操作系統(tǒng),就會(huì)把可執(zhí)行文件的數(shù)據(jù)和指令,加載到內(nèi)存中,并且讓cpu去執(zhí)行這里的指令,完成一系列相關(guān)工作,運(yùn)行起來(lái)(動(dòng)態(tài)的)進(jìn)程。
進(jìn)程能夠干活,說(shuō)明進(jìn)程能夠消耗一定的資源,可執(zhí)行程序只是占據(jù)了硬盤(pán)空間,而進(jìn)程會(huì)消耗cpu資源,內(nèi)存資源,硬盤(pán),網(wǎng)路帶寬。
???這里我就要說(shuō)一手,常常兄弟們會(huì)想一個(gè)問(wèn)題,我假如下那種小電影軟件 ??,但是不安裝就是玩,會(huì)不會(huì)有病毒啥的,只要他不成為進(jìn)程,就沒(méi)有任何問(wèn)題。
???進(jìn)程也是系統(tǒng)分配硬件資源的基本單位(如同發(fā)物資,按著一家一戶(hù)這么發(fā))
一臺(tái)運(yùn)行的計(jì)算機(jī),大概率包含很多進(jìn)程,一旦東西多了,就要考慮管理
在數(shù)量多的情況下:1.先描述:會(huì)使用一個(gè)結(jié)構(gòu)體(C語(yǔ)言里面的,如同java中低配的類(lèi),沒(méi)有方法啥的,操作系統(tǒng)主要是c/c++來(lái)實(shí)現(xiàn))來(lái)記錄進(jìn)程里面的各個(gè)屬性
這個(gè)結(jié)構(gòu)體叫做PCB<-(進(jìn)程控制塊)?????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.組織:會(huì)使用一系列數(shù)據(jù)結(jié)構(gòu)(多為雙向鏈表),把多個(gè)進(jìn)程進(jìn)行一個(gè)有效的組織,隨時(shí)去遍歷,查找,匯總數(shù)據(jù)??
一旦使用雙向鏈表這樣的方式來(lái)進(jìn)行組織的時(shí)候:
(a)查看進(jìn)程的鏈表本質(zhì)就是遍歷該鏈表
(b)創(chuàng)建一個(gè)進(jìn)程,就是創(chuàng)建一個(gè)PCB結(jié)構(gòu)體,并且插入到鏈表上。
(c)銷(xiāo)毀一個(gè)進(jìn)程,就是把這個(gè)PCB結(jié)構(gòu)體從鏈表中刪除。
三、??
PCB中大概有哪些消息:
1.??PID進(jìn)程的標(biāo)識(shí),同一時(shí)刻,每個(gè)進(jìn)程的PID一定都是不同的(正是我們之前在MySQL使用中遇到的沒(méi)有PID的文件。
2.??內(nèi)存指針:
? ?表示了該進(jìn)程,對(duì)應(yīng)的內(nèi)存資源是如何的
? ?內(nèi)存資源中要有什么捏?-最主要存儲(chǔ)的就是從exe可執(zhí)行文件中可載過(guò)來(lái)的指令和數(shù)據(jù)
指令:二進(jìn)制的指令,都是程序猿開(kāi)發(fā)這個(gè)程序的時(shí)候,最終編譯生成的結(jié)果,也就是程序猿寫(xiě)的代碼邏輯(進(jìn)一步的再去交給cpu執(zhí)行)
數(shù)據(jù):執(zhí)行的這些指令,會(huì)依賴(lài)一些數(shù)據(jù)
3.??文件描述表:
和硬盤(pán)資源有關(guān)了,硬盤(pán)是硬件,應(yīng)用程序一般沒(méi)法直接接觸到硬件層 ,實(shí)際操作系統(tǒng)抽象成文件這樣的概念,程序操作的是文件,文件實(shí)際上是存儲(chǔ)在硬盤(pán)上的,每個(gè)進(jìn)程就會(huì)有一個(gè)文件描述符來(lái)記錄,當(dāng)前這個(gè)進(jìn)程正在使用哪些文件
也就是說(shuō) 程序->文件->硬盤(pán)
操作系統(tǒng)打開(kāi)一個(gè)文件,就會(huì)產(chǎn)生一個(gè)文件描述符(就像文件的身份標(biāo)識(shí)一樣,當(dāng)然只在進(jìn)程內(nèi)部生效啦,)同時(shí)會(huì)使用文件描述表(類(lèi)似于數(shù)組),把文件描述符組織起來(lái)。
補(bǔ)充:進(jìn)程需要在cpu上執(zhí)行指令,每個(gè)進(jìn)程要是想完成任務(wù),都要在cpu上一樣執(zhí)行
把進(jìn)程比喻成演員,那么cpu就是表演場(chǎng)地,早期的cpu只有一個(gè)舞臺(tái),一個(gè)時(shí)間上只允許一個(gè)劇組在上面拍戲。
但是現(xiàn)在cpu 8核 16核···但是我們要處理的事務(wù)幾十個(gè),上百個(gè)
??并行:同一時(shí)刻兩個(gè)進(jìn)程,同時(shí)運(yùn)行在兩個(gè)cpu的邏輯核心上
??并發(fā):兩個(gè)進(jìn)程,在同一個(gè)舞臺(tái)上,輪著上,由于cpu切換進(jìn)程極快,圍觀上,這倆進(jìn)程串行執(zhí)行的,宏觀上,看起來(lái),他倆就是同時(shí)進(jìn)行的~
操作系統(tǒng),在調(diào)度這些進(jìn)程的時(shí)候,可能是按照并行的方式來(lái)調(diào)度,也可能是按照并發(fā)的方式來(lái)調(diào)度,~在應(yīng)用程序這一層,感知不到的! (系統(tǒng)中內(nèi)核能感知到)
由于感知不到哪種方式調(diào)度,這兩種調(diào)度方式,宏觀上體現(xiàn)效果都是一樣的,通常用并發(fā)代替并發(fā)和并行(面試官說(shuō)啥是啥,舔就完事了)
4.???PCB中關(guān)于進(jìn)程調(diào)度相關(guān)的屬性(這些屬性也就描述了進(jìn)程對(duì)應(yīng)的cpu資源使用情況)
(1)??狀態(tài) ?就緒狀態(tài)—— 一個(gè)進(jìn)程已經(jīng)隨時(shí)做好在cpu上執(zhí)行的準(zhǔn)備,)
? ? ? ? ? ? ? ? ? ? 阻塞狀態(tài)/睡眠狀態(tài): 因?yàn)槟承┰驘o(wú)法準(zhǔn)備中。
狀態(tài)之間都是相互轉(zhuǎn)化的,實(shí)際上進(jìn)程的狀態(tài)有很多種,但是這兩種事最重要的。?
(2)??優(yōu)先級(jí)
系統(tǒng)給進(jìn)程進(jìn)行調(diào)度的時(shí)候,也不完全是公平的,也會(huì)根據(jù)優(yōu)先級(jí)不同,來(lái)決定時(shí)間分配的權(quán)衡,就可以把系統(tǒng)資源調(diào)配給更重要的進(jìn)程上了。(例子:有錢(qián)>帥>舔)
(3)???上下文
這些進(jìn)程是輪著上的,一次運(yùn)行不完,就需要保證下次cpu運(yùn)行的時(shí)候,能夠從上次運(yùn)行到的位置,繼續(xù)往后運(yùn)行。(游戲存檔,讀檔)
(4)??記賬信息:相當(dāng)于統(tǒng)計(jì)信息
? 會(huì)統(tǒng)計(jì)每個(gè)進(jìn)程,在cpu上執(zhí)行了多久,執(zhí)行了多少指令了,是對(duì)于進(jìn)程調(diào)度的一個(gè)兜底。
?上述這些屬性,主要是有一個(gè)直觀認(rèn)識(shí)->認(rèn)識(shí)進(jìn)程調(diào)度大概是怎樣的,后續(xù)編碼有一定影響,每個(gè)進(jìn)程,都需要一定的內(nèi)存資源。
?
?
按照上述直接分配物理內(nèi)存的模型,此時(shí)假如一個(gè)指針越界指向其他位置,很可能會(huì)影響別的進(jìn)程的執(zhí)行,非常影響系統(tǒng)的穩(wěn)定性。
后來(lái)操作系統(tǒng)引入了“虛擬地址空間”這樣的概念,有效解決上述的問(wèn)題?
??虛擬地址,并非物理內(nèi)存中真實(shí)存在的地址,而只是在該進(jìn)程內(nèi)存在不同的進(jìn)程,可以存相同的虛擬地址,但實(shí)際上對(duì)應(yīng)得到的是不同的物理地址,虛擬地址和物理地址,操作系統(tǒng)可以靈活切換
?
?
??這樣的設(shè)定之后,每個(gè)進(jìn)程的有效的虛擬地址都是固定范圍,進(jìn)程使用虛擬地址的內(nèi)存,都需要操作系統(tǒng)進(jìn)行轉(zhuǎn)換成物理地址,這個(gè)轉(zhuǎn)換的過(guò)程中,就可以針對(duì)虛擬地址是否有效,做出校驗(yàn)
虛擬地址,和物理地址的區(qū)別就像是
1班有王強(qiáng)
2班有王強(qiáng),區(qū)分這兩個(gè)王強(qiáng),要是區(qū)分就要看,年紀(jì)花名冊(cè)(物理地址唄)
虛擬空間的加持下,進(jìn)程有了獨(dú)立性,每個(gè)進(jìn)程有自己的虛擬空間->一個(gè)進(jìn)程無(wú)法直接訪(fǎng)問(wèn),或者修改其他進(jìn)程,虛擬空間,獨(dú)化了系統(tǒng)的獨(dú)立性,
假如也要進(jìn)程之間產(chǎn)生寫(xiě)配合,聯(lián)系
進(jìn)程間通信(進(jìn)程隔離性的基礎(chǔ)上,開(kāi)個(gè)口子有限制的相互影響),在進(jìn)程隔離之間開(kāi)個(gè)口,本質(zhì)相同,找一個(gè)公共區(qū)域(就像是做小區(qū)核酸,)借助公共區(qū)域來(lái)完成數(shù)據(jù)的交換
(以后介紹,本章先到這里)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-627224.html
最近會(huì)更新一些基本的知識(shí),和算法,打算沖一下藍(lán)橋杯加油啦文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-627224.html
到了這里,關(guān)于針對(duì)java程序員的了解細(xì)節(jié)操作系統(tǒng)與進(jìn)程的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!