(2023-2024-1)20232811《Linux内核原理分析与设计》第八周作业

202328 2023-11-10 10:56:16

目录

一、实验七:装载和启动可执行程序

1.使用“exec库函数”加载一个可执行文件

2. 通过gdb进行跟踪分析

 二、相关知识及问答

三、实验总结


一、实验七:装载和启动可执行程序

1.使用“exec库函数”加载一个可执行文件

在实验楼的终端中执行以下命令,发现test.c文件中新增“exec”命令:

cd LinuxKernel
rm -rf menu
git clone https://github.com/mengning/menu.git
# 克隆失败执行该命令
# git config --global http.sslVerify false
cd menu
mv test_exec.c test.c
vi test.c

 

 返回menu文件夹 ,编译运行

make roofs

 

查看exec函数实现:

可以看到,Exec函数使用了fork()和execlp()等系统调用。

  1. 函数定义了一个名为Exec的函数,它接受两个参数:argc表示命令行参数的数量,argv是一个指向参数字符串数组的指针。
  2. 函数中使用了fork()系统调用来创建一个新的进程。fork()会复制当前进程,创建一个新的子进程。在原始进程中,fork()返回子进程的进程ID(pid),而在子进程中,fork()返回0。
  3. 通过检查fork()的返回值,可以确定当前代码是在父进程还是子进程中执行。
  4. 如果fork()返回值小于0,表示创建子进程失败,程序会打印错误信息并退出。
  5. 如果fork()返回值等于0,表示当前代码在子进程中执行。子进程会输出一条信息 “This is Child Process!,然后使用execlp()系统调用执行名为”/hello"的可执行文件。
  6. 如果fork()返回值大于0,表示当前代码在父进程中执行。父进程会输出一条信息 “This is Parent Process!”,然后使用wait()系统调用等待子进程的结束。
  7. 当子进程执行完毕后,父进程会继续执行,并输出一条信息 “Child Complete!”。

总体来说,这个函数创建了一个子进程,并在子进程中执行了一个名为"/hello"的程序。父进程等待子进程执行完毕后才继续执行。

2. 通过gdb进行跟踪分析

回退到父目录,使用下面的命令启动内核并在CPU运行代码前停下以便调试:

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S

 

打开一个新的终端窗口,依次使用下面的命令启动gdb调试:

gdb
file linux-3.18.6/vmlinux
target remote:1234

 在系统调用sys_execve的入口处设置断点:

b sys_execve

继续运行程序,在QEMU窗口中输入exec,系统就会停在上面设置的断点处: 

 继续设置以下断点,可完整跟踪进程的创建和启动代码:

b load_elf_binary
b start_thread

 

 二、相关知识及问答

三、实验总结

 exec函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。这里的可执行文件既可以是二进制文件,也可以是任何Linux下可执行的脚本文件,如果不是可以执行的文件,那么就解释成为一个shell文件,shell执行。当Linux内核或程序使用fork函数创建子进程后,子进程往往要调用一种exec函数(exec家族的一种)以执行另一个程序;在调用一种exec函数时,该进程执行的程序完全被替换为新程序,而新程序则从其main函数处开始执行,因为调用exec函数并不创建新进程,所以前后的进程ID并未改变,或者说exec函数只是用了一个全新的程序替换了当前进程的正文、数据段和堆栈段
 

 

...全文
374 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文针对复杂威胁环境下多无人机的协同路径规划问题,提出一种基于多段杜宾斯(Dubins)路径的优化方法,旨在实现高动态、高风险场景中无人机群的安全、高效与协同飞行。研究充分考虑无人机的实际飞行约束,如最小转弯半径与连续曲率要求,采用杜宾斯曲线构建平滑且符合动力学特性的路径段,并结合优化算法对多机路径进行协同规划,有效规避静态威胁区域与动态障碍物,避免飞行器间发生碰撞。方案在Matlab平台上完成仿真验证,结果表明该方法能够在城市、军事等复杂环境中实现多无人机系统的路径最短化、能耗最低化、安全性最大化与实时性兼顾的多目标优化,具有较强的工程应用潜力。; 适合人群:具备无人机控制、路径规划或智能优化算法基础的科研人员与工程技术人员,特别适用于自动化、航空航天、机器人及相关领域的研究生、高校教师及工业界研发人员。; 使用场景及目标:①应用于复杂城市、战场等高威胁环境下的多无人机协同任务,如侦察监视、应急救援、集群打击与编队巡航;②为解决多无人机系统中的动态避障、冲突消解、路径平滑与资源协同分配等关键技术问题提供理论依据与算法实现参考;③帮助研究人员深入理解Dubins路径在多智能体协同运动规划中的建模方式与优化机制,推动其在无人系统自主导航中的实际落地。; 阅读建议:建议读者结合提供的Matlab代码深入研读算法实现流程,重点分析威胁建模策略、多机冲突协调机制以及多目标代价函数的设计思路,可通过调整环境参数与优化权重在仿真中观察路径生成效果,从而加深对协同决策、运动学约束与全局优化之间耦合关系的理解。
内容概要:本文围绕“基于飞机配电优化负荷管理系统研究”展开,利用Matlab代码实现相关建模仿真与优化分析,旨在提升飞机配电系统的效率与可靠性。研究重点针对飞机电力系统中的动态负荷分配问题,构建了综合考虑电源容量限制、负载优先级划分、供电安全性、能量消耗最小化及系统冗余能力的多约束优化模型。通过引入先进智能优化算法对模型进行高效求解,实现了对机载关键与非关键设备的科学化、智能化供电管理。文中详细展示了算法迭代过程、收敛性分析及不同工况下的仿真结果,验证了该方法在降低整体能耗、均衡电力负载、增强系统稳定性以及应对突发用电需求等方面的优越性能,为现代民用与军用航空器电力系统的自主决策与健康管理提供了坚实的理论支撑与可行的技术路径。; 适合人群:具备电力系统、自动化或航空航天工程背景,熟练掌握Matlab编程语言,从事飞机电气系统设计、航空器能源管理、智能优化算法应用或相关领域研究的科研人员、工程师及研究生。; 使用场景及目标:①应用于新型飞机电气系统的设计与仿真验证,优化机载设备的供电策略与能量管理逻辑;②为复杂封闭电力系统(如舰船、空间站)中的负荷调度与应急电源管理提供可借鉴的解决方案,以提升系统整体能效、安全等级与运行韧性。; 阅读建议:建议结合提供的Matlab代码深入理解优化模型的数学建模过程、约束条件的程序化表达及智能算法的具体实现细节,重点关注目标函数的设计思路、权重系数的选取对优化结果的影响,并可尝试将模型拓展至多目标优化、实时滚动优化或考虑设备故障预测的主动负荷管理等更复杂的应用场景。

39

社区成员

发帖
与我相关
我的任务
社区描述
北京电子科技学院 《Linux内核原理与分析》课程
linuxarm开发系统安全 高校 北京·丰台区
社区管理员
  • rocflytosky
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧