`
kjkhi
  • 浏览: 184833 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

linux进程管理

阅读更多
无论是Windows还是Linux系统都涉及进程和线程的概念。进程是系统调度的最小单位,线程是系统资源分配的最小单位。进程/线程调度(低级调度)的性能直接影响操作系统的性能。以下主要想讨论以下Linux系统的进程管理。

Linux系统中通过调用fork()系统调用创建新进程的,该系统调用通过复制一个现有的进程来创建一个新进程。fork()系统调用从内核返回两次:一次回到父进程,另一次回到新的子进程。

通常,创建新的进程都是为了马上执行!在Linux中,调用exec*()这族函数可以创建新的地址空间,并把新的进程载入。进程通过调用exit()系统调用退出执行。

Linux内核把进程存放在任务队列(task list)双向链表中。链表中每一项都是task_struct类型,称为进程描述符的结构,祥见linux/sched.h文件
// 这里是任务(进程)数据结构,或称为进程描述符。
// ==========================
// long state 任务的运行状态(-1 不可运行,0 可运行(就绪),>0 已停止)。
// long counter 任务运行时间计数(递减)(滴答数),运行时间片。
// long priority 运行优先数。任务开始运行时counter = priority,越大运行越长。
// long signal 信号。是位图,每个比特位代表一种信号,信号值=位偏移值+1。
// struct sigaction sigaction[32] 信号执行属性结构,对应信号将要执行的操作和标志信息。
// long blocked 进程信号屏蔽码(对应信号位图)。
// --------------------------
// int exit_code 任务执行停止的退出码,其父进程会取。
// unsigned long start_code 代码段地址。
// unsigned long end_code 代码长度(字节数)。
// unsigned long end_data 代码长度 + 数据长度(字节数)。
// unsigned long brk 总长度(字节数)。
// unsigned long start_stack 堆栈段地址。
// long pid 进程标识号(进程号)。
// long father 父进程号。
// long pgrp 父进程组号。
// long session 会话号。
// long leader 会话首领。
// unsigned short uid 用户标识号(用户id)。
// unsigned short euid 有效用户id。
// unsigned short suid 保存的用户id。
// unsigned short gid 组标识号(组id)。
// unsigned short egid 有效组id。
// unsigned short sgid 保存的组id。
// long alarm 报警定时值(滴答数)。
// long utime 用户态运行时间(滴答数)。
// long stime 系统态运行时间(滴答数)。
// long cutime 子进程用户态运行时间。
// long cstime 子进程系统态运行时间。
// long start_time 进程开始运行时刻。
// unsigned short used_math 标志:是否使用了协处理器。
// --------------------------
// int tty 进程使用tty 的子设备号。-1 表示没有使用。
// unsigned short umask 文件创建属性屏蔽位。
// struct m_inode * pwd 当前工作目录i 节点结构。
// struct m_inode * root 根目录i 节点结构。
// struct m_inode * executable 执行文件i 节点结构。
// unsigned long close_on_exec 执行时关闭文件句柄位图标志。(参见include/fcntl.h)
// struct file * filp[NR_OPEN] 进程使用的文件表结构。
// --------------------------
// struct desc_struct ldt[3] 本任务的局部表描述符。0-空,1-代码段cs,2-数据和堆栈段ds&ss。
// --------------------------
// struct tss_struct tss 本进程的任务状态段信息结构。
// ==========================
struct task_struct
{
/* these are hardcoded - don't touch */
	long state;			/* -1 unrunnable, 0 runnable, >0 stopped */
	long counter;
	long priority;
	long signal;
	struct sigaction sigaction[32];
	long blocked;			/* bitmap of masked signals */
/* various fields */
	int exit_code;
	unsigned long start_code, end_code, end_data, brk, start_stack;
	long pid, father, pgrp, session, leader;
	unsigned short uid, euid, suid;
	unsigned short gid, egid, sgid;
	long alarm;
	long utime, stime, cutime, cstime, start_time;
	unsigned short used_math;
/* file system info */
	int tty;			/* -1 if no tty, so it must be signed */
	unsigned short umask;
	struct m_inode *pwd;
	struct m_inode *root;
	struct m_inode *executable;
	unsigned long close_on_exec;
	struct file *filp[NR_OPEN];
/* ldt for this task 0 - zero 1 - cs 2 - ds&ss */
	struct desc_struct ldt[3];
/* tss for this task */
	struct tss_struct tss;
};


每个进程的内核栈底部还分配了一个thread_info的结构数据,使在汇编代码中计算其偏移量变得相对简单。thread_info结构定义在asm/thread_info.h文件中。

通过current宏可以取得正在运行的进程的进程描述符,current把栈指针的后13个有效位屏蔽,用来计算出thread_info的偏移,该操作通过current_thread_info()函数完成。再从thread_info的task域取得并返回task_struct的地址:
current_thread_info()->task


在linux中,进程有五种状态:(在linux/sched.h文件中定义)
// 这里定义了进程运行可能处的状态。
#define TASK_RUNNING 0		// 进程正在运行或已准备就绪。
#define TASK_INTERRUPTIBLE 1	// 进程处于可中断等待状态。
#define TASK_UNINTERRUPTIBLE 2	// 进程处于不可中断等待状态,主要用于I/O 操作等待。
#define TASK_ZOMBIE 3		// 进程处于僵死状态,已经停止运行,但父进程还没发信号。
#define TASK_STOPPED 4		// 进程已停止。


在task_struct的state域中保存进程的状态。设置某进程的状态,可以通过set_task_state(task,state)函数完成。当然也可以使用set_current_state(state)。
0
8
分享到:
评论

相关推荐

    LINUX进程管理实验

    ### LINUX进程管理实验知识点解析 #### 一、进程与程序的区别 在进行LINUX进程管理实验之前,首先需要理解进程与程序之间的区别。程序是指令的集合,是静态的,而进程则是程序的一次动态执行过程,具有生命周期,...

    Linux 进程管理命令

    Linux 进程管理命令 Linux 进程管理命令是 Linux 操作系统中用于管理进程的命令,它们是 Linux 系统管理员的基本工具。这些命令可以用来查看、管理和控制进程,从而确保系统的稳定运行。 1. 程序和进程 在 Linux ...

    linux进程管理实验

    Linux 进程管理实验 本实验的目的是了解 Linux 进程管理的基本概念和相关系统调用,掌握父进程和子进程的内存映像,实现软中断通信和进程的管道通信。 一、基本概念 * 进程管理:是操作系统中负责管理进程的模块...

    linux进程管理分析

    linux进程管理分析

    四大命令助你玩转Linux进程管理

    四大命令助你玩转Linux进程管理 命令 Linux 进程管理

    Linux进程管理和网络管理.pdf

    Linux进程管理和网络管理是Linux系统运维中非常重要的两个方面,涉及到系统性能监控、服务维护、故障排查等多个环节,是系统管理员必备的技能之一。 一、Linux进程管理 1. 进程概念 进程是计算机中的程序关于某...

    Linux 进程管理PPT

    ### Linux 进程管理知识点详解 #### 进程组成 - **正文段**:这部分包含了进程需要执行的程序代码,具体地,它描述了进程所要实现的功能逻辑。 - **用户数据段**:用于存储正文段执行时所需的数据以及工作区,比如...

    linux 进程管理

    通过以上介绍,我们可以看到Linux进程管理涉及到的工具和命令非常实用,能够帮助用户有效地监控和控制进程,从而保证系统的高效稳定运行。对于Linux用户来说,熟练掌握这些工具和命令是十分必要的。

    Linux进程管理实验.pdf

    Linux进程管理实验中涉及的核心知识点包括Linux操作系统中进程的概念、进程控制块(PCB)的结构、进程状态转换、fork()系统调用的工作原理以及相关内核函数。下面将详细解释这些概念和技术点。 Linux中的进程是一个...

    Linux服务器配置与管理:linux进程管理.pptx

    在Linux服务器管理中,进程管理是一项基础且至关重要的任务,它涉及到系统性能监控、资源调度以及问题排查。本文将深入探讨Linux的进程管理方法,特别是如何使用`ps`和`top`这两个命令来查看和监视进程状态。 首先...

    L5 Linux进程管理1

    L5 Linux进程管理1 Linux进程管理是 Linux 操作系统中一个非常重要的概念,它控制着系统中的进程资源分配和调度。本章节将从 Linux 进程概念、进程控制块 task_struct 结构、Linux 进程的创建、Linux 进程调度等...

    操作系统(Linux进程管理

    操作系统中的Linux进程管理是计算机科学中的核心概念,尤其在服务器和嵌入式系统中尤为重要。在Linux环境下,进程是操作系统中资源分配和任务调度的基本单位,它代表了正在执行的程序的一个实例。本节主要围绕进程的...

    linux-process-management.zip_linux进程管理

    本文将深入剖析Linux进程管理,探讨其生命周期,以及与用户进程创建、内存管理、调度和销毁相关的内核机制。 首先,Linux进程的生命周期包括创建、执行、等待、停止、继续执行和终止几个阶段。创建进程通常通过`...

    Linux 进程管理 实验说明

    Linux 进程管理实验说明 Linux 进程管理是 Linux 操作系统中的一项重要功能,它负责管理系统中的进程资源,包括进程创建、进程调度、进程同步、进程通信等。下面是 Linux 进程管理实验说明中的一些重要知识点: 一...

    linux linux进程管理 常用命令

    Linux 进程管理常用命令 Linux 进程管理是 Linux 系统管理员和普通用户的一项重要任务,主要是监视系统进程的运行状况,并适时终止一些失控的进程。本文将为您介绍 Linux 进程管理的常用命令和应用场景。 1. ps ...

    Linux进程管理

    Linux进程管理是操作系统中一个非常核心的组成部分,它负责对系统中的进程进行调度、监视和控制。进程是操作系统进行资源分配和调度的基本单位,是程序执行时的一个实例。每个进程都有自己的生命周期,包括创建、...

    处理机管理之Linux进程管理

    本文将详细探讨Linux进程管理的相关知识点。 首先,进程是操作系统中运行程序的实例,是系统资源分配的基本单位。在Linux中,每一个进程都有其特定的组成结构。进程由正文段、用户数据段和系统数据段三部分构成。...

    UNIX Linux实验教程 3实验三Linux进程管理与控制.doc

    UNIX/Linux 进程管理与控制 UNIX/Linux 操作系统中,进程是操作系统的主要服务对象,操作系统的主要职责就是将各类系统资源有效、合理地分配给系统中进程使用,实现各种应用功能。进程的主要特性有动态性、并发性...

    东南大学操作系统课程设计——Linux进程管理及其扩展

    此资源包含完整实验报告(加上你的学号姓名即可提交)

Global site tag (gtag.js) - Google Analytics