操作系統原理之進程管理(第二章)

来源:https://www.cnblogs.com/jalja/archive/2019/10/06/11628814.html
-Advertisement-
Play Games

系統調⽤是⼀群預先定義好的模塊; 提供⼀條管道讓應⽤程式能由此到核⼼程式的服務; 系統調⽤是系統程式與⽤戶程式之間的接⼝ ...


一、進程的描述

程式的順序執⾏: 先進⼊記憶體的程式先執⾏,在⼀個程式執⾏完畢之前,不能執⾏其他程式。

 

 

 特點:順序性、 封閉性 、可再現性

程式的併發執⾏:程式併發執⾏是指在同⼀時間間隔內運⾏多個程式。⼀個程式執⾏結束 前,可以運⾏其他程式

  • 巨集觀並行:用戶看到多個程式同時向前推進
  • 微觀串列:任意時刻一個CPU上只有一個程式在執行

特點:

  • 間斷性:程式在CPU上執⾏時,是時斷時續的
  • 失去封閉性: 系統的狀態不再只對正在執⾏的程式可⻅
  • 不可再現性: 同⼀個程式在輸⼊相同的情況下多次運⾏,可能出現不同的結果

使用12306買票時,每個用戶提交訂單,餘票都會減少,這體現了 程式併發執行的(失去封閉性)特點

********************************進程**********************************

程式:具有獨立功能的 一組指令的集合;靜態的、永久的

進程:允許併發執行的程式在某個 數據集合上的運行過程;進程是由正文段、用戶數據段及進程式控制制塊共同組成的執行環境;動態的、暫時的

  • 正文段:存放被執⾏的機器指令
  • 用戶數據段:存放⽤戶數據
  • 進程式控制制塊:  存放進程的運⾏環境

進程的特征:

  • 併發性: 多個進程實體能在一段時間間隔內同時運行 ,併發性是進程和現代操作系統的重要特征
  • 動態性:進程是實體的執行過程(執⾏程式—>創建進程 ;獲得CPU—>執⾏指令; 運⾏中⽌—>被撤銷)
  • 獨立性:獨⽴運⾏和資源調度的基本單位
  • 非同步性: 進程的執⾏時斷時續,何時執⾏、何時暫停都⽆法預知
  • 結構特征 :進程實體包括⽤戶正⽂段、⽤戶數據段和進程式控制制塊(PCB)

進程與程式的聯繫:

  • 進程是程式的的一次執行
  • 一個程式可以對應多個進程
  • 同一個程式可以在不同的數據集合上運行,構成不同的進程

進程式控制制塊:進程式控制制塊是進程實體的⼀部分,是操作系統中最重要的數據結構;進程式控制制塊中記錄了操作系統所需要的、⽤於描述進程及控制進程運⾏所需的全部信息

  • 進程標識符信息: ⽤於唯⼀標識⼀個進程
  • 處理機狀態信息:通用寄存器 、指令計數器、 程式狀態字PSW、 用戶棧指針
  • 進程調度信息:包括進程狀態信息、進程優先順序 和進程調度所需的其他信息
  • 進程式控制制信息:包括程式和數據的地址、進程同步和 通信機制、資源清單,以及鏈接指針

進程的狀態:

 

 

 進程的組織方式:鏈接⽅式、 索引⽅式 、進程隊列

  • 鏈接⽅式:把系統中具有相同狀態的進程式控制制塊PCB⽤其中的鏈接字連成⼀個隊列
  • 索引⽅式:系統根據所有進程的狀態,建⽴索引表,索引表的每⼀個表項指向⼀個PCB物理塊
  • 進程隊列:把具有相同狀態的進程式控制制塊⽤隊列組織起來

二、 進程的控制

創建:⽤戶登錄、 作業調度 、提供服務、 應⽤請求 時需要創建進程

創建新進程的步驟

  • 1.申請空⽩PCB
  • 2.為新進程分配資源
  • 3.初始化進程式控制制塊
  • 4.將新進程插⼊到就緒隊列

 

阻塞:請求系統服務 、啟動某種操作 、新數據尚未到達、 ⽆新⼯作可做 進入阻塞狀態

  • 1.將進程的狀態改為阻塞態
  • 2.將進程插⼊相應的阻塞隊列
  • 3.轉到進程調度程式,從就緒隊列中選擇進程為其分配CPU

喚醒

  • 1.將進程從阻塞隊列中移出
  • 2.將進程狀態由阻塞態改為就緒態
  • 3.將進程插⼊就緒隊列

終止

  • 1.從進程PCB中讀進程狀態
  • 2.若進程正在執⾏,則終⽌進程的執⾏
  • 3.釋放資源
  • 4.將終⽌進程的PCB移出

三、操作系統內核

操作系統管理電腦系統資源,提供⽅便的接⼝,擴充硬體的功能等

操作系統內核是電腦硬體的第⼀次擴充 與硬體關係密切

內核的功能:

  • ⽀撐功能:中斷處理、時鐘管理、原語操作
  • 資源管理功能 : 進程管理、存儲管理、設備管理

什麼是中斷

中斷是改變處理器執⾏指令順序的⼀種事件;出現中斷時,電腦停⽌現在程式的運⾏,轉向對這些中斷事件的處理,處 理結束後再返回到現⾏程式的間斷處

為什麼需要中斷

引⼊中斷機制後,CPU可以與其他設備並⾏⼯作,能有效提⾼CPU的利⽤率

 

***********************************時鐘******************************************

 

 時鐘的重要性:時鐘是電腦系統的脈搏,電腦的很多活動都是由定時測量來驅動的

時鐘的應用:

  • 屏幕保護 
  • 時間顯示
  • ⽂件時間標記 
  • CPU分配給進程的時間

電腦系統中的時鐘: 實時時鐘RTC(CMOS時鐘)、 OS時鐘

 

 

 OS時鐘產生於PC主板上的定時/計數晶元,在開機時有效,由操作系統控制。

電腦開機加電後,操作系統通過BIOS獲取當前( RTC時鐘)的值作為系統時間

操作系統的 時鐘機制:  依靠時鐘硬體和 時鐘驅動程式來保存當前的⽇期和時間 、維持定時器  

時鐘驅動程式的功能:

  • 1)維護⽇期和時間
  • 2)遞減當前進程在⼀個時間⽚內的剩餘執⾏時間,防⽌運⾏超時
  • 3)對CPU的使⽤情況記賬
  • 4)遞減報警計數器

*************************系統調⽤************************

系統調⽤:系統調⽤是⼀群預先定義好的模塊; 提供⼀條管道讓應⽤程式能由此到核⼼程式的服務; 系統調⽤是系統程式與⽤戶程式之間的接⼝

⽤戶空間:⽤戶進程所處的地址空間

⽤戶態執⾏:CPU執⾏⽤戶空間的代碼時,稱該進程處於⽤戶態執⾏

系統空間:含有⼀切系統核⼼代碼的地址空間

系統態執⾏:CPU執⾏系統核⼼代碼時,稱該進程處於系統態執⾏

系統調用與一般函數調用的區別如下:

  • 1) 系統調用運行在系統態,而一般函數運行在用戶態。
  • 2) 系統調用與一般函數調用的執行過程不同。系統調用執行時,當前進程被中 斷,由系統找相應的系統調用子程式,併在系統態下執行,執行結果返回進程。
  • 3) 系統調用要進行“中斷處理”,比一般函數調用多了一些系統開銷。

 四、進程同步

同步機制:保證在多任務共用系統資源的情況下,程式執⾏能得到正確的結果 

多道程式環境下 進程之間的關係

  • 資源共用關係:保證各進程以互斥的⽅式訪問 臨界資源
  • 相互合作關係:保證相互合作的各進程協調執⾏

臨界資源:必須以互斥⽅式訪問的共用資源稱為臨界資源

臨界區:進程中訪問臨界資源的那段代碼稱為臨界區

同步機制:保證在多任務共用系統資源的情況下,程式執⾏能得到正確的結果

同步機制應遵循的準則:

  • 空閑讓進 :沒有進程處於臨界區,應允許⼀個請求進⼊臨界區的進程進⼊
  • 忙則等待:臨界區已有進程,其他試圖進⼊臨界區的進程必須等待
  • 有限等待:對於要訪問臨界資源的進程,應保證有限時間內進⼊臨界區
  • 讓權等待:申請不到訪問權,應釋放處理機,以免浪費CPU資源

同步機制的方法:信號量機制、

******************************信號量機制****************************

信號量機制:⽤信號量的取值來表示資源的使⽤狀況,以此為基礎實現進程同步;信號量(某種類型的變數,如整型、記錄型)

信號量機制分類:

  • 整型信號量機制
  • 記錄型信號量機制
  • AND型信號量機制

整型信號量機制:整型信號量是表示共用資源狀態且只能由特殊的原⼦操作改變的整型量;

原理:定義⼀個整型變數,⽤該變數的值來標記資源的使⽤情況,初始值為1

整型信號量 >=0 有資源可⽤  ;整型信號量 <=0 資源忙,需等待

整型信號量機制中,用於申請資源的是 wait 原子操作

整型信號量機制中,用於釋放資源的是 signal 原子操作

 

 

 

 

 

 記錄型信號量機制:原理:定義⼀個記錄型變數,⽤該變數的值來標記資源的使⽤情況

s.value>=0時,s.value的值表示資源數量; s.value<0時,s.value的絕對值表示等待隊列中 阻塞進程的數量

 

 

 

***********************管程*******************************

管程是描述共用資源的數據結構和在數據結構上的共用資源管理程式的集合。 包括變數的定義、變數的初始化代碼,以及管理共用資源的過程

管程的說明: 管程是可供程式員調⽤的軟體包; 每次只有⼀個進程調⽤管程執⾏,任意時刻管程中只有⼀個活躍進程; 管程是⼀種編程語⾔的構件

五、進程通信

進程通信機制:

  • 共用存儲器系統(⾼級通信機制 ):相互通信的進程共用某些數據結構或共用存儲區 
  • 消息傳遞系統(⾼級通信機制 ):進程間通過操作系統提供的⼀組通信程式傳遞消息
  • 管道通信(⾼級通信機制 ):進程間通過管道(鏈接讀寫進程的特殊⽂件)進⾏信息通信
  • 消息緩衝隊列:利⽤消息緩衝區、發送原語和接收原語實現信息通信

六、 線程

線程的概念:線程是進程中可以 獨立執行的子任務;線程是進程中的一個實體,是被系統獨立調度和分派的基本單位

線程只擁有在運行中必需的資源,包括程式計數器、一組寄存器和 棧,但它可與同一進程的其他線程共用進程所擁有的全部資源。

在支持線程的操作系統中,線程 是被系統獨立調度和分派的基本 單位,而進程 則是資源分配的基本單位。

線程分類:

  • 內核級線程:依賴於內核
  • 用戶級線程 不依賴內核

 

 

線程式控制制塊:

  • 每一個線程都由一個數據結構表示,包括它的基本狀態等,這個數 據結構就是線程式控制制塊TCB。
  • TCB記錄了操作系統需要的、用於描述線程情況及控制線程運行所 需的全部信息

線程與進程的關係

  • 1、資源和調度。線程是程式執行的基本單位,進程是擁有資源的基本單位。
  • 2. 地址空間資源。不同進程的地址空間是相互獨立的,而同一進程中的各 線程共用同一地址空間。
  • 3. 通信關係。進程之間的通信必須使用操作系統提供的進程間通信機制, 而同一進程中的各線程間可以通過直接通信。
  • 4. 併發性。多進程之間可以併發執行,多線程之間也可以併發執行。
  • 5. 系統開銷。線程切換的開銷比進程切換的開銷小

 

 

管程的說明 管程是可供程式員調⽤的軟體包 每次只有⼀個進程調⽤管程執⾏,任意時刻管程中只有⼀個活躍進程 管程是⼀種編程語⾔的構件


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 因為將signalr作為單獨的站點,此處需要建立兩個項目,一個專門用於signalr作為推送項目,一個客戶端(實際的業務項目) ## 基礎知識速覽 ### Clients對象屬性 | 屬性 | 描述 | : | : | All | 在所有連接的客戶端上調用方法 | Caller | 在調用集線器方法 ...
  • 構建ML模型的步驟 現在我們已經看瞭解到了一些ML應用程式的例子,問題是,我們如何構建這樣的ML應用程式和系統? 下圖總結了我們使用ML開發應用程式的方法,我們將在下麵更詳細地討論這個問題: 如上圖所示,建立學習模型的步驟如下: 問題定義:任何項目的第一步不僅是理解我們想要解決的問題,也定義了我們如 ...
  • ## 介紹 ASP.NET Core SignalR 是一個開源代碼庫,它簡化了嚮應用添加實時 Web 功能的過程。 實時 Web 功能使伺服器端代碼能夠即時將內容推送到客戶端。 SignalR 的適用對象: - 需要來自伺服器的高頻率更新的應用。 例如:游戲、社交網路、投票、拍賣、地圖和 GPS ...
  • ==>>點擊查看本系列文章目錄 首先看一下幾種註冊中心: 最老的就是Zookeeper了, 比較新的有Eureka,Consul 都可以做註冊中心。可以自行搜索對比三者的優缺點。 Zookeeper 最開始就是hadoop大家族中的一員,用於做協調的框架,後來已經是apache的子項目了。 幾年前大 ...
  • 我們在寫JavaScript程式的時候,有一個函數很有趣,eval(),這個方法非常有趣,他可以編譯他內部的字元串,並將字元串按照JS代碼執行,例如eval(‘alert(“message”)’),執行的結果就是彈窗列印出message這個信息。如下圖 最近我在用C#寫一個功能的時候的時候也遇到相似 ...
  • 挑了幾個好點的問題彙總到博客,請多關照! 博客網站分享到各網站功能 微軟.NET Core的cookie問題已經修複,cookie自動過期問題 請求第三方介面報錯,提示Access-Control-Allow-Origin UEditor上傳圖片失敗問題,.NET Core版的UEditor單張圖片 ...
  • 打開securecrt的跟蹤選項,觀察輸出信息來診斷解決方法: 1)首先,將全局設置中,GSSAPI屬性由自動改為GSSAPI 2)其次,將不支持的多餘的密鑰交換去掉 3)最後,可以將服務端的sshd配置文件/etc/ssh/sshd_config中useDNS改為no,並重啟sshd服務我昨晚上述... ...
  • 前面已經分析了記憶體管理框架的構建實現過程,有部分內容未完全呈現出來,這裡主要做個補充。 如下圖,這是前面已經看到過的linux物理記憶體管理框架的層次關係。 現著重分析一下各個管理結構體的成員功能作用。 struct zone node_zones[MAX_NR_ZONES]; ——存放該pg_dat ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...