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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

操作系统(Linux与Windows)的进程管理

發(fā)布時(shí)間:2025/6/17 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 操作系统(Linux与Windows)的进程管理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

進(jìn)程

描述和管理程序的“運(yùn)行過程”-------進(jìn)程

進(jìn)程概念

定義:進(jìn)程是程序在某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng)

進(jìn)程的特征

  • 動(dòng)態(tài)性

    進(jìn)程是程序的一次執(zhí)行過程,動(dòng)態(tài)產(chǎn)生消亡

  • 并發(fā)性

    進(jìn)程可以同其他程序一起向前推進(jìn)

  • 異步性

    進(jìn)程按各自的速度向前推進(jìn)

  • 獨(dú)立性

    進(jìn)程是系統(tǒng)分配資源和調(diào)度CPU的單位

進(jìn)程的狀態(tài)

  • 運(yùn)行狀態(tài)
    進(jìn)程已經(jīng)占有CPU,在CPU上運(yùn)行

  • 就緒狀態(tài)
    具備運(yùn)行條件但由于無CPU,暫時(shí)不能運(yùn)行

  • 阻塞狀態(tài)
    應(yīng)為等待某項(xiàng)服務(wù)完成或信號(hào)來到而不能運(yùn)行的狀態(tài)
    例如等待:系統(tǒng)調(diào)用,I/O操作,合作進(jìn)程的服務(wù)或信號(hào)

進(jìn)程狀態(tài)的變遷


進(jìn)程的掛起和解掛操作

掛起:用戶或OS將進(jìn)程有意暫停
解掛:將掛起的進(jìn)程繼續(xù)

阻塞:禁止阻塞(阻塞時(shí)掛起)和活動(dòng)阻塞(正常阻塞)
就緒:禁止就緒(就緒時(shí)掛起)和活動(dòng)就緒(正常就緒)

Linux進(jìn)程狀態(tài)

  • 可運(yùn)行態(tài):TASK_RUNNING
    1.就緒:在就緒隊(duì)列中等待調(diào)度
    2.運(yùn)行:正在運(yùn)行
  • 阻塞(等待)態(tài):
    1.淺度阻塞:TASK_INTERRUPTIBLE
    可被其他進(jìn)程的信號(hào)或時(shí)鐘中斷喚醒
    2.深度阻塞:TASK_UNINTERRUPTIBLE
    不可被其他進(jìn)程通過信號(hào)或時(shí)鐘中斷喚醒
  • 僵死態(tài):TASK_ZOMBIE
    進(jìn)程終止執(zhí)行,釋放大部分內(nèi)存
  • 掛起態(tài):TASK_STOPPED
    進(jìn)程被掛起

進(jìn)程的描述

進(jìn)程控制塊(PCB)

1.描述進(jìn)程狀態(tài)、資源、和相關(guān)進(jìn)程關(guān)系的一中數(shù)據(jù)結(jié)構(gòu)
2.PCB是進(jìn)程的標(biāo)志
3.創(chuàng)建進(jìn)程時(shí)創(chuàng)建PCB;進(jìn)程撤銷后PCB同時(shí)撤銷

進(jìn)程=程序+PCB

Linux的進(jìn)程控制塊PCB:task_struct


Linux 進(jìn)程的標(biāo)識(shí):
PID
PPID:父進(jìn)程ID
PGID:進(jìn)程組ID
Linux進(jìn)程的用戶標(biāo)識(shí):
UID:用戶ID
GID:用戶組ID

STAT:進(jìn)程狀態(tài)

符號(hào)含義
R運(yùn)行或準(zhǔn)備運(yùn)行
S睡眠狀態(tài)
I空閑
Z僵尸
D不間斷睡眠
W進(jìn)程沒有駐留頁(yè)
T停止或跟蹤

進(jìn)程控制

四個(gè)典型控制為:

  • 創(chuàng)建進(jìn)程
  • 撤銷進(jìn)程
  • 阻塞進(jìn)程
  • 喚醒進(jìn)程

創(chuàng)建進(jìn)程的過程

創(chuàng)建一個(gè)空白PCB
賦予進(jìn)程標(biāo)識(shí)符ID
為進(jìn)程分配空間
初始化PCB(默認(rèn)值)
插入相應(yīng)的進(jìn)程隊(duì)列(新進(jìn)程插入就緒隊(duì)列)

進(jìn)程撤銷過程

在PCB隊(duì)列中檢索出PCB
獲取該進(jìn)程狀態(tài)

  • 若在運(yùn)行態(tài),立即終止該進(jìn)程
    • 遞歸檢查是否有子進(jìn)程,先撤銷子進(jìn)程
      釋放進(jìn)程占有的資源
      將進(jìn)程從PCB隊(duì)列中移除

進(jìn)程阻塞時(shí)機(jī)和過程

時(shí)機(jī);

  • 請(qǐng)求系統(tǒng)服務(wù)
  • 啟動(dòng)某種操作
  • 新數(shù)據(jù)尚未到達(dá)
  • 無新工作可做

停止運(yùn)行
將PCB“運(yùn)行態(tài)”改為“阻塞態(tài)”
插入相應(yīng)原因的阻塞隊(duì)列
轉(zhuǎn)調(diào)度程序

進(jìn)程喚醒

系統(tǒng)服務(wù)由不滿足到滿足
I/O完成
新數(shù)據(jù)到達(dá)
進(jìn)程提出新請(qǐng)求

進(jìn)程控制原語:

  • 創(chuàng)建原語
  • 撤銷原語
  • 阻塞原語
  • 喚醒原語

Linux進(jìn)程控制

創(chuàng)建進(jìn)程fork

fork執(zhí)行流程:

  • 分配task_struct結(jié)構(gòu)
  • 為新進(jìn)程堆棧分配物理頁(yè)
  • 拷貝父進(jìn)程內(nèi)容
    • 正文段、用戶數(shù)據(jù)段及系統(tǒng)數(shù)據(jù)段task_struct的大部分內(nèi)容,并對(duì)子程序中有別于父進(jìn)程的項(xiàng)進(jìn)行初始化
  • 把新進(jìn)程的task_struct結(jié)構(gòu)地址保存在task指針數(shù)組中
  • 子進(jìn)程由fork創(chuàng)建后,通常屬于就緒狀態(tài)
  • init進(jìn)程:
    在linux系統(tǒng)初啟時(shí),生成init進(jìn)程(1號(hào)進(jìn)程)
    其他進(jìn)程有當(dāng)前進(jìn)程通過系統(tǒng)調(diào)用fork建立

    子進(jìn)程執(zhí)行自己的功能

    exce函數(shù)族
    功能:

    • 裝入一個(gè)指定的可執(zhí)行程序運(yùn)行
    • 使子進(jìn)程具有和父進(jìn)程完全不同的新功能

    步驟:

    • 根據(jù)文件名找到相應(yīng)的可執(zhí)行文件
    • 可執(zhí)行文件的內(nèi)容填入子程序的地址空間
    • exce調(diào)用成功就會(huì)進(jìn)入新進(jìn)程且不再返回
    • 調(diào)用失敗返回-1,繼續(xù)在克隆來的地址空間中從調(diào)用點(diǎn)向下執(zhí)行

    進(jìn)程阻塞 wait

    進(jìn)程立即阻塞自己,如果它找到一個(gè)已經(jīng)成為僵尸的子進(jìn)程,wait就會(huì)收集這個(gè)子進(jìn)程的信息,并把它徹底銷毀后返回

    進(jìn)程終結(jié)exit

    進(jìn)程釋放自己占用的資源并匯報(bào)給父進(jìn)程
    調(diào)用exit后變?yōu)榻┦瑧B(tài),幾乎所有的內(nèi)存空間,保存PCB信息供wait收集

    進(jìn)程的休眠sleep

    Windows進(jìn)程

    進(jìn)程是被加載到內(nèi)存的,正在運(yùn)行的應(yīng)用程序?qū)嵗?br /> 進(jìn)程由內(nèi)核對(duì)象和地址空間所組成

    • 內(nèi)核對(duì)象PCB
    • 地址空間
      包括代碼、數(shù)據(jù)、堆、棧、堆上動(dòng)態(tài)分配的空間

    windows創(chuàng)建進(jìn)程creatProcess

    過程:

    • 創(chuàng)建進(jìn)程內(nèi)核對(duì)象,創(chuàng)建虛擬地址空間
    • 裝載exe和、或dll的代碼和數(shù)據(jù)到地址空間中
    • 創(chuàng)建主線程和線程內(nèi)核對(duì)象
    • 啟動(dòng)主線程,進(jìn)入主函數(shù)

      有一個(gè)非常有趣的例子,見我另一篇博客

    Windows結(jié)束進(jìn)程

    主函數(shù)返回
    ExitProcess
    TerminateProcess

    補(bǔ)充:守護(hù)進(jìn)程daemon

    守護(hù)進(jìn)程編程:

    pid = fork(); //創(chuàng)建子進(jìn)程 if(pid>0) eixt(0); //退出父進(jìn)程 setsid(); //讓進(jìn)程脫離控制終端 chdir("/"); //避免原工作目錄不能被卸載 umake(0); //文件權(quán)限掩碼設(shè)置0 for(int i = 0;i<MAXFILE;i++)close(i); //關(guān)閉繼承自父進(jìn)程的文件 《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

    總結(jié)

    以上是生活随笔為你收集整理的操作系统(Linux与Windows)的进程管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。