本篇博客的重點知識是進程+進程的調(diào)度
操作系統(tǒng):像是windows,android,iOS等都是常見的操作系統(tǒng)
下面是關(guān)于計算機在底層工作的原理流程圖
在操作系統(tǒng)層面:
- 對上,要給軟件提供穩(wěn)定的運行環(huán)境。
- 對下,要管理好各種硬件設(shè)備(如鼠標,鍵盤等)。
操作系統(tǒng)本身就是一個大話題,是一個非常復(fù)雜的軟件,其中的功能非常多,**“進程管理”**就是一個與我們密切相關(guān)的模塊
一個運行起來的程序,就是進程
進程(process)/任務(wù)(task)
可以在任務(wù)管理器中查看到啟動了哪些進程
進程管理(進程多了,才需要管理)
-
描述一個進程:使用結(jié)構(gòu)體/類,把一個進程有那些信息,表示出來
-
組織這些進程:使用一定的數(shù)據(jù)結(jié)構(gòu),把這些結(jié)構(gòu)體/對象放到一起
例如,學(xué)生管理系統(tǒng):
- 明確每個學(xué)生相關(guān)屬性信息
- 通過一定數(shù)據(jù)結(jié)構(gòu)把這些學(xué)生的信息都放起來(例如通過表格等形式)
進程的結(jié)構(gòu)體里有哪些屬性?(進程結(jié)構(gòu)體PCB(process control block))
- pid 每個進程需要有一個唯一的身份標識
- 內(nèi)存指針,當(dāng)這個進程運行的時候,使用了哪些內(nèi)存上的資源
- 文件描述符表,當(dāng)這個進程運行的時候,使用了哪些硬盤上的資源
- 進程的運行,需要從操作系統(tǒng)這里申請資源,所以 進程是操作系統(tǒng)進行資源分配的基本單位 \color{red}{進程是操作系統(tǒng)進行資源分配的基本單位} 進程是操作系統(tǒng)進行資源分配的基本單位
多進程編程
進程調(diào)度
進程調(diào)度的兩種方式:
并行
同一時刻,兩個核心,同時執(zhí)行兩個進程.此時這兩進程就是并行執(zhí)行的
并發(fā)
一個核心,先執(zhí)行進程1,執(zhí)行一會之后,再去執(zhí)行進程2,再執(zhí)行一會之后,再執(zhí)行進程3....
只要轉(zhuǎn)換的做夠快那么我們就可以認為進程1,2,3就是同時執(zhí)行的
下面我會使用通俗易懂的文字來對并行和并發(fā)進行解釋:
條件:
現(xiàn)在假設(shè)我是一個漂亮的妹子
同時有三個小哥哥A(有錢),B(長得帥),C(舔狗)在追求俺
而俺和三個小哥哥都想交往,怎么辦呢???在并行的視角去看: 我可以把他們?nèi)齻€一起叫來,進行交往,這時候他們會碰面 在并發(fā)的視角去看: 我可以在 周一、周二、周三把小哥哥 A 叫來和我交往 周四、周五把小哥哥 B 叫來和我交往 周六把小哥哥 C 叫來和我交往 這樣,如果我們 把時間線當(dāng)做一周來看,那么我是和其中的一個小哥哥進行交往 但是,把時間線當(dāng)做一年來看,那么我就是和三個小哥哥同時進行交往
很多時候我們都把“并行 + 并發(fā)”統(tǒng)稱為“并發(fā)”
并發(fā)程度更高了,就可以稱為“高并發(fā)”
進程調(diào)度(PCB)所需要的4個核心屬性:(不只有四個屬性)
- 進程狀態(tài)
簡單認為,進程狀態(tài)主要是這兩個:
就緒態(tài):該進程已經(jīng)準備好隨時可以上CPU執(zhí)行
阻塞態(tài):該進程暫時無法上CPU執(zhí)行
例如:
還是上述條件
每周給這三個小哥哥,安排時間表
假設(shè),A對我說,他要出差一個月
默認情況下,這三個小哥哥都是隨叫隨到,我在排時間的時候就會非常靈活
在以上情況中A就屬于阻塞狀態(tài),B和C就是就緒狀態(tài)
現(xiàn)在我可以去安排
周一到周四,和B
周五周六,和C
周天繼續(xù)放假
- 進程的優(yōu)先級
進程之間的調(diào)度不一定是“公平”的,所以有的進程需要優(yōu)先進行調(diào)度
還是上述條件
現(xiàn)在我給他們的調(diào)度安排個優(yōu)先級
例如:
A 優(yōu)先度最高
B 其次
C 最低
所以每周排時間,優(yōu)先排A, 其次排B, 最后排C
- 進程的上下文
描述了當(dāng)前進程執(zhí)行到哪里這樣的“存檔記錄”
進程在離開CPU的時候就要把當(dāng)前運行的中間結(jié)果,“存檔”
等到下次進程回來CPU上,在恢復(fù)之前的“存檔”,從上次的結(jié)果繼續(xù)往后執(zhí)行
例如:
有一天,我和 A 在一起,A 給我說:下個月,我?guī)愕今R爾代夫去玩,你準備準備~~
此時,我可以準備一套性感的泳衣
第二天,我和B在一起,B 給我說:下個月,他媽媽要過生日,他想讓我?guī)兔o挑個禮物,讓我也準備準備~~
這時候我準備買一部手機
過了一段時間,此時 A 問我:你準備的怎么樣了?
我回答說:我把手機買好了
B 問我:你準備的怎么樣了??
我回答說:我把性感的泳衣準備好了!
此時明顯上下文就對不上
為了避免上述穿幫的情況,我就需要在安排時間的本子上面記錄一下:
和他們都做了啥樣的事情,有啥是需要進一步完善的
總結(jié)下來就是:
- 進程的記賬信息
統(tǒng)計了每個進程,在CPU上執(zhí)行了多久,可以作為調(diào)度的參考依據(jù)
例如:
按照之前的優(yōu)先級,每周只給C 排一天時間,
過了幾個月之后,我就發(fā)現(xiàn),C對我的太讀逐漸冷淡了,
舔的也是力不從心的,
此時排查之前的時間表,原來是給C 的時間太少了,
難怪感情就淡了,
接下來的時間里給C 多排點時間,
多給他嘗嘗甜頭,
就由不得他舔的不賣力了~~
組織進程調(diào)度
進程間通信
所謂進程間通信,就是在隔離性的前提下,找一個公共的區(qū)域,讓兩個進程借助這個區(qū)域來完成數(shù)據(jù)的交換
文章來源:http://www.zghlxwxcb.cn/news/detail-461697.html
以上就是本博客對于操作系統(tǒng)的相關(guān)介紹了~~
本篇博客的重點知識就是 進程+進程的調(diào)度
學(xué)習(xí)本篇并不是為了講線程,而是為了引出下一個知識點:線程?。。?br> 多進程編程 和 多進程編程,都能滿足“并發(fā)編程”的需求場景
而在Java編程中多使用,多線程編程
關(guān)于多線程編程的具體內(nèi)容,那么就請各位看官移步下篇辣??????文章來源地址http://www.zghlxwxcb.cn/news/detail-461697.html
到了這里,關(guān)于計算機是如何工作的??(多進程編程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!