日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

全面剖析《自己动手写操作系统》第六章---进程

發布時間:2023/12/10 windows 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 全面剖析《自己动手写操作系统》第六章---进程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載請標注:http://blog.csdn.net/zgh1988/article/details/7371754

在一開始學習進程的時候,我們大概每個人都會遇到過這樣的問題,下面就讓我們帶著這些問題來認識認識進程。

1、進程是什么?

2、什么是多進程?

3、執行一個進程需要什么?

4、多進程之間是如何調度的?

5、進程的上下文環境是什么?

6、如何創建一個新的進程?

一、進程是什么?

? ? 大家在面試時,有時候會被HR問到這么一道題目:程序與進程有什么區別?

如果讓我們通過生硬的概念來回答HR,往往會令HR失望。下面我想通過一個生活中的場景來回答HR這個問題。

周末,張先生想為他心愛的老婆做一道菜---牛肉排骨湯,他有做這道菜的菜譜,廚房里也有牛肉排骨,味精,香料等,張先生就按著菜譜一步步得為他的老婆做好了這道菜---牛肉排骨湯,他的老婆很高興,感覺很幸福。

在這個比喻中,做牛肉排骨躺的菜譜就是程序,張先生應該就算是處理機(CPU),做這道菜的各種原料(牛肉排骨,大蔥等)就是輸入數據,一盤香噴噴的牛肉排骨湯則是輸出數據,進程就是張先生按著菜譜做好這道菜的整系列動作的總和。

于是我們知道,程序是一個靜態的,進程是用來描述動態的過程的。

二、什么是多進程?

? ? 大家都知道,現在的操作系統都是支持多進程的,即一個CPU可以支持多個進程。這個又是什么情況?讓我來修改一下上面的場景。

周末,張先生想為他心愛的老婆做一道菜---牛肉排骨湯,他有做這道菜的菜譜,廚房里也有牛肉排骨,味精,香料等,張先生開始做牛肉排骨湯,做著做著,他的兒子的手被刀子劃破了,哭著跑到爸爸這里來訴苦,這時候,張先生停下手里的活,在菜譜上記下自己做到了哪里,然后拿出一本急救手冊,按著上面的指示,把兒子的手傷包扎好之后,他回到廚房繼續做自己的牛肉排骨湯。

在這個場景中,就包含了兩個進程,進程一是做牛肉排骨湯,進程二是為兒子包扎傷口。

張先生(CPU)先是執行的進程一,在進程一還米有結束之前,暫停進程一,去執行了進程二。執行完進程二,回到繼續執行進程一,直至進程一結束。這個過程就成為進程之間的"切換"。

下面我們通過一張圖片來介紹多進程之間的關系:


圖(a):一個包含4個進程的進程表

圖(b):4個進程是完全獨立的

圖(c):4個進程進行切換,但任意時刻只有一個進程在運行

由此,我們得知,進程,從宏觀上來說,有自己的目標,又受控于進程調度模塊的控制。從微觀上來說,有自己的代碼和數據,同時也擁有自己的堆棧。但又利用系統的資源。

三、執行一個進程需要什么?


每個進程包含自己的代碼,數據,和堆棧,并且都服從進程調度模塊進行調度。

四、多進程之間是如何調度的?

多進程之間的調度是由進程調度模塊來完成的。我們首先需要了解進程的狀態,下圖為3種狀態之間的關系:


在本書中,作者只介紹的是2、3,即就緒--運行--就緒之間的轉換關系。其中條件2是調度模塊選擇其中某一個進程運行。

條件3是時鐘中斷發生,調度模塊將正在運行的進程調入到就緒隊列。

五、進程的上下文環境是什么?

? ? 在張先生去為兒子包扎傷口時,他需要在菜譜上記錄下自己做牛肉排骨湯做到什么地方,以便回來之后繼續做。同理,操作系統在進行系統切換時,也同樣要記錄下該進程的上下文環境。

于是我們創建了一個數據結構--進程控制塊(ProcessControl Block),它主要包括以下幾方面信息:

1、進程標識符 name:每個進程都必須有一個唯一的標識符,可以是字符串,也可以是一個數字。

2、進程當前狀態 status:說明進程當前所處的狀態。為了管理的方便,系統設計時會將相同的狀態的進程組成一個隊列,如就緒進程隊列,阻塞進程則要根據等待的事件組成多個等待隊列,如等待打印機隊列、等待磁盤I/O完成隊列等等。

3、進程相應的程序和數據地址,以便把PCB與其程序和數據聯系起來。

4、進程資源清單。列出所擁有的除CPU外的資源記錄,如擁有的I/O設備,打開的文件列表等。

5、進程優先級 priority:進程的優先級反映進程的緊迫程度,通常由用戶指定和系統設置。

6、CPU現場保護區 cpustatus:當進程因某種原因不能繼續占用CPU時(如等待打印機),釋放CPU,這時就要將CPU的各種狀態信息保護起來,為將來再次得到處理機恢復CPU的各種狀態,繼續運行。

7、進程同步與通信機制 用于實現進程間互斥、同步和通信所需的信號量等。

8、進程所在隊列PCB的鏈接字 根據進程所處的現行狀態,進程相應的PCB參加到不同隊列中。PCB鏈接字指出該進程所在隊列中下一個進程PCB的首地址。

9、與進程有關的其他信息。 如進程記賬信息,進程占用CPU的時間等。

每個進程有自己的進程控制塊,我們將這些進程控制塊組織到一起,存儲在一個叫進程表(Process Table)的結構數組中。

在本書中,本著簡單實用的原則,我們的進程控制塊只包含了進程標識符,CPU現場保護(即寄存器的內容),還有局部描述符。程序內容如下:

/* 寄存器 */ typedef struct s_stackframe {t_32 gs; t_32 fs; t_32 es; t_32 ds; t_32 edi; t_32 esi; t_32 ebp; t_32 kernel_esp;t_32 ebx; t_32 edx; t_32 ecx; t_32 eax; t_32 retaddr; t_32 eip; t_32 cs; t_32 eflags; t_32 esp; t_32 ss; }STACK_FRAME;/* PCB進程控制塊 */ typedef struct s_proc {STACK_FRAME regs; /* 寄存器 */t_16 ldt_sel; /* LDT選擇子 */DESCRIPTOR ldts[LDT_SIZE]; /* LDTs */t_32 pid; /* 進程號 */char p_name[16]; /* 名字 */ }PROCESS;

六、如何創建一個新的進程?

? ? 首先我們要申請一個進程控制塊(PCB),然后為新的進程分配資源(本程序內為堆棧),繼而初始化進程控制塊,最后將隊列加入就緒隊列(本程序即進程表)。

? ? 在本程序內,我們是這樣做到的



全面剖析《自己動手寫操作系統》第五章--makefile?http://blog.csdn.net/zgh1988/article/details/7338380

全面剖析《自己動手寫操作系統》第五章---加載內核kernel.bin?http://blog.csdn.net/zgh1988/article/details/7329941

全面剖析《自己動手寫操作系統》第五章---Red Hat 9.0 的安裝過程 ?http://blog.csdn.net/zgh1988/article/details/7315676

全面剖析《自己動手寫操作系統》第四章---FAT12文件系統?http://blog.csdn.net/zgh1988/article/details/7284834

全面剖析《自己動手寫操作系統》第四章---加載Loader.bin?http://blog.csdn.net/zgh1988/article/details/7291909

全面剖析《自己動手寫操作系統》第三章---進入保護模式? ?http://blog.csdn.net/zgh1988/article/details/7098981

全面剖析《自己動手寫操作系統》第三章---“實模式--保護模式--實模式”?http://blog.csdn.net/zgh1988/article/details/7255804

全面剖析《自己動手寫操作系統》第三章---堆棧段的工作方式?http://blog.csdn.net/zgh1988/article/details/7256254

全面剖析《自己動手寫操作系統》第三章---特權級以及不同特權級代碼段之間的跳轉?http://blog.csdn.net/zgh1988/article/details/7262901

全面剖析《自己動手寫操作系統》第三章---分頁機制?http://blog.csdn.net/zgh1988/article/details/7270748

全面剖析《自己動手寫操作系統》第三章---中斷機制?http://blog.csdn.net/zgh1988/article/details/7276259

全面剖析《自己動手寫操作系統》第二章http://blog.csdn.net/zgh1988/article/details/7062065

全面剖析《自己動手寫操作系統》第一章http://blog.csdn.net/zgh1988/article/details/7060032

《自己動手寫操作系統》讀后感http://blog.csdn.net/zgh1988/article/details/7059936











?



總結

以上是生活随笔為你收集整理的全面剖析《自己动手写操作系统》第六章---进程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。