Linux系統調用編程

目錄

一. 理解進程和線程的概念。并在Linux系統下進行相應操作

1.1概念

1.1.1進程(Process)

1.1.2 線程(Thread)

1.2操作

1.2.1用 ps -a 命令查看系統中各進程的編號pid?

1.2.2用kill 命令終止一個進程pid

二. 解釋Linux的“虛擬內存管理”,它與stm32中的 真實物理內存(內存映射)有什么區別?

2.1核心區別

2.2地址空間

2.3內存分配

2.4典型特征

2.5適用場景

三. 理解 Linux系統調用函數 fork()、wait()、exec() 等的含義和調用方法 。

3.1用putty或xterminal等工具軟件進行操作。

3.1.1打開xterminal,連接服務器

3.1.2在home目錄下創建工作目錄

3.1.3使用vi創建C程序文件

3.1.4按i進入編輯模式,輸入以下代碼:

3.1.5使用gcc編譯和運行程序

3.2在各小組的樹莓派中,也手動創建組員的賬號,組員在各自的賬號+home目錄下,完成同樣的Linux系統調用函數練習。

3.2.1登錄樹莓派,打開端口進行賬號密碼的創建

3.2.2登錄對應賬號后進行編輯程序然后運行


一. 理解進程和線程的概念。并在Linux系統下進行相應操作

1.1概念

1.1.1進程(Process)

? ? ? 定義

? ? ? ? ? ? 進程是操作系統進行資源分配和調度的基本單位

? ? ? ? ? ? 是程序的一次執行過程,具有獨立的內存空間

? ? ? 核心特征

? ? ? ? ? ? 獨立性:每個進程有獨立的地址空間

? ? ? ? ? ? 動態性:進程有創建、執行、暫停、終止等生命周期

? ? ? ? ? ? 并發性:多個進程可以并發執行

? ? ? ? ? ? 資源分配單位:CPU、內存等資源以進程為單位分配

? ? ? ?進程組成

? ? ? ? ? ? 代碼段(text)

? ? ? ? ? ? 數據段(data)

? ? ? ? ? ? 堆(heap)

? ? ? ? ? ? 棧(stack)

? ? ? ? ? ? 進程控制塊(PCB)

? ? ? ?Linux中的進程

ps -aux  # 查看系統所有進程
top      # 動態查看進程狀態

1.1.2 線程(Thread)

? ? ? ?定義

? ? ? ? ? ? 線程是進程內的執行單元,是CPU調度的基本單位

? ? ? ? ? ?一個進程可以包含多個線程,共享進程的資源

? ? ? 核心特征

? ? ? ? ? ?輕量級:創建/銷毀開銷比進程小

? ? ? ? ? ?共享性:同一進程的線程共享內存和資源

? ? ? ? ? ?獨立性:有獨立的執行路徑和棧空間

? ? ? ? ? ?并發性:多線程可并發執行

? ? ? 線程組成

? ? ? ? ? ?線程ID

? ? ? ? ? ?程序計數器

? ? ? ? ? ?寄存器集合

? ? ? ? ? ?棧空間

? ? ? Linux中的線程

ps -T -p <PID>  # 查看特定進程的線程
top -H          # 顯示線程信息

1.2操作

1.2.1用 ps -a 命令查看系統中各進程的編號pid?

1.2.2用kill 命令終止一個進程pid

因為終止一個進程需要權限所以如果之輸入

kill 240932

并不會成功

這里就需要輸入來獲得權限,就可以了

sudo kill 2409326

然后再用ps -a 命令查看系統中各進程的編號pid可以發現,已經成功終止

二. 解釋Linux的“虛擬內存管理”,它與stm32中的 真實物理內存(內存映射)有什么區別?

2.1核心區別

? ? ? Linux使用虛擬內存(通過MMU實現地址轉換),STM32使用物理內存直接映射(無MMU)
? ? ? Linux有內存保護機制(用戶/內核態隔離),STM32所有代碼均可訪問全部內存

2.2地址空間

? ? ?Linux:每個進程有獨立的4GB(32位)虛擬地址空間
? ? ?STM32:所有程序共享固定的物理地址空間(如Flash 0x08000000,SRAM 0x20000000)

2.3內存分配

? ? ?Linux:動態分配(malloc→brk/sbrk/mmap)
? ? ?STM32:靜態分配(鏈接腳本確定,需手動管理)

2.4典型特征

? ? ?Linux支持:
? ? ? ? ?內存超額使用(Swap)
? ? ? ? ?寫時復制(COW)
? ? ? ? ?內存共享(共享庫)
? ? STM32特征
? ? ? ? 確定性訪問(無地址轉換延遲)
? ? ? ? 直接硬件操作(寄存器映射)
? ? ? ? 無內存碎片風險(靜態分配)

2.5適用場景

? ? ?選擇Linux虛擬內存:需要多進程隔離、運行大型程序、內存需求超過物理內存時
? ? ?選擇STM32物理映射:實時控制系統、資源受限(<1MB內存)場景、需要直接操作寄存器時

三. 理解 Linux系統調用函數 fork()、wait()、exec() 等的含義和調用方法 。

3.1用putty或xterminal等工具軟件進行操作。

? ? ? 遠程登錄自己被分配的阿里云服務器Ubuntu系統的賬號(見下面附件),在自己的home目錄下,創建一個作業子目錄,然后學習使用vi 編輯一個c代碼,gcc編譯,實現一個系統調用函數的例子

3.1.1打開xterminal,連接服務器

3.1.2在home目錄下創建工作目錄

cd ~//判斷是否在home目錄
mkdir week6//創建一個名為week6的子目錄
cd week6//進入子目錄week6

3.1.3使用vi創建C程序文件

vi process.c//創建一個名為process.c的c文件并進入

3.1.4按i進入編輯模式,輸入以下代碼:

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main() {printf("=== 系統調用演示程序 ===\n");printf("主進程PID: %d\n", getpid());// 1. fork()示例pid_t pid = fork();if (pid < 0) {perror("fork失敗");return 1;}if (pid == 0) {// 子進程代碼塊printf("\n子進程運行中 (PID: %d)\n", getpid());// 2. exec()示例 - 執行ls命令printf("準備執行ls命令...\n");execl("/bin/ls", "ls", "-l", NULL);// 如果exec執行成功,以下代碼不會運行perror("exec失敗");return 1;} else {// 父進程代碼塊printf("\n父進程 (PID: %d) 創建了子進程 (PID: %d)\n", getpid(), pid);// 3. wait()示例printf("父進程等待子進程結束...\n");int status;wait(&status);if (WIFEXITED(status)) {printf("\n子進程退出狀態: %d\n", WEXITSTATUS(status));}}printf("程序執行結束\n");return 0;
}

按ESC鍵退出編輯模式,輸入:wq保存并退出vi。

3.1.5使用gcc編譯和運行程序

gcc process.c -o week6//prcess.c為創建的c文件名稱 week6為之前創建的子目錄名稱
./week6

運行結果如下:

3.2在各小組的樹莓派中,也手動創建組員的賬號,組員在各自的賬號+home目錄下,完成同樣的Linux系統調用函數練習。

3.2.1登錄樹莓派,打開端口進行賬號密碼的創建

創建組

sudo groupadd team//team為組的名稱

創建賬號

sudo useradd -m -G team -s /bin/bash maxy//maxy為創建的用戶名稱

設置對應賬戶的密碼

echo "member1:password1"//member1為設置密碼的用戶名稱 password1為要設置的密碼

3.2.2登錄對應賬號后進行編輯程序然后運行

登錄賬號

ssh member1@樹莓派IP地址
# 輸入密碼password1

創建子目錄

mkdir test//創建子目錄 test為創建子目錄的名稱
cd test//登錄子目錄

編輯程序代碼

nano week6.c//week6.c為文件的名稱

輸入代碼

// process_demo.c
#include <unistd.h>
#include <sys/wait.h>
#include <stdio.h>int main() {printf("[%d] Parent process starts\n", getpid());pid_t pid = fork();if (pid < 0) {perror("Fork failed");return 1;} else if (pid == 0) {printf("[%d] Child process running\n", getpid());execl("/bin/ls", "ls", "-l", NULL);perror("Exec failed");return 1;} else {printf("[%d] Parent waiting for child %d\n", getpid(), pid);int status;wait(&status);if (WIFEXITED(status)) {printf("[%d] Child exited with status %d\n", getpid(), WEXITSTATUS(status));}}printf("[%d] Process ends\n", getpid());return 0;
}

編譯程序

gcc -Wall -Wextra week6.c -o test//week6.c為程序代碼的文件名稱 test為前面創建的子目錄

運行程序

./test//./為運行 test為運行文件的子目錄

運行成功

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

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

相關文章

25-智慧旅游系統(協同算法)三端

介紹 技術&#xff1a; 基于 B/S 架構 SpringBootMySQLLayuivue 環境&#xff1a; Idea mysql maven jdk1.8 node 管理端功能 首頁展示圖表&#xff1a;以數據可視化方式展示關鍵業務數據。 用戶管理&#xff1a;管理系統用戶&#xff0c;包括查看、編輯等操作。 供應商管…

【stm32--HAL庫DMA+USART+空閑中斷不定長收發數據】

串口通信-Hal庫實現不定長度收發&#xff0c;DMAUSART DMA串口STM32CUBEMX配置&#xff08;工程創建&#xff09;基礎配置時鐘配置工程配置 代碼編寫現象 DMA 在正式配置之前&#xff0c;我們先來一起簡單了解一下DMA。DMA&#xff08;Direct Memory Access&#xff0c;直接內…

沉浸式體驗測評|AI Ville:我在Web3小鎮“生活”了一周

最近&#xff0c;我在朋友的推薦下&#xff0c;體驗了 aivillebot 的項目。起初&#xff0c;我只是抱著試試看的心態&#xff0c;心想這不就是個 Web3 版的《星露谷物語》嗎&#xff1f; 但是一周下來&#xff0c;我發現這個虛擬小鎮也沒那么簡單——里面的居民不是目前端游或鏈…

FPGA學習-基于 DE2-115 板的 Verilog 分秒計數器設計與按鍵功能實現

一、核心功能設計 按鍵暫停/繼續&#xff1a;通過KEY1控制計時狀態 按鍵消抖處理&#xff1a;20ms消抖周期消除機械抖動 硬件資源分配&#xff1a;符合DE2-115開發板引腳規范 二、核心模塊實現詳解 1. 頂層模塊&#xff08;counter&#xff09; module counter(input CL…

后端開發 SpringBoot 工程模板

概述 本篇文章主要記錄如何開發一個通用的 SpringBoot 工程開發框架的項目模板&#xff0c;這樣后續需要開發項目時就可以直接開箱直用了&#xff0c;省區了很多重復步驟。 項目初始化 創建項目&#xff1a; 按照我的選項來選&#xff0c;然后點擊 create&#xff0c;等待文…

OpenCv(五)——邊緣檢測

目錄 邊緣檢測 一、sobel算子邊緣檢測 &#xff08;1&#xff09;原理 1、X軸方向的邊緣檢測 2、Y軸方向的邊緣檢測 &#xff08;2&#xff09;sobel算子參數 &#xff08;3&#xff09;X軸方向邊緣檢測代碼演示 1、顯示圓的圖像 2、x方向上的邊緣檢測&#xf…

無人機數據鏈技術及運行方式詳解!

一、無人機數據鏈技術要點 1. 通信傳輸技術 頻段選擇&#xff1a; 常用頻段包括 L波段&#xff08;1-2 GHz&#xff09;、C波段&#xff08;4-8 GHz&#xff09;、Ku/K波段&#xff08;12-40 GHz&#xff09;&#xff0c;不同頻段在傳輸距離、帶寬和抗干擾性間權衡。 低…

AI Agent 實戰:搭建個人在線旅游助手

AI Agent 實戰&#xff1a;搭建個人在線旅游助手 本次實驗中&#xff0c;我們將繼續探索 Agent 的提示詞&#xff0c;學習更加規范的提示詞撰寫方法。 本實驗中你將掌握的知識點 使用 Dify 構建 Agent 的方法結構化的提示詞撰寫技巧變量的使用方法 1. 準備 在新建 Agent 之…

檢索增強生成(RAG):強化 AI 智能體的知識 “武裝”

技術點目錄 第一章、智能體(Agent)入門第二章、基于字節Coze 構建智能體(Agent)第三章、基于其他平臺構建智能體&#xff08;Agent&#xff09;第四章、國內外智能體(Agent)經典案例詳解第五章、大語言模型應用開發框架LangChain入門第六章、基于LangChain的大模型API接入第七章…

vscode 打開工程 看不到文件目錄

vscode 打開工程 看不到文件目錄 View->Explorer 快捷鍵&#xff1a;CtrlShiftE

厘米級定位賦能智造升級:品鉑科技UWB技術驅動工廠全流程自動化與效能躍升”

在智能制造中的核心價值體現在?高精度定位、流程優化、安全管理?等多個維度&#xff0c;具體應用如下&#xff1a; 一、?核心技術與定位能力? ?厘米級高精度定位? UWB技術通過?納秒級窄脈沖信號?&#xff08;帶寬超500MHz&#xff09;實現高時間分辨率&#xff0c;結合…

getID3獲取本地或遠程視頻時長

音頻文件也可使用&#xff0c;使用ffmeg安裝太復雜了 附ffmpeg方式&#xff1a;centos下安裝ffmpeg_yum安裝ffmpeg-CSDN博客 使用composer先安裝 composer require james-heinrich/getid3 獲取本地視頻 //獲取本地視頻$video_path $_SERVER[DOCUMENT_ROOT].$params[video];…

10、Linux C 網絡編程(完整版)

1、網絡發展歷史和分層 1.1 Internet 的歷史 起源&#xff1a; 1957 年&#xff1a;蘇聯發射第一顆人造衛星 "Sputnik"。 1958 年&#xff1a;美國總統艾森豪威爾成立 DARPA&#xff08;國防部高級研究計劃署&#xff09;。 1968 年&#xff1a;DARPA 提出 "…

前端:開源軟件鏡像站 / 清華大學開源軟件鏡像站 / 阿里云 / 網易 / 搜狐

一、理解開源軟件鏡像站 開源軟件鏡像是指開源軟件在遠程服務器上的備份副本&#xff0c;允許用戶通過互聯網快速下載和安裝所需的軟件。在國內&#xff0c;有多個知名的開源軟件鏡像站&#xff0c;為開發者提供穩定、快速的開源軟件下載服務。 二、常見開源軟件鏡像站 序號…

Oracle 數據庫中優化 INSERT INTO 操作的性能

在 Oracle 數據庫中優化 INSERT INTO 操作的性能&#xff0c;尤其是在處理大批量數據時&#xff0c;可以通過以下方法顯著提升效率。 使用直接路徑插入&#xff08;Direct-Path Insert&#xff09; 通過 APPEND 提示繞過緩沖區緩存&#xff0c;直接寫入數據文件&#xff0c;減…

嵌入式硬件篇---嘉立創PCB繪制

文章目錄 前言一、PCB繪制簡介1.1繪制步驟1.1.1前期準備1.1.2原理圖設計1.1.3原理圖轉PCB1.1.4PCB布局1.1.5布線1.1.6布線優化和絲印1.1.7制版 1.2原理1.2.1電氣連接原理1.2.2信號傳輸原理1.2.3電源和接地原理 1.3注意事項1.3.1元件封裝1.3.2布局規則1.3.3過孔設計1.3.4DRC檢查…

ideal自動生成類圖的方法

在 IntelliJ IDEA 中&#xff0c;“**在項目資源管理器中選擇以下類**” 是指通過 **項目資源管理器&#xff08;Project Tool Window&#xff09;** 找到并選中你需要生成類圖的類文件&#xff08;如 .java 文件&#xff09;&#xff0c;然后通過右鍵菜單或快捷鍵操作生成類圖…

【零基礎入門unity游戲開發——2D篇】2D物理關節 —— Joint2D相關組件

考慮到每個人基礎可能不一樣,且并不是所有人都有同時做2D、3D開發的需求,所以我把 【零基礎入門unity游戲開發】 分為成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要講解C#的基礎語法,包括變量、數據類型、運算符、流程控制、面向對象等,適合沒有編程基礎的…

在Vue 3 + TypeScript + Vite 項目中安裝和使用 SCSS

在Vue 3 TypeScript Vite 項目中安裝和使用 SCSS 1、安裝 SCSS 的相關依賴 npm install sass --save-dev2、配置 Vite 對于 Vue 3&#xff0c;Vite 已經內置了對 SCSS 的支持&#xff0c;通常不需要額外的配置。但是&#xff0c;如果需要自定義配置&#xff0c;可以在路徑…

【滲透測試】Vulnhub靶機-FSoft Challenges VM: 1-詳細通關教程

下載地址&#xff1a;https://www.vulnhub.com/entry/fsoft-challenges-vm-1,402/ 目錄 前言 信息收集 目錄掃描 wpscan掃描 修改密碼 反彈shell 提權 思路總結 前言 開始前注意靶機簡介&#xff0c;當第一次開機時會報apache錯誤&#xff0c;所以要等一分鐘后重啟才…