当前位置: 首页 > wzjs >正文

网站备案 更改ip营销型网站优化

网站备案 更改ip,营销型网站优化,网站制作的步骤不包括,自己做百度网站目录 一、XTerminal下的Linux系统调用编程 1.1理解进程和线程的概念并在Linux系统下完成相应操作 (1) 进程 (2)线程 (3) 进程 vs 线程 (4)Linux 下的实践操作 1.2Linux的“虚拟内存管理”和stm32正式物理内存(内存映射)的区别 (1)Linux虚拟内存管…

目录

一、XTerminal下的Linux系统调用编程

1.1理解进程和线程的概念并在Linux系统下完成相应操作

(1) 进程

(2)线程

(3) 进程 vs 线程

(4)Linux 下的实践操作

1.2Linux的“虚拟内存管理”和stm32正式物理内存(内存映射)的区别

(1)Linux虚拟内存管理

(2)STM32物理内存映射

(3)主要区别

1.3理解 Linux系统调用函数 fork()、wait()、exec() 等并通过vi 编辑一个c程序

(1)系统调用函数介绍

fork()

wait()

exec()

(2)创建syscall_demo.c

(3)编写示例程序

(4)编译运行

二、在树莓派中创建多个账号并完成Linux系统调用函数联系

1.1组员账号创建

1.2在树莓派环境中学习并调用fork()、wait()和exec()函数

(1)创建文件 syscall_demo.c

(2)编写示例程序

(3)编译运行


一、XTerminal下的Linux系统调用编程

1.1理解进程和线程的概念并在Linux系统下完成相应操作

(1) 进程

定义:进程是程序的一次执行实例,拥有独立的内存空间、文件描述符和系统资源。

特点:

  • 每个进程有唯一的 PID(进程ID)。

  • 进程间相互隔离,通信需通过 IPC(进程间通信) 机制(如管道、共享内存等)。

  • 创建进程通过 fork()exec() 系统调用。

(2)线程

定义:线程是进程内的执行单元,共享同一进程的内存和资源。

特点:

  • 线程有独立的 栈,但共享堆、全局变量和文件描述符。

  • 创建线程通过 pthread_create()(POSIX 线程库)。

  • 轻量级,切换开销比进程小。

(3) 进程 vs 线程

特性进程线程
独立性完全隔离共享同一进程资源
创建开销大(需复制内存)小(共享内存)
通信方式IPC(管道、信号等)直接读写共享变量
崩溃影响不影响其他进程导致整个进程终止

(4)Linux 下的实践操作

ps -a

通过kill命令尝试终止该进程

kill -9 PID

我们发现提示没有那个进程。这是因为该进程为临时进程,执行完毕后已自动退出,因此报错 。

我们可以通过下面命令查找系统中所有的进程及其对应的PID

ps -aux

我们可以对应选择一个进程进行结束

1.2Linux的“虚拟内存管理”和stm32正式物理内存(内存映射)的区别

(1)Linux虚拟内存管理

核心机制: Linux通过虚拟内存抽象物理内存,为每个进程提供独立的、连续的虚拟地址空间(通常为4GB,32位系统),由MMU(内存管理单元)动态映射到物理内存或磁盘交换空间。

其工作流程为:

进程访问虚拟地址 → MMU查页表 → 若页在物理内存则访问,否则触发缺页异常 → 内核加载缺失页或终止进程

(2)STM32物理内存映射

核心机制: STM32等嵌入式MCU通常直接操作物理内存,通过内存映射(将外设寄存器、Flash、RAM等硬件资源分配到固定的物理地址。

其典型内存布局为:

0x00000000 - 0x1FFFFFFF: Flash(代码存储) 0x20000000 - 0x2001FFFF: SRAM(数据) 0x40000000 - 0x5FFFFFFF: 外设寄存器

(3)主要区别

特性Linux虚拟内存STM32物理内存映射
地址空间虚拟地址(进程独立)物理地址(全局唯一)
硬件支持依赖MMU实现地址转换无MMU,直接访问物理地址
内存扩展支持Swap扩展虚拟内存仅限芯片内置的物理内存
内存保护通过页表实现权限控制无保护,需开发者谨慎操作
外设访问通过/dev/mem或驱动间接访问直接读写内存映射的外设寄存器
使用场景通用计算(多任务、复杂应用)实时嵌入式系统(确定性、低延迟)

存在差异的原因:

Linux需要支持多进程、大内存应用,虚拟内存提供灵活性和安全性。

STM32:追求实时性和确定性,省去MMU降低开销,适合裸机或RTOS(如FreeRTOS)。

1.3理解 Linux系统调用函数 fork()、wait()、exec() 等并通过vi 编辑一个c程序

(1)系统调用函数介绍

fork()

功能:创建一个新的进程(子进程),子进程是父进程的副本。

返回值:

  • 父进程中返回子进程的PID(>0)。

  • 子进程中返回0。

  • 失败时返回-1。

头文件:<unistd.h>

wait()

功能:父进程等待子进程结束,并回收子进程的资源(防止僵尸进程)。

参数:int *status(存储子进程的退出状态)。

返回值:成功时返回子进程PID,失败时返回-1。

头文件:<sys/wait.h>

exec()

功能:替换当前进程的映像为新的程序(如运行另一个可执行文件)。

常用变体:

  • execl():参数列表形式。

  • execv():参数数组形式。

  • execvp():自动搜索PATH环境变量。

返回值:成功时不返回,失败时返回-1。

头文件:<unistd.h>

(2)创建syscall_demo.c

vi syscall_demo.c

(3)编写示例程序

进入vi编译器后,按"i"进入插入模式

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main() {pid_t pid;int status;pid = fork();if (pid < 0) {fprintf(stderr, "Fork failed!\n");return 1;} else if (pid == 0) {printf("Child Process (PID=%d): Hello from fork()!\n", getpid());execlp("ls", "ls", "-l", NULL);perror("exec failed");return 1;} else {printf("Parent Process (PID=%d): Waiting for child...\n", getpid());wait(&status);printf("Parent: Child exited with status %d\n", WEXITSTATUS(status));}return 0;
}

编写完成后按Esc退出插入模式,输入“:wq”保存并退出

注:

保存文件Esc:w → 回车保存但不退出
保存并退出Esc:wq → 回车保存并退出
强制退出不保存Esc:q! → 回车丢弃所有修改

(4)编译运行

输入下面代码进行编译运行:

#编译
gcc syscall_demo.c -o syscall_demo
#添加权限
chmod +x syscall_demo
# 运行
./syscall_demo

结果解释:

Parent Process (PID=960685): Waiting for child
#父进程(PID=960685)打印信息,表示已通过 fork() 创建子进程,并调用 wait() 进入阻塞状态,等待子进程结束。Child Process (PID=960686): Hello from fork()!
#子进程(PID=960686)被创建后,打印自己的 PID 和消息,随后调用execlp("ls", "ls", "-l", NULL)。
子进程的代码映像被替换为 ls -l 命令,原程序的后续代码(如 perror)不再执行。-rwxr-xr-x 1 zhangzy group2 17056 Apr  3 23:23 a.out
-rwxr-xr-x 1 zhangzy group2 17056 Apr  3 23:25 syscall_demo
-rw-r--r-- 1 zhangzy group2   610 Apr  3 23:23 syscall_demo.c
-rwxr-xr-x 1 zhangzy group2    65 Apr  3 22:12 test.sh
#ls -l 命令的输出,显示当前目录下的文件详情:
总用量 48Parent: Child exited with status 
#子进程(ls -l)执行完毕后,父进程的 wait(&status) 返回。
WEXITSTATUS(status) 提取子进程的退出状态码 0,表示 ls 命令成功执行。

二、在树莓派中创建多个账号并完成Linux系统调用函数联系

1.1组员账号创建

首先要进行树莓派的VNC远程登录,具体步骤可以看我前面的博客:树莓派3b:环境配置,VNC远程控制并进行简单代码运行_树莓派vnc-CSDN博客

先进入VNC命令行

(1)创建用户

为每个组员创建一个独立的系统账号,并生成各自的目录

sudo adduser user1
sudo adduser user2

(2)配置用户权限

确保用户有基本的开发权限,(如sudo权限)

# 将用户添加到sudo组(允许执行管理员命令)
sudo usermod -aG sudo username1# 验证用户组
groups username1

我们通过命令行测试,发现新用户可以进行登录(后续代码也可以通过电脑命令行实现)

1.2在树莓派环境中学习并调用fork()、wait()和exec()函数

(1)创建文件 syscall_demo.c

nano syscall_demo.c

(2)编写示例程序

该程序展示了Linux系统调用fork()、exec()、和wait()函数的工作过程

#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>int main() {pid_t pid;int status;// 1. fork() 示例pid = fork();if (pid < 0) {fprintf(stderr, "Fork failed!\n");return 1;} else if (pid == 0) {// 子进程printf("Child Process (PID=%d): Hello from fork()!\n", getpid());// 2. exec() 示例:替换为执行 'ls' 命令execlp("ls", "ls", "-l", NULL);// 如果exec失败,才会执行到这里perror("exec failed");return 1;} else {// 父进程printf("Parent Process (PID=%d): Waiting for child...\n", getpid());// 3. wait() 示例wait(&status);printf("Parent: Child exited with status %d\n", WEXITSTATUS(status));}return 0;
}

(3)编译运行

编译:

gcc syscall_demo.c -o syscall_demo

运行:

./syscall_demo

http://www.dtcms.com/wzjs/155638.html

相关文章:

  • 设计logo图片超级seo外链工具
  • 做网站图片大小不合适怎么调深圳优化公司找高粱seo服务
  • 从零开始建设网站百度app
  • 石河子市住房和城乡建设局网站近一周的新闻大事热点
  • 网站没有做实名认证org域名注册
  • 深圳外贸网站商城seo观察网
  • 深圳营销网站建设策划百度最怕哪个投诉电话
  • 北京市城乡环境建设委员会网站搜索引擎排名查询工具
  • 部委网站建设通知中国关键词官网
  • 独立网站如何推广让百度收录自己的网站
  • 做网页要多少钱网络优化app哪个好
  • 网站诊断从哪里开始高端seo服务
  • 做动车哪个网站查数字营销成功案例
  • 做推广哪个网站好网络营销软件商城
  • 微商怎么做网站网站下载免费软件
  • 新网站一般建设空间大小百度关键词seo公司
  • 网站icp备案信息不能为空新闻最新消息
  • 网络客服有哪些岗位要求seo网络推广案例
  • 软件编程毕业设计代做网站seo优化查询
  • 用dw制作个人网站seo搜索引擎优化工具
  • 做css div网站公司营销技巧在线完整免费观看
  • 松江营销型网站建设优化大师人工服务电话
  • html做的旅游网站百度最新秒收录方法2023
  • 电脑可以做网站吗b站推广网站入口2023的推广形式
  • 专门做图片的网站南昌seo代理商
  • 诗敏家具网站是谁做的杭州seo工作室
  • 网站建设中的色彩搭配网络营销的内容主要有哪些
  • 一般网站的字体大小网络营销课程思政
  • 中铁建设集团有限公司电话号码怎么网站排名seo
  • 网站建设预算描述中文网站排行榜