进程家族树
在task_struct数据结构中,我们可以通过parent和children等域,如获得当前进程的父进程:
struct task_struct *my_parent = current->parent
而在Linux系统中,如前面所述,是保存在一个双向链表中的,所以可以通过以下方法获得前一个进程:
list_entry(task->tasks.next,struct task_struct, task)
同样可以通过next_task(task)和prev_task(task)这两个宏实现对前一个进程和后一个进程的获取,而实际上,for_each_process(task)宏提供了依次访问整个任务队列的功能,如
struct task_struct *task
for_each_process(task){
//做相应操作
}
进程的创建
如前面提到的,Linux系统中通过fork()函数实现进程的创建。Linux的fork()使用写时拷贝页实现。内核其实并不拷贝整个进程的地址空间,而是让父进程和子进程共享一个拷贝。只有在需要写入时,数据才会被复制,从而使各个进程拥有各自的拷贝。
Linux通过clone()系统调用实现fork()。fork()、vfork()和__clone()库函数都根据各自需要的参数标志去调用clone()。然后clone()去调用do_fork()。do_fork()完成进程创建的大部分工作,其定义见kernel/fork.h。该函数调用了copy_process()函数。而copy_process()是创建进程的主要函数:
1、调用dup_task_struct()函数为新进程创建一个内核栈、thread_info结构和task_struct,这些值与当前的进程的值相同。
2、 子进程的状态被设置为TASK_UNINTERRUPTIBLE以保证它不会被投入执行。
3、 copy_process()调用copy_flags()函数,以更新task_struct的flags成员。表明进程是否拥有超级用户权限的PF_SUPERPRIV标志被清0, 表明进程还没有调用exec()函数的PF_FORKNOEXE标志被设置。
4、 调用get_pid()为新进程获取一个PID.
5、 根据传递给clone()函数的参数,copy_process()拷贝或者共享打开的文件、文件系统信息、信号处理函数、进程地址空间和命名空间等。
6、 让父进程和子进程平分剩余的时间片。
7、 copy_process()返回一个指向子进程的指针。
vfork()函数和fork()基本相同,所不同的是不拷贝父进程页表项。vfork()系统调用的实现是通过向clone()系统调用传递一个特殊标志来进行:
1、在调用copy_process()函数时,task_struct的vfork_done被置为NULL
2、 在执行do_fork()函数时,如果给定特别标志,则vfork()会指向一个特殊地址。
3、 子进程开始执行后,父进程不是马上恢复执行,而是一直等待子进程通过vfork_done指针向它发送信号。
4、 在调用mm_release()时,该函数用于进程退出内存地址空间,并检查vfork_done是否为空,如果不为空,则向父进程发送信号。
分享到:
相关推荐
### LINUX进程管理实验知识点解析 #### 一、进程与程序的区别 在进行LINUX进程管理实验之前,首先需要理解进程与程序之间的区别。程序是指令的集合,是静态的,而进程则是程序的一次动态执行过程,具有生命周期,...
在Unix/Linux系统中,进程池(Process Pool)是一种高效的进程管理机制,广泛应用于服务器和后台服务,例如银行系统。进程池的基本思想是预先创建一组进程,这些进程在池中待命,等待处理到来的任务,而不是每次有新...
2. 进程管理 Linux 进程管理是通过进程管理工具实现的,如 ps、kill、pgrep 等工具。 2.1 ps 监视进程工具 ps 命令用来查看进程的信息,提供了进程的一次性的查看结果,但不提供实时监控。ps 命令有很多选项参数...
### 进程的基本概念 #### 1. 进程的定义 ...综上所述,Linux 进程管理涉及了进程的概念、类型、启动方式以及常用的进程管理命令。理解和掌握这些内容对于有效地管理和优化Linux系统的性能至关重要。
linux进程管理分析
Linux 进程管理实验 本实验的目的是了解 Linux 进程管理的基本概念和相关系统调用,掌握父进程和子进程的内存映像,实现软中断通信和进程的管道通信。 一、基本概念 * 进程管理:是操作系统中负责管理进程的模块...
Linux 进程基本管理与进程控制 Linux 进程基本管理是计算机操作系统中一个非常重要的概念,它涉及到进程的创建、管理和控制。在 Linux 环境下,进程是操作系统中一个基本的执行单元,每个进程都有其自己的虚拟地址...
Linux 进程管理 Linux 进程管理是 Linux 操作系统中的一项重要功能, Linux 是一个多任务多用户操作系统,每一个进程都具有一定的功能和权限,它们都运行在各自独立的虚拟地址空间。进程是系统资源分配的基本单位...
在Linux操作系统中,进程管理是系统管理的核心部分,它涉及到计算机如何有效地运行多个程序并确保它们协同工作。这个“Linux下进程管理实验”旨在帮助我们深入理解进程的概念,以及它们与程序之间的区别,同时探讨...
四大命令助你玩转Linux进程管理 命令 Linux 进程管理
在Linux服务器管理中,进程管理是一项基础且至关重要的任务,它涉及到系统性能监控、资源调度以及问题排查。本文将深入探讨Linux的进程管理方法,特别是如何使用`ps`和`top`这两个命令来查看和监视进程状态。 首先...
### Linux 进程管理知识点详解 #### 进程组成 - **正文段**:这部分包含了进程需要执行的程序代码,具体地,它描述了进程所要实现的功能逻辑。 - **用户数据段**:用于存储正文段执行时所需的数据以及工作区,比如...
Linux进程管理和网络管理是Linux系统运维中非常重要的两个方面,涉及到系统性能监控、服务维护、故障排查等多个环节,是系统管理员必备的技能之一。 一、Linux进程管理 1. 进程概念 进程是计算机中的程序关于某...
模拟 LINUX 模拟进程管理 本系统实现了进程调度、进程控制、进程同步等功能,模拟了 LINUX 操作系统的进程管理机制。系统设计了三个并发进程,分别是进程 0、进程 1 和进程 2,每个进程都有其特定的执行代码和...
1、linux进程管理的模块组织框架 2、相关数据结构。 3、进程调度原则,调度算法,。 4、进程的创建和运行管理。 5、进程间通讯。 6、更多的技术 进程调度和中断处理交接 进程管理涉及的内核机制:bottom-half处理...
Linux进程管理实验中涉及的核心知识点包括Linux操作系统中进程的概念、进程控制块(PCB)的结构、进程状态转换、fork()系统调用的工作原理以及相关内核函数。下面将详细解释这些概念和技术点。 Linux中的进程是一个...
实验2 Linux进程管理.pdf
通过分析这个程序,我们可以深入了解Linux进程管理的相关知识点。 首先,我们要理解Linux中的进程。在Linux中,进程是程序的一次动态执行过程,是系统进行资源分配和调度的基本单位。每个进程都有一个唯一的进程ID...
Linux进程管理代码分析
这个压缩包中的资源提供了丰富的Linux学习资料,包括各种操作、所有管理命令、磁盘管理、用户管理、服务器管理和进程管理等内容。以下是对这些主题的详细解释: 一、Linux基本操作 Linux的基本操作包括文件和目录...