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

202328 2023-11-04 15:39:54

目录

一、阅读理解 task_struct 数据结构

1、进程描述符

​2、进程状态

二、 分析Linux内核创建一个新进程的过程

2.1 启动MenuOS

2.2 调试MenuOS

三、总结


一、阅读理解 task_struct 数据结构

1、进程描述符

task_struct具有非常庞大的数据结构,400多行代码。包括对进程链表的管理,控制台,文件系统描述,文件描述符,内存管理描述,信号描述等,其结构示意图如下图所示:


2、进程状态

当使用fork()创建一个新的进程时,进程的状态是TASK_RUNNING(就绪态),新进程被调度运行时,就切换到TASK_RUNNING(运行态)。对于一个正在运行的进程,调用用户库函数exit()会陷入内核执行该内核函数do_exit(),也就是终止进程,就会进入TASK_ZOMBIE状态(僵尸进程)。一个正在运行的进程在等待特定的事件和资源时会进入阻塞态。阻塞态也分两种:TASK_INTERRUPTIBLE和TASK_UNINTERRUPTLBLE。TASK_INTERRUPTIBLE可以被信号和wake_up唤醒的,当信号到来时,进程会被设置为TASK_RUNNING(就绪态),而TASK_UNINTERRUPTLBLE只能被wake-up()唤醒。

二、 分析Linux内核创建一个新进程的过程

2.1 启动MenuOS

cd LinuxKernel

rm -rf menu

git clone https://github.com/mengning/menu.git

cd menu

mv test_fork.c test.c

make rootfs

 

测试folk

2.2 调试MenuOS

通过增加-s -S启动参数打开调试模式:

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

 

设置断点:

b sys_clone

b do_fork

b dup_task_struct

b copy_process

b copy_thread

b ret_from_fork

执行fork命令,停在了断点SyS_clone处,单步执行,定在了断点do_fork处;之后就是依次设置的断点

 

三、总结

创建一个新进程在内核中的执行过程大致如下:

使用系统调用Sys_clone(或fork,vfork)系统调用创建一个新进程。这些系统调用会通过调用do_fork函数来实现进程的创建。Linux通过复制父进程的进程控制块(PCB)中的task_struct结构来创建一个新进程,并为新进程分配一个新的内核堆栈。需要修改复制过来的进程数据,例如进程ID(pid)、进程链表等。这一步通过执行copy_process和copy_thread函数来完成。设置新进程的内核栈顶,即p->thread.sp = (unsigned long) childregs。这个值表示当调度到子进程时,使用的内核栈的顶部位置。设置子进程的第一条指令地址,即p->thread.ip = (unsigned long) ret_from_fork。这个地址表示当调度到子进程时,执行的第一条指令。

...全文
381 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
代码下载链接: https://pan.quark.cn/s/8d73d870e377 瑞萨电子有限公司出品的瑞萨单片机是一系列微控制器产品,它们被广泛部署于工业控制、消费类电子以及汽车电子等多个领域。在众多瑞萨单片机产品中,RL78G13系列,尤其是型号为RL78/G13(R5F100LEA)的单片机,凭借其卓越的性能、极低的能耗以及全面的功能组合,成为了众多开发者的理想选择。本快速入门指南旨在向读者展示如何借助RL78/G13开发套件进行开发工作。该开发套件由两个主要部分构成:一个仿真器(Emulator板),以及一个内嵌振荡器且无需外接晶振的微控制器单元(MCU板),这两部分通过USB接口实现连接。为了进行开发,必须使用CubeSuite+作为开发环境,这是一款支持多种瑞萨MCU的综合开发软件套件。在部署开发环境之前,用户首先需要在个人计算机上安装CubeSuite+以及相关的USB驱动程序。具体的软件需求包括.NET Framework 4.0 SP1、Visual C++运行时库(即Visual C++ 2010 SP1可再发行包),以及可能的其他必要驱动程序。在软件安装和创建应用工程的过程中,应避免使用中文字符作为路径、文件夹或文件名,以防止由此引发的兼容性难题。安装流程可以分为以下几个环节:首先,安装.NET Framework 4.0 SP1,这是确保CubeSuite+能够正常运行的必要软件组件;其次,安装Visual C++运行时库,目的是为了支持CubeSuite+的顺畅运行;再次,安装CubeSuite+软件本身,其版本号为2.00.00a,安装包中可能已包含Microsoft Visual C++ 2010 SP1,将自动进行安装;最后...
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 在当前的科技产品市场中,苹果笔记本电脑以其实用性和高端定位,成为了许多消费者和专业人士的首选。 然而,由于苹果笔记本电脑的高昂价格和精密构造,购买时的检验工作显得尤为关键,特别是对于屏幕质量的检查。 屏幕坏点是液晶显示屏常见的问题,它们是屏幕上的像素点出现了永久性的色彩偏差或者不亮的情况,这些问题在长期使用中可能不断加剧,从而影响用户的使用体验。 针对这一问题,市场上出现了一款专为苹果笔记本用户设计的屏幕坏点检测工具——“苹果笔记本屏幕坏点检测,mac ios系统专用”。 这款软件的最大特点在于其专为macOS和iOS操作系统定制,这使得它能够更高效地在苹果设备上运行,并且能够针对苹果笔记本独有的显示特性进行优化检测。 软件的“小巧可以放在U盘里”设计,使得它具有极高的便携性,用户可以轻松将其存放在U盘等移动存储设备中,随身携带。 这一设计的实用之处在于,无论是在官方苹果店还是在第三方零售商店购买新机时,用户都可以立刻拿出这款软件进行现场屏幕检验。 通过直观的检测结果,用户能够立即判断出所购买的笔记本屏幕是否存在坏点问题,从而在付款前做出更加明智的决定,避免了因屏幕质量问题带来的退换货麻烦,保障了自己的权益。 根据描述中的信息,这款软件可能名为“PiXel Check V1.2”,而版本号“V1.2”表明这款软件已经历过一定时期的改进与发展。 在使用过程中,它可能通过展示不同的颜色模式(如纯黑、纯白、红色、绿色、蓝色等)来检测屏幕上可能存在的坏点。 这些颜色模式能够帮助用户更清晰地发现屏幕上的亮点、暗点或色斑,即永久显示某种颜色的像素、始终不亮的像素或是颜色显示异常的像素点。 用户只需根据软件提供的...

39

社区成员

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

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