2023-2024 20233809《Linux内核原理与分析》第八周作业
一、通过chatgpt学习相关知识
https://chat.openai.com/c/59e97352-da20-4ba0-8ebf-275589ecc453
二、实验楼实验七
1、理解编译链接的过程和 ELF 可执行文件格式
1)首先编写hello.c,并生成编译链接
#include<stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
编译链接命令
gcc -E hello.c -o hello.i//预处理
gcc -S hello.i -o hello.s//编译
gcc -c hello.s -o hello.o//汇编
gcc hello.o -o hello//链接
“gcc -o hello.static hello.o -static”静态编译出来的hello.static把C库里需要的东西也放到可执行文件里了。使用命令ls –l后,可以看到hello只有8511,hello.static有大概有877147。
编译过程图展示:

2)、输入命令readelf -h hello查看hello文件的头

2、编程使用 exec库函数加载一个可执行文件,动态链接分为可执行程序装载时动态链接和运行时动态链接。
1)可执行程序装载时动态链接
#ifndef SH_LIB_EXAMPLE_H
#define SH_LIB_EXAMPLE_H
#define success 0
#define failure(-1)
#ifdef __cplusplus
extern "C"{
#endif
int SharedLibApi();
#ifdef __cplusplus
}
#endif
#endif / SH_LIB_EXAMPLE_H */
2)生成shlibexample.c文件
#include<stdio.h>
#include"shlibexample.h"
int SharedLibApi()
{
printf("This is a shared libary!\n");
return success;
}
3)输入gcc -shared shlibexample.c -o libshlibexample.so -m32”(在64位环境下执行时加上-32)生成.so文件生成文件

4)编写dllibexample.h文件
#ifndef DL_LIB_EXAMPLE_H
#define DL_LIB_EXAMPLE_H
#ifdef __cplusplus
extern "C" {
#endif
int DynamicalLoadingLibApi();
#ifndef __cplusplus
}
#endif
#endif /* DL_LIB_EXAMPLE_H */
5)编写dllibexample.c文件
#include<stdio.h>
#include"dllibexample.h"
#define success0
#define failure (-1)
int DynamicalLoadingLibApi()
{
printf("This is a Dynamical Loading libary!\n");
return success;
}
6)使用命令gcc -shared dllibexample.c -o libdllibexample.so生成动态库

7)接着建立动态链接,首先编写主函数test5.c
#include <stdio.h>
#include "shlibexample.h"
#include <dlfcn.h>
int main()
{
printf("This is a Main program!\n");
printf("Calling SharedLibApi() function of libshlibexample.so!\n");
SharedLibApi();
void * handle = dlopen("libdllibexample.so",RTLD_NOW);
if(handle == NULL)
{
printf("Open Lib libdllibexample.so Error:%s\n",dlerror());
return failure;
}
int (*func)(void);
char * error;
func = dlsym(handle,"DynamicalLoadingLibApi");
if((error = dlerror()) != NULL)
{
printf("DynamicalLoadingLibApi not found:%s\n",error);
return failure;
}
printf("Calling DynamicalLoadingLibApi() function of libdllibexample.so!\n");
func();
dlclose(handle);
return success;
}
8)
输入gcc main.c -o main -L/home/shiyanlou -lshlibexample -ldl -m32和export LD_LIBRARY_PATH=$(pwd)以及./test5.c

3、使用 gdb 跟踪分析一个 execve 系统调用内核处理函数 sys_execve
1)Linux提供了exec、execlp、execle、execv、execvp、execve等六个用以执行一个可执行文件的函数,统称为exec函数,差异在于对命令行参数和环境变量参数的传递方式不同。以上函数的本质都是调用系统调用sys_execve()来执行一个可执行文件。
整体的调用关系从前到后为:
sys_execve、do_execve、do_execve_common、exec_binprm、search_binary_handler、load_elf_binary、start_thread
可执行程序执行到execve的时候陷入到内核态,当系统调用从内核态返回到用户态时,eip直接跳转到ELF程序的入口地址,CPU也得到新的用户态堆栈(包含新程序的命令行参数和shell上下文环境)。这样,新程序就开始执行了。
当执行execve时,用execve的加载的可执行文件把当前进程的可执行程序给覆盖掉,execve的系统调用会返回新的可执行程序的起点——main函数。

2)接着使用gdb进行跟踪分析


4、实验总结
本次实验围绕着编译链接的过程和 ELF 可执行文件格式、动态链接以及系统调用,学习了相关知识以及简单的代码编译。
相关推荐
douyin-favorite-MyLike-main.zip
douyin-favorite-MyLike-main.zip
风光储虚拟同步VSG并离网切换预同步控制仿真(Simulink仿真实现)
内容概要:本文针对风光储混合微电网系统,深入研究了虚拟同步发电机(VSG)技术在并网与离网两种运行模式间进行切换时的关键控制策略——预同步控制,并基于Simulink平台构建了完整的系统仿真模型以验证该策略的有效性。该模型集成了风力发电、光伏发电和储能系统,通过VSG控制算法赋予电力电子逆变器类似于传统同步发电机的惯性和阻尼特性,从而显著增强了微电网在模式切换过程中的动态稳定性与鲁棒性。其中,预同步控制环节是实现无缝切换的核心,它通过实时调节VSG输出电压的频率、相位和幅值,使其在并网开关动作前就与主电网的电压参数达到高度一致,有效消除了并网冲击电流,实现了平滑、无扰动的模式转换。通过仿真结果,可以系统地分析和优化控制器的各项参数,进而验证该整体控制方案的技术可行性与优越性能。; 适合人群:具备电力电子技术、自动控制理论和电力系统基础的专业知识,从事新能源发电、微电网运行与控制、电力系统自动化等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究风光储一体化混合微电网的能量管理策略与并离网无缝切换控制技术;②深入学习和掌握虚拟同步机(VSG)的工作原理、数学建模及其在逆变器控制中的具体实现方法;③利用Simulink进行复杂的电力系统动态仿真,以验证和评估新型控制算法的动态响应特性和有效性。; 阅读建议:此资源以Simulink仿真为核心实践工具,使用者应紧密结合电力系统的基础理论知识,深入理解VSG的数学模型和控制逻辑,尤其要重点关注预同步环节的控制策略设计,并通过反复调整仿真模型中的各项参数来观察系统的动态响应变化,从而深化对微电网稳定运行机制和高级控制技术的理解。
【顶级EI复现】新扩展移相角下的双有源桥DC-DC 变换器优化控制策略(Simulink仿真实现)
内容概要:本文聚焦于“新扩展移相角下的双有源桥DC-DC变换器优化控制策略”的研究与仿真实现,基于Simulink平台系统地构建了完整的仿真模型,深入探讨了软开关实现、最小电流应力优化及闭环控制策略的设计方法。文章提出一种改进型扩展移相(EPS)调制策略,通过引入扩展移相角有效拓宽软开关范围,提升变换效率并降低功率器件的电压与电流应力。结合KKT最优性条件与分段解析优化理论,实现了软开关与最小应力的协同控制目标,并设计双闭环控制系统以增强动态响应与鲁棒性。研究成果成功复现了高水平EI期刊论文的核心思想,具有较强的学术参考价值与工程应用意义。; 适合人群:电力电子、电气工程及其自动化等方向的研究生、科研人员,以及具备一定Simulink建模能力与电力电子拓扑控制基础的工程技术人员。; 使用场景及目标:①深入理解双有源桥(DAB)变换器的工作机理与先进控制策略;②掌握基于KKT条件的优化控制建模方法;③在Simulink中复现并验证EI级论文提出的控制算法,服务于科研论文撰写、课题研究或实际项目开发; 阅读建议:建议结合文中涉及的EPS调制、软开关条件推导、KKT优化数学建模等内容进行系统学习,重点关注仿真模块的参数设置、控制逻辑实现与波形分析,以全面掌握该优化策略的技术细节与工程实现路径。
AI大模型医学影像诊断智能识别应用方案.pptx
AI大模型医学影像诊断智能识别应用方案.pptx
边缘计算环境中基于启发式算法的深度神经网络卸载策略(Matlab代码实现)
内容概要:本文系统探讨了在边缘计算环境中,如何利用启发式算法解决深度神经网络(DNN)的任务卸载问题,并提供了完整的Matlab代码实现方案。文章首先分析了边缘计算环境下DNN推理所面临的关键挑战,如计算资源受限、通信延迟敏感以及能效约束等;在此基础上,构建了以最小化任务延迟、系统能耗与经济成本为核心的多目标优化模型,并详细阐述了基于贪心算法、遗传算法、粒子群优化(PSO)等典型启发式算法的卸载决策机制。通过对多种应用场景的仿真实验,对比评估了不同算法在任务完成时间、资源利用率和能量消耗等方面的性能表现,验证了所提策略在提升系统整体效率方面的有效性与优越性。文档还包含了Matlab仿真环境搭建、参数配置说明及结果可视化方法,为相关研究提供了可复现、可扩展的技术框架。; 适合人群:具备一定计算机网络、边缘计算、人工智能或优化理论基础的研究生、科研人员及工程技术开发者,特别适用于从事DNN模型部署、边缘智能、任务调度与资源管理等相关领域研究的专业人士。; 使用场景及目标:① 研究边缘计算中深度学习模型的高效执行与部署策略;② 学习并实现基于启发式算法的计算任务卸载与资源协同优化方法;③ 利用Matlab平台进行智能算法仿真、性能评估与科研原型开发,支撑学术研究或工程实践。; 阅读建议:建议读者结合提供的Matlab代码逐章节深入阅读,重点关注问题建模、算法设计与仿真实验部分,动手运行并调试代码以加深对卸载机制与优化过程的理解,同时可根据实际应用场景对算法参数、目标函数或网络拓扑进行定制化改进与拓展研究。



