Linux内核分析(第六周)
进程的控制与创建
一、进程的描述
1.操作系统内核的三大功能:进程管理(核心),内存管理,文件系统;
2.状态:
fork() task_zombit(终止)
task_running(就绪;但是没有运行) task_running(正在运行)
task_Intertupt
task_Uninterrupt
3.标识pid
4.struct list_head 进程双向链表
struct mm_struct 地址空间有关
二、进程的创建
1.概览
1. fork()用户态创建子进程
2. fork()在父进程和子进程中各返回一次
2.理解方法
1. fork()是一个系统调用
2. fork() vfork() clone()最终都可以在do_fork来实现进程的创建
3.复制当前进程实现创建新进程
3.浏览相关关键代码
1.复制、给新进程分配、修改PID、进程链表等;
2.sys_fork sys_clone sys_vfork 最终都return do_fork
3.alloc_thread_info_node 地址空间,分配实际内核空间
4.p=dup_init_task 复制进程
5.childregs= *current_pt_regs();复制内核堆栈
6.return_from_fork(返回用户态)
拷贝内核堆栈数据和指定新进程的第一条指令进程
4.gdb跟踪调试
三、实验
1.准备工作
rm menu -fs
clone xxxxxx
cd menu
mv test_fork.c
make rootfs
2.目的
阅读理解task_struct数据结构;分析fork函数对应的内核处理过程sys_clone,理解创建一个新进程如何创建和修改task_struct数据结构;使用gdb跟踪分析一个fork系统调用内核处理函数sys_clone,验证对Linux系统创建的理解;进程是从哪里开始执行的;在 Linux 内核中,供用户创建进程的系统调用fork()函数的响应函数是 sys_fork()、sys_clone()、sys_vfork()。这三个函数都是通过调用内核函数 do_fork() 来实现的.
3.gdb跟踪调试
设置断点
b do_fork
b dup_task_struct
b copy_process
b copy_thread
b ret_from_fork
实验截图
task_struct数据库结构很庞大,Linux进程的状态与操作系统原理中描述的进程状态有所不同,比如就绪态和运行态都是TASK_RUNNING。简略的双向循环链表。程序创建的进程具有父子关系
系统调用内核处理函数sys_clone创建一个新进程,通过调用do_fork来实现进程的创建,Linux通过复制父进程的PCB来创建进程,再对其进行相应修改。
子进程在内核中fork返回,在内核中开始执行,当子进程开始运行的时候,其ret_from_fork将做一系列工作,然后返回到用户态。
最新文章
- If &; Else 语句
- JTMz换路径导致MySQL服务不能启动的问题
- 电梯多媒体WinForm项目Q&;A总结
- PAT 1057. Stack (30)
- golang []byte转string
- node js 爬虫爬取静态页面,
- 前后端交互之封装Ajax+SpringMVC源码分析
- 直接读取修改exe文件
- CPU和线程的关系
- java web程序 String的valueOf方法总集
- LNMT(Linux+Nginx+MySQL+Tomcat)常见性能参数调优
- class 3 求数组中的最大值(单元测试)
- Oracle AWR 之 通过dbms_workload_repository.awr_report_text(html)函数在客户端生成AWR报告
- 【beta】Scrum站立会议第3次....11.6
- save a web page as a single file (mht format) using Delphi code
- boost库checked_delete的使用
- Windows server R2 2008上部署gogs git
- explain SQL语句()
- android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
- js日期和时间戳互换
热门文章
- MySql详解(五)
- 在react中使用intro.js的的一些经验
- swift语言的特征:类型系统与函数式编程:swift是面向类型和面向函数编程的语言
- 2298: [HAOI2011]problem a
- 2.3.3 Button(按钮)与ImageButton(图像按钮)
- 编译有哪些阶段,动态链接和静态链接的区别 c++
- robotframe 自定义开发库
- grpc &; pb 环境配置
- free命令(buffer与cache区别/linux查看空闲内存)
- 20155238 《JAVA程序设计》实验二(Java面向对象程序设计)实验报告