前言:
大家好,我是良辰丫,今天我們來認(rèn)識(shí)一下進(jìn)程
的相關(guān)概念,當(dāng)接觸到進(jìn)程,也就意味著我們進(jìn)入了javaEE的學(xué)習(xí)階段,這篇文章主要帶大家去學(xué)習(xí)一些面試題,幫助大家更好的去學(xué)習(xí)并熟悉進(jìn)程,跟著我的步伐一起進(jìn)入學(xué)習(xí)吧!!!??????
??個(gè)人主頁:良辰針不戳
??所屬專欄:javaEE初階
??勵(lì)志語句:生活也許會(huì)讓我們遍體鱗傷,但最終這些傷口會(huì)成為我們一輩子的財(cái)富。
??期待大家三連,關(guān)注,點(diǎn)贊,收藏。
??作者能力有限,可能也會(huì)出錯(cuò),歡迎大家指正。
??愿與君為伴,共探Java汪洋大海。
1、 進(jìn)程(任務(wù))是什么
所謂進(jìn)程
,可以這樣理解,一個(gè)運(yùn)行起來的程序就叫進(jìn)程.也可以把程序比作一個(gè)工廠,工廠正在加工運(yùn)轉(zhuǎn)的即進(jìn)程.
每個(gè)應(yīng)用程序運(yùn)行于現(xiàn)代操作系統(tǒng)之上時(shí),操作系統(tǒng)會(huì)提供一種抽象,好像系統(tǒng)上只有這個(gè)程序在運(yùn)
行,所有的硬件資源都被這個(gè)程序在使用。這種假象是通過抽象了一個(gè)進(jìn)程的概念來完成的,進(jìn)程可以說是計(jì)算機(jī)科學(xué)中最重要和最成功的概念之一。
進(jìn)程是操作系統(tǒng)對一個(gè)正在運(yùn)行的程序的一種抽象,換言之,可以把進(jìn)程看做程序的一次運(yùn)行過程;同時(shí),在操作系統(tǒng)內(nèi)部,進(jìn)程又是操作系統(tǒng)進(jìn)行資源分配的基本單位。
后綴名為exe的文件叫做可執(zhí)行文件,在沒有點(diǎn)擊它運(yùn)行之前,它只能叫做程序,當(dāng)我們點(diǎn)擊它之后,在它運(yùn)行的時(shí)候,我們就給它有了新的定義,叫做進(jìn)程.
進(jìn)程運(yùn)行的時(shí)候需要向操作系統(tǒng)申請資源,需要反復(fù)強(qiáng)調(diào)的一句話是進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的基本單位,此處涉及的資源包括內(nèi)存,硬盤,CPU等.
2、 進(jìn)程控制塊相關(guān)概念
pid
: 進(jìn)程的唯一標(biāo)識(shí),相當(dāng)于一個(gè)人的身份證號(hào)碼.內(nèi)存指針
: 當(dāng)前內(nèi)容使用的內(nèi)存是那一部分(表示地址指向),進(jìn)程要跑起來就需要消耗一定的硬件資源,比如內(nèi)存.文件描述符表
: 硬盤上存儲(chǔ)的數(shù)據(jù),就是以文件為單位進(jìn)行整理的,進(jìn)程每次打開一個(gè)文件,就會(huì)產(chǎn)生一個(gè)文件描述符(標(biāo)識(shí)了這個(gè)被打開的文件),一個(gè)進(jìn)程可能會(huì)打開許多文件,對應(yīng)了一組文件描述符,把這樣的文件描述符放到一個(gè)順序表這樣的結(jié)構(gòu)里面,就構(gòu)成了所謂的文件描述符.這標(biāo)識(shí)著進(jìn)程運(yùn)行的時(shí)候使用了哪些硬盤上的資源.進(jìn)程關(guān)聯(lián)的程序信息
,例如哪個(gè)程序,加載到內(nèi)存中的區(qū)域等分配給該資源使用的各個(gè)資源
3、 進(jìn)程與CPU資源的相關(guān)屬性
程序之所以能運(yùn)行,全依靠CPU,每個(gè)程序,其實(shí)就是一組二進(jìn)制指令的集合,那么我們簡單認(rèn)識(shí)一下CPU.
cpu
中文名叫中央處理器(Central Processing Unit,簡稱CPU),是計(jì)算機(jī)系統(tǒng)的運(yùn)算和控制核心,是信息處理、程序運(yùn)行的最終執(zhí)行單元。CPU是人類科技史上最偉大的成就之一.
3.1 進(jìn)程狀態(tài)
進(jìn)程有許多運(yùn)行狀態(tài),我們主要了解兩個(gè)狀態(tài).
就緒狀態(tài)
: 進(jìn)程已經(jīng)準(zhǔn)備好,隨時(shí)可以在CPU上執(zhí)行.阻塞狀態(tài)
: 該進(jìn)程無法在CPU上執(zhí)行.
簡單了解一下上面兩個(gè)狀態(tài),加入你有一個(gè)好朋友A,你們兩個(gè)約好一起去旅游,但是暫時(shí)沒有定時(shí)間,A也沒有其它的事情要干,當(dāng)你要去旅游的時(shí)候,你可以隨叫隨到,這就相當(dāng)于就緒狀態(tài);你還有一個(gè)好朋友B,因?yàn)橐恍┨厥獾那闆r,他出差了,你們曾經(jīng)約定可以一起旅行,但是可能暫時(shí)做不到了,這就是所謂的阻塞狀態(tài).
3.2 進(jìn)程的優(yōu)先級
進(jìn)程是具有一定的優(yōu)先級的,在CPU上規(guī)定了一系列對進(jìn)程的優(yōu)先級約束,比如先來先服務(wù)就是按照哪個(gè)進(jìn)程先執(zhí)行,另一個(gè)進(jìn)程進(jìn)入阻塞狀態(tài).按照優(yōu)先級的次序進(jìn)行執(zhí)行.
3.2 進(jìn)程的上下文
所謂上下文
,就是描述了進(jìn)程執(zhí)行到哪里的存檔信息,進(jìn)程在離開CPU的時(shí)候要對當(dāng)前進(jìn)程運(yùn)行的中間結(jié)果進(jìn)行存檔,等下次進(jìn)程回到CPU的時(shí)候恢復(fù)之前的存檔,從上次的結(jié)果繼續(xù)向后執(zhí)行,這樣就不會(huì)后臺(tái)退出,比如王者農(nóng)藥這個(gè)游戲,我們掛著后臺(tái)回復(fù)一個(gè)消息或者干一些別的事情,我們回到王者,后臺(tái)依然存在.
- 如果進(jìn)程結(jié)束了,就不必進(jìn)行存檔.
- 在進(jìn)程中理解上下文,進(jìn)程在運(yùn)行的過程中,CPU內(nèi)部的一系列寄存器的值,其中,寄存器的作用有很多,我們需要記得的是寄存器用來保存當(dāng)前進(jìn)程執(zhí)行的中間結(jié)果,包括進(jìn)程運(yùn)行到哪一條指令.
存檔
,就是進(jìn)程在離開CPU的時(shí)候,就需要把這些寄存器的值存到PCB的上下文字段中;讀檔
,進(jìn)程下次回到CPU,再把PCB的值恢復(fù)到寄存器中.
3.3 并行與并發(fā)
并行
: 同一個(gè)時(shí)刻,兩個(gè)核心同時(shí)執(zhí)行兩個(gè)進(jìn)程,此時(shí)這兩個(gè)進(jìn)程就是并行執(zhí)行的(一起執(zhí)行).并行可以理解為兩個(gè)人分別一起做兩件事情.
并發(fā)
: 一個(gè)核心,先執(zhí)行進(jìn)程1,執(zhí)行一會(huì)再執(zhí)行進(jìn)程2,執(zhí)行一會(huì)兒進(jìn)程2之后再執(zhí)行進(jìn)程3…然后再返回來執(zhí)行進(jìn)程1,一會(huì)再執(zhí)行進(jìn)程2…只要切換的速度快,在我們?nèi)庋劭磥砥鋵?shí)和并行沒有什么區(qū)別(可以簡單的認(rèn)為同時(shí)執(zhí)行).
很多情況下操作系統(tǒng)的任務(wù)通過并行和并發(fā)兩種方式共同完成的,我們通常把并行+并發(fā)的方式統(tǒng)稱為并發(fā).當(dāng)一個(gè)核心(主體)并發(fā)執(zhí)行幾萬甚至幾十萬個(gè)任務(wù)的時(shí)候,我們把它叫做高并發(fā).
3.4 進(jìn)程的進(jìn)賬信息
統(tǒng)計(jì)每個(gè)進(jìn)程在CPU上執(zhí)行了多久,可作為進(jìn)程調(diào)度的參考依據(jù).比如在CPU中三個(gè)進(jìn)程ABC,可能進(jìn)程A執(zhí)行時(shí)間比較少,我們就可以多給它分配一些執(zhí)行時(shí)間.
3.5 組織PCB
操作系統(tǒng)往往通過雙向鏈表組織PCB
- 創(chuàng)建一個(gè)進(jìn)程就是創(chuàng)建一個(gè)鏈表節(jié)點(diǎn).
- 銷毀一個(gè)進(jìn)程就是銷毀一個(gè)鏈表節(jié)點(diǎn).
- 遍歷進(jìn)程就是遍歷進(jìn)程鏈表.
3.6 內(nèi)存分配(內(nèi)存管理)
操作系統(tǒng)對內(nèi)存資源的分配,采用的是空間模式 —— 不同進(jìn)程使用內(nèi)存中的不同區(qū)域,互相之間不會(huì)干擾.操作系統(tǒng)給資源分配的內(nèi)存,是以虛擬地址空間的方式進(jìn)行分配的,每個(gè)進(jìn)程訪問的內(nèi)存地址,其實(shí)并不是真正的內(nèi)存地址.
3.6.1 直接訪問物理內(nèi)存地址
下面是進(jìn)程直接訪問物理內(nèi)存地址,此時(shí)可能產(chǎn)生問題,如果進(jìn)程A奔潰了,會(huì)把同一內(nèi)存條上的其它進(jìn)程也搞奔潰.這就對于操作系統(tǒng)的穩(wěn)定性產(chǎn)生了一定的挑戰(zhàn).
那么,什么是
穩(wěn)定性
,可以簡單的認(rèn)為,兩個(gè)相關(guān)聯(lián)的東西,其中一個(gè)壞掉了導(dǎo)致另外一個(gè)不能運(yùn)行,這就是說明這兩個(gè)相關(guān)聯(lián)的東西形成的整體穩(wěn)定性較差;反之,如果沒有較大的影響,我們就說這個(gè)整體穩(wěn)定性較好.
3.6.2 通過虛擬地址訪問物理內(nèi)存地址
上面兩個(gè)進(jìn)程中,通過代碼操控自己要訪問的物理內(nèi)存地址,訪問的內(nèi)存會(huì)被操作系統(tǒng)自動(dòng)映射到真正的物理內(nèi)存上,但是進(jìn)程自身感知不到真正的物理內(nèi)存地址是什么.此時(shí)進(jìn)程A奔潰了就不會(huì)影響進(jìn)程B,因?yàn)槿魏我粋€(gè)內(nèi)存操作都需要通過頁表來進(jìn)行翻譯,如果出現(xiàn)野指針,野指針的地址會(huì)與頁表上的地址進(jìn)行對比,如果頁表上沒有這個(gè)地址將無法翻譯,也就無法訪問并修改物理內(nèi)存,因此呢,也不會(huì)對別的進(jìn)程造成干擾.
這樣可以有效的校驗(yàn),校驗(yàn)當(dāng)前的地址是否有效.一個(gè)進(jìn)程無法干預(yù)另一個(gè)進(jìn)程的內(nèi)存,表示了每個(gè)進(jìn)程有自己獨(dú)立的地址空間.這樣大大提高了操作系統(tǒng)的穩(wěn)定性.
3.7 進(jìn)程間的通信
有些時(shí)候進(jìn)程之間需要相互配合,交互運(yùn)行.
如果每個(gè)進(jìn)程可以直接訪問物理內(nèi)存(沒有隔離性),也就不需要進(jìn)程通信,進(jìn)程A直接把結(jié)果寫到進(jìn)程B的內(nèi)存中就可以了.文章來源:http://www.zghlxwxcb.cn/news/detail-401100.html
所謂進(jìn)程通信
,就是在隔離性的前提下,找一個(gè)公共區(qū)域,讓兩個(gè)進(jìn)程借助這個(gè)公共區(qū)域完成進(jìn)程間的數(shù)據(jù)交換.- 操作系統(tǒng)提供的進(jìn)程間通信方式有很多種,有管道,消息隊(duì)列,共享內(nèi)存,信號(hào)等.
- 在java中,我們主要使用文件和socket這兩種方式完成進(jìn)程通信(后續(xù)詳解).
后序:
今天我們有關(guān)的內(nèi)容就到這里了,我們學(xué)習(xí)了進(jìn)程的一些相關(guān)概念,學(xué)習(xí)了進(jìn)程控制塊,進(jìn)程一些屬性等內(nèi)容,希望本篇小小的文章可以幫到大家??????文章來源地址http://www.zghlxwxcb.cn/news/detail-401100.html
到了這里,關(guān)于【進(jìn)程相關(guān)概念】面試常見問題,進(jìn)程狀態(tài),進(jìn)程優(yōu)先級,并行與并發(fā),進(jìn)程通信等的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!