进程管理

原创 2012年03月27日 09:02:48

1. 创建一个进程

 fork()系统调用通过复制一个现有的进程来创建一个新进程。  fork()系统调用从内核返回了2次,一次回到父进程,一次回到子进程。fork() 实际上是由clone()系统调用来实现的。 vfork()除了不拷贝父进程的页表项外,和fork功能相同

 2. Linux把进程的列表放在叫做任务队列(task list)的双向循环链表中。

链表中的每一项都是类型为task_struct,称为进程描述符的结构(定义在linux/sched.h中)。进程描述符包含一个具体进程的所有信息。

struct task_struct {
        volatile long state;    /* -1 unrunnable, 0 runnable, >0 stopped */
        void *stack;
        atomic_t usage;
        unsigned int flags;     /* per process flags, defined below */
        unsigned int ptrace;
#ifdef CONFIG_SMP
        struct task_struct *wake_entry;
        int on_cpu;
#endif
        int on_rq;
        int prio, static_prio, normal_prio;
        unsigned int rt_priority;
        const struct sched_class *sched_class;
        struct sched_entity se;
        struct sched_rt_entity rt;

        pid_t pid;  //进程的pid

 

        /*
         * pointers to (original) parent process, youngest child, younger sibling,
         * older sibling, respectively.  (p->father can be replaced with
         * p->real_parent->pid)
         */
        struct task_struct *real_parent; /* real parent process */
        struct task_struct *parent; /* recipient of SIGCHLD, wait4() reports */
        /*
         * children/sibling forms the list of my natural children
         */
        struct list_head children;      /* list of my children */
        struct list_head sibling;       /* linkage in my parent's children list */
        struct task_struct *group_leader;       /* threadgroup leader */

...............

}

Linux 通过slab分配器分配task_struct结构。在(进程的内核栈)栈顶或栈底创建一个新的结构struct thread_info.

struct thread_info {
        struct task_struct      *task;          /* main task structure */
        struct exec_domain      *exec_domain;   /* execution domain */
        __u32                   flags;          /* low level flags */
        __u32                   status;         /* thread synchronous flags */
        __u32                   cpu;            /* current CPU */
        int                     preempt_count;  /* 0 => preemptable,
                                                   <0 => BUG */
此结构中task指向该任务实际的task_struct的指针。

3. 进程的优先级

Linux采用2中不同的优先级范围:

a) nice值,-20到+19.nice  值越大优先级越低,默认是0.

b) 实时优先级,从0到99.任何实时优先级都比不同进程高。值越大优先级越高。

4. Linux的调度算法

Linux的调度器是以模块方式提供的,这样做的目的是允许不同类型进程可以有针对性的选择调度算法。这种某块化的结构成为 调度器类。

完全公平调度(CFS)是一个针对普通进程的调度类。

Android进程管理(详解)

Android的原理-不需要太多的剩余内存     不用在意剩余内存的大小.其实很多人都是把使用其他系统的习惯带过来来了.安卓Android大多应用没有退出的设计其实是有道理的,...
  • RuingMan
  • RuingMan
  • 2016年05月09日 11:10
  • 2569

【Linux】进程管理和查看

1.什么是进程  进程是正在执行的程序或命令,每一个进程都是一个正在运行的实体,都有自己的地址空间,并占用一定的系统资源。注意,进程跟线程不是一个概念。对于到底什么是进程,其实不用死扣概念,就把它当做...
  • ww1473345713
  • ww1473345713
  • 2016年06月08日 08:17
  • 298

操作系统实验二 进程管理

进程管理一.实验目的 1、 理解进程的概念,明确进程和程序的区别。 2、 理解并发执行的实质。 3、 掌握进程的创建、睡眠、撤销等进程控制方法。 二.实验内容与基本要求 用C语言...
  • u011303443
  • u011303443
  • 2015年11月15日 12:09
  • 5792

linux下使用C或C++实现进程管理代码

一、前言:要在程序中启动某一程序,如果程序已经存在了,就不再启动。查找了N篇文档,有所收获,总结一下。 二、实现 大体分两种: 1、exec或popen执行ps的命令行,然后运用某几...
  • jisuanji_wjfioj
  • jisuanji_wjfioj
  • 2014年12月14日 10:05
  • 591

Java进程管理

import java.sql.Date; public class c extends Thread{ private int ID; static int sum11; st...
  • k1246195917
  • k1246195917
  • 2011年05月13日 11:08
  • 2083

操作系统——进程管理

进程管理 4.1 什么是进程 被执行的指令称为代码段。被加工的数据段称为源程序。生成的目标文件也是数据段。 进程是程序的一次执行过程。进程包括数据段和代码段,还有一个进程的控制块PCB。  ...
  • xuyuqingfeng953
  • xuyuqingfeng953
  • 2016年05月30日 20:49
  • 1052

操作系统的进程管理(c语言模拟)

今天就更一下,模拟进程管理程序。 #include #include #include #include //#define NULL 0 int shumu=0; //进程的内容结构体 str...
  • best_fiends_zxh
  • best_fiends_zxh
  • 2016年10月12日 12:30
  • 2729

用VB开发进程管理软件

 进程管理在Windows中是一个比较重要的内容,由于每一个正在运行的程序(包括Windows的后台程序和动态链接库)都对应有各自的进程,通过对进程的管理可以防止一些非法程序(如特洛伊木马程序)的运行...
  • caocg504
  • caocg504
  • 2008年01月10日 14:03
  • 287

操作系统——实验一.进程管理

#include "conio.h"                           #include "stdio.h" #include "stdlib.h"               ...
  • huoyahuoya
  • huoyahuoya
  • 2016年10月10日 23:11
  • 1540

深入浅出nodejs学习笔记--第九章 玩转进程管理

深入浅出nodejs学习笔记--第九章 玩转进程管理 简单总结了node基于单线程实现多进程的历史,以及一些方案...
  • u013707249
  • u013707249
  • 2017年04月20日 10:05
  • 553
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程管理
举报原因:
原因补充:

(最多只允许输入30个字)