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.mzph.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;所以要等一分钟后重启才…