进程的控制与创建

一、进程的描述

  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将做一系列工作,然后返回到用户态。

最新文章

  1. If & Else 语句
  2. JTMz换路径导致MySQL服务不能启动的问题
  3. 电梯多媒体WinForm项目Q&A总结
  4. PAT 1057. Stack (30)
  5. golang []byte转string
  6. node js 爬虫爬取静态页面,
  7. 前后端交互之封装Ajax+SpringMVC源码分析
  8. 直接读取修改exe文件
  9. CPU和线程的关系
  10. java web程序 String的valueOf方法总集
  11. LNMT(Linux+Nginx+MySQL+Tomcat)常见性能参数调优
  12. class 3 求数组中的最大值(单元测试)
  13. Oracle AWR 之 通过dbms_workload_repository.awr_report_text(html)函数在客户端生成AWR报告
  14. 【beta】Scrum站立会议第3次....11.6
  15. save a web page as a single file (mht format) using Delphi code
  16. boost库checked_delete的使用
  17. Windows server R2 2008上部署gogs git
  18. explain SQL语句()
  19. android BLE Peripheral 手机模拟设备发出BLE广播 BluetoothLeAdvertiser
  20. js日期和时间戳互换

热门文章

  1. MySql详解(五)
  2. 在react中使用intro.js的的一些经验
  3. swift语言的特征:类型系统与函数式编程:swift是面向类型和面向函数编程的语言
  4. 2298: [HAOI2011]problem a
  5. 2.3.3 Button(按钮)与ImageButton(图像按钮)
  6. 编译有哪些阶段,动态链接和静态链接的区别 c++
  7. robotframe 自定义开发库
  8. grpc & pb 环境配置
  9. free命令(buffer与cache区别/linux查看空闲内存)
  10. 20155238 《JAVA程序设计》实验二(Java面向对象程序设计)实验报告