【Linux學習筆記】初識進程概念和進程PCB

【Linux學習筆記】初識馮諾依曼體系和進程PCB

🔥個人主頁大白的編程日記

🔥專欄Linux學習筆記


文章目錄

  • 【Linux學習筆記】初識馮諾依曼體系和進程PCB
    • 前言
    • 一. 馮諾依曼體系結構
      • 1.1 關于馮諾依曼體系的要點:
    • 二. 操作系統(Operating System)
      • 2.1 概念
      • 2.2 設計OS的目的
      • 2.3 核心功能
      • 2.4 如何理解“管理”
      • 2.5 系統調用和庫函數概念
    • 三. 進程
      • 3.1 基本概念與基本操作
        • 3.1.2 描述進程 - PCB
        • 3.1.3 task_struct
        • 3.1.5 查看進程
        • 3.1.6 通過系統調用獲取進程標識符
        • 3.1.7 通過系統調用創建進程 - `fork`初識
    • 后言

前言

哈嘍,各位小伙伴大家好!上期我們講了gdb和cgdb 今天我們講的是初識馮諾依曼體系和進程PCB。話不多說,我們進入正題!向大廠沖鋒!
在這里插入圖片描述

一. 馮諾依曼體系結構

我們常見的計算機,如筆記本,以及不常見的計算機,如服務器,大部分都遵守馮諾依曼體系。計算機由以下硬件組件組成:
在這里插入圖片描述

  • 輸入單元:包括鍵盤、鼠標、掃描儀、寫字板等
  • 中央處理器(CPU):含有運算器和控制器等
  • 輸出單元:顯示器、打印機等

1.1 關于馮諾依曼體系的要點:

  • 存儲器指的是內存
  • CPU只能對內存進行讀寫,不能直接訪問外設(輸入或輸出設備)
  • 外設要輸入或輸出數據,只能通過內存進行交互
  • 所有設備都只能直接和內存打交道

關于馮諾依曼,必須強調幾點:

  • 這里的存儲器指的是內存
  • 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)
  • 外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。
  • 一句話,所有設備都只能直接和內存打交道。

📌 注意:
對馮諾依曼的理解,不能停留在概念上,要深入到對軟件數據流理解上,請解釋,從你登錄上qq開始和某位朋友聊天開始,數據的流動過程。從你打開窗口,開始給他發消息,到他的消息之后的數據流動過程。如果是在qq上發送文件呢?

二. 操作系統(Operating System)

在這里插入圖片描述

2.1 概念

操作系統(OS)是計算機系統中一個基本的程序集合,包括:

  • 內核(進程管理、內存管理、文件管理、驅動管理)
  • 其他程序(如函數庫、shell程序等)

2.2 設計OS的目的

  • 對下:與硬件交互,管理所有軟硬件資源
  • 對上:為用戶程序(應用程序)提供良好的執行環境


2.3 核心功能

操作系統在整個計算機軟硬件架構中的定位是:一款存正“搞管理”的軟件

2.4 如何理解“管理”

  • 管理的例子:學生、輔導員、校長
  • 描述被管理對象
  • 組織被管理對象
    在這里插入圖片描述
    總結
    計算機管理硬件:
  • 1.描述起來,用struct結構體
  • 2.組織起來,用鏈表或其他高效的數據結構

2.5 系統調用和庫函數概念

  • 在開發角度,操作系統對外會表現為一個整體,但是會暴露自己的部分接口,供上層開發使用,這部分由操作系統提供的接口,叫做系統調用
  • 系統調用在使用上,功能比較基礎,對用戶的要求相對也比較高,所以,有心的開發者可以對部分系統調用進行適度封裝,從而形成庫,有了庫,就很有利于更上層用戶或者開發者進行二次開發。

承上啟下

那在還沒有學習進程之前,就問大家,操作系統是怎么管理進行進程管理的呢?很簡單,先把進程描述起來,再把進程組織起來!

在這里插入圖片描述

三. 進程

3.1 基本概念與基本操作

  • 課本概念:程序的一個執行實例,正在執行的程序等
  • 內核觀點:擔當分配系統資源(CPU時間、內存)的實體
3.1.2 描述進程 - PCB

  1. 基本概念
  • 進程信息被放在一個叫做進程控制塊(PCB)的數據結構中,是進程屬性的集合
  • 課本上稱之為PCB(processcontrolblock),在Linux操作系統下的PCB是:task_struct。
  1. task_struct-PCB的一種
  • 在Linux中描述進程的結構體叫做task_struct
  • task_struct是Linux內核的一種數據結構,它會被裝載到RAM(內存)里并且包含著進程的信息。
3.1.3 task_struct
  1. 內容分類:
  • 標示符:描述本進程的唯一標示符,用來區別其他進程。
  • 狀態:任務狀態,退出代碼,退出信號等。
  • 優先級:相對于其他進程的優先級。
  • 程序計數器:程序中即將被執行的下一條指令的地址。
  • 內存指針:包括程序代碼和進程相關數據的指針,還有和其他進程共享的內存塊的指針
  • 上下文數據:進程執行時處理器的寄存器中的數據[休學例子,要加圖CPU,寄存器]。
  • I/0狀態信息:包括顯示的I/O請求,分配給進程的I/0設備和被進程使用的文件列表。
  • 記賬信息:可能包括處理器時間總和,使用的時鐘數總和,時間限制,記賬號等。
  • 其他信息
  • 具體詳細信息后續會介紹

  1. 組織進程
    所有運行在系統里的進程都以task_struct鏈表的形式存在于內核中。
3.1.5 查看進程
  1. 進程信息可以通過/proc系統文件夾查看。例如,獲取PID為1的進程信息,查看/proc/1文件夾。
  2. 大多數進程信息也可以通過topps等用戶級工具獲取。

3.1.6 通過系統調用獲取進程標識符
  • 進程id(PID)
  • 父進程id(PPID)
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{printf("pid: %d\n", getpid());printf("ppid: %d\n", getppid());return 0;
}


在這里插入圖片描述

3.1.7 通過系統調用創建進程 - fork初識
  • 運行 man fork 認識fork
  • fork有兩個返回值:
  1. 父進程返回值為子進程的PID
  2. 子進程返回值為0
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int ret = fork();printf("hello proc : %d!, ret: %d\n", getpid(), ret);sleep(1);return 0;
}
  • fork之后通常使用if分流
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{int ret = fork();if(ret < 0){perror("fork");return 1;}else if(ret == 0){ // childprintf("I am child : %d!, ret: %d\n", getpid(), ret);}else{ // fatherprintf("I am father : %d!, ret: %d\n", getpid(), ret);}sleep(1);return 0;
}

后言

這就是初識馮諾依曼體系和進程PCB。大家自己好好消化!今天就分享到這! 感謝各位的耐心垂閱!咱們下期見!拜拜~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75903.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75903.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75903.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

7.3 主成分分析(PCA)

一、協方差矩陣 這節是介紹 SVD 在統計和數據分析中的一個主要應用&#xff0c;即主成分分析。例子來自于人類的基因組&#xff0c;臉部識別和金融&#xff0c;目的是理解一個大的數據矩陣&#xff08;測量值&#xff09;。對于 n n n 個樣本&#xff0c;我們每個測量 m m m…

anaconda安裝使用+pytorch環境配置(cpu)+pycharm環境配置(詳細教程)

一、anaconda下載 1.anaconda官網嘗試下載&#xff1a; 官網網址&#xff1a;Anaconda | Built to Advance Open Source AI 1.進入官網 2.點擊Products->Distribution&#xff0c;跳過注冊進入下載頁面 3.選擇系統下載 2.清華鏡像下載 1.網址&#xff1a;Index of /anac…

Unity3D仿星露谷物語開發34之單擊Drop項目

1、目標 當在道具欄中選中一個Item時&#xff0c;點擊地面就可以實現Item的drop操作&#xff0c;每點擊一次就drop一次&#xff0c;直到道具欄中Item數量不夠。 這樣的好處&#xff1a;避免每次Drop都從道具欄中拖拉Item&#xff0c;通過點擊這種操作可以更加高效。 方法&am…

java 正則表達式優化

1&#xff0c;什么是正則表達式 正則表達式使用一些特定的元字符來檢索、匹配以及替換符合規則的字符串。 構造正則表達式語法的元字符&#xff0c;由普通字符、標準字符、限定字符&#xff08;量詞&#xff09;、定位字符&#xff08;邊界字符&#xff09;組成 普通字符 字母[…

檢測鏈表是否有環, 動畫演示, Floyd判圈算法擴展應用

力扣原題鏈接: 141. 環形鏈表 - 力扣&#xff08;LeetCode&#xff09; 哈希表 檢測環形鏈表, 直觀的思路就是使用哈希表, 遍歷這個鏈表, 將訪問過的節點加入到哈希表中, 如果遍歷過程中發現節點已經存在于哈希表中, 則說明鏈表有環. 復雜度分析: 時間復雜度: O(N), 最壞情…

linux專題3-----linux上鏈接遠程mysql

要在 Ubuntu 上連接遠程 MySQL 數據庫&#xff0c;你可以使用 MySQL 客戶端工具或者其他數據庫管理工具&#xff0c;如 phpMyAdmin 或 MySQL Workbench。以下是使用 MySQL 命令行工具連接遠程 MySQL 的步驟&#xff1a; 確保已安裝 MySQL 客戶端 首先&#xff0c;確保你的 Ub…

webpack js 逆向 --- 個人記錄

網站 aHR0cDovL2FlcmZheWluZy5jb20v加密參數 參數加密位置 方法&#xff1a; 1. 構造自執行函數 !function(e) {// 加載器 }(// 模塊1&#xff1b;// 模塊2 )2. 找到js的加載器 3. 把上述代碼放入第一步構造的自執行函數(完整扣取一整個加載器里的代碼)&#xff0c;并用一…

用HTML.CSS.JavaScript實現一個貪吃蛇小游戲

目錄 一、引言二、實現思路1. HTML 結構2. CSS 樣式3. JavaScript 邏輯 三、代碼實現四、效果展示 一、引言 貪吃蛇是一款經典的小游戲&#xff0c;曾經風靡一時。今天&#xff0c;我們將使用 HTML、CSS 和 JavaScript 來實現一個簡單的貪吃蛇小游戲。通過這個項目&#xff0c…

基于α-β剪枝的含禁手AI五子棋

前言&#xff1a; 正常的五子棋應當設有禁手規則&#xff0c;否則先手黑棋必贏&#xff0c;基于此點設計出一款包含禁手的AI五子棋項目&#xff0c;該項目代碼已在github開源&#xff0c;感興趣的友友可以自取試玩:ace-trump-tech/AI-Gomoku-with-Prohibition-Moves: 含禁手的A…

Spring Boot 集成 Redis中@Cacheable 和 @CachePut 的詳細對比,涵蓋功能、執行流程、適用場景、參數配置及代碼示例

以下是 Cacheable 和 CachePut 的詳細對比&#xff0c;涵蓋功能、執行流程、適用場景、參數配置及代碼示例&#xff1a; 1. 核心對比表格 特性CacheableCachePut作用緩存方法的返回結果&#xff0c;避免重復計算執行方法并更新緩存&#xff0c;不覆蓋原有緩存執行流程緩存命中…

可以使用費曼學習法閱讀重要的書籍

書本上畫了很多線&#xff0c;回頭看等于沒畫出任何重點。 不是所有的觸動都是有效的。就像你曾經看過很多好文章&#xff0c;當時被觸動得一塌糊涂&#xff0c;還把它們放進了收藏夾&#xff0c;但一段時間之后&#xff0c;你就再也記不起來了。如果讓你在一本書上畫出令自己…

Nginx之https重定向為http

為了將Nginx中443端口的請求重定向到80端口&#xff0c;你可以按照以下步驟進行操作&#xff1a; ?確認Nginx已經正確安裝并運行?&#xff1a; 確保Nginx服務已經在你的系統上安裝并運行。你可以通過運行以下命令來檢查Nginx的狀態&#xff08;具體命令可能因操作系統而異&a…

【ARTS】【LeetCode-2873】有序三元組中的最大值!

前言 僅做學習使用&#xff0c;侵刪 什么是ARTS&#xff1f; 算法(Algorithm): 每周至少一道LeetCode算法題&#xff0c;加強編程訓練和算法學習 閱讀(Review)&#xff1a; 閱讀并點評至少一篇英文技術文章&#xff0c;提高英文水平 技巧 (Tip)&#xff1a;學習至少一個技…

基于spring boot 鮮花銷售系統PPT(源碼+lw+部署文檔+講解),源碼可白嫖!

課題意義 隨著網絡不斷的普及發展&#xff0c;鮮花銷售系統依靠網絡技術的支持得到了快速的發展&#xff0c;首先要從用戶的實際需求出發&#xff0c;通過了解用戶的需求開發出具有針對性的信息管理系統&#xff0c;利用目前網絡給用戶帶來的方便快捷這一特點對系統進行調整&am…

Redis常用的數據結構及其使用場景

字符串(String) string 是 redis 最基本的類型&#xff0c;你可以理解成與 Memcached 一模一樣的類型&#xff0c;一個 key 對應一個 value。 string 類型是二進制安全的。意思是 redis 的 string 可以包含任何數據&#xff0c;比如jpg圖片或者序列化的對象。 string 類型是 R…

設計模式簡述(五)建造者模式

建造者模式 描述基本要素協調類使用 描述 建造者模式屬于創造型設計模式。 通常用于構建一系列復雜對象&#xff0c;這些對象有一定的共性。 我們可以通過不同的建造者&#xff0c;組裝不同的對象 與工廠模式的區別&#xff0c;建造者模式更側重與基于基礎構件組裝而非直接創…

Java基礎 4.6

1.成員方法練習 //編寫類A&#xff1a;判斷一個數是奇數還是偶數&#xff0c;返回boolean //根據行、列、字符打印對應行數和列數的字符&#xff0c;比如&#xff1a;行4 列4 字符# 則打印相應的效果 public class MethodExercise01 {public static void main(String[] args) …

前端快速入門學習4——CSS盒子模型、浮動、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"這一術語是用來設計和布局時使用。 CSS盒模型本質上是一個盒子&#xff0c;封裝周圍的HTML元素&#xff0c;它包括&#xff1a;邊距&#xff0c;邊框&#xff0c;填充&#xff0c…

瑞數信息發布《BOTS自動化威脅報告》,揭示AI時代網絡安全新挑戰

近日&#xff0c;瑞數信息正式發布《BOTS自動化威脅報告》&#xff0c;力求通過全景式觀察和安全威脅的深度分析&#xff0c;為企業在AI時代下抵御自動化攻擊提供安全防護策略&#xff0c;從而降低網絡安全事件帶來的影響&#xff0c;進一步增強業務韌性和可持續性。 威脅一&am…

Docker設置代理

目錄 前言創建代理文件重載守護進程并重啟Docker檢查代理驗證 前言 拉取flowable/flowable-ui失敗&#xff0c;用DaoCloud源也沒拉下來&#xff0c;不知道是不是沒同步。索性想用代理拉鏡像。在此記錄一下。 創建代理文件 創建docker代理配置 sudo mkdir -p /etc/systemd/s…