zoukankan      html  css  js  c++  java
  • Linux进程管理(1)

     

    进程是执行期间的程序及其它所包含的资源的总称。

     

    进程通过fork()系统调用产生,该系统调用通过复制一个现有进程来创建一个全新的进程。fork()调用一次返回两次:一次回到父进程、一次回到新创建的子进程。

     

    进程描述符及任务结构

     

    内核把进程放在task list的双向循环链表中,其中每一项都是一个task_struct结构(即进程描述符)。task_struct结构比较大(32位机器上约1.7K),包含了内核管理进程所需的全部信息。

     

    Linux通过slab分配器分配task_struct结构,以达到对象复用和缓存着色的目的。

     

    每个进程通过pid来标识,默认最大值为32768,可以通过/proc/sys/kernel/pid_max修改。

     

    thread_info结构

     

    struct thread_info {

         struct task_struct     *task;           /* main task structure */

         struct exec_domain     *exec_domain;     /* execution domain */

         unsigned long          flags;          /* low level flags */

         unsigned long          status;          /* thread-synchronous flags */

         __u32               cpu ;          /* current CPU */

         int               preempt_count ;     /* 0 => preemptable, <0 => BUG */

     

     

         mm_segment_t          addr_limit ;     /* thread address space:

                                     0-0xBFFFFFFF for user-thead

                                     0-0xFFFFFFFF for kernel-thread

                                  */

         void               *sysenter_return;

         struct restart_block    restart_block ;

     

         unsigned long           previous_esp;   /* ESP of the previous stack in case

                                     of nested (IRQ) stacks

                                  */

         __u8               supervisor_stack [0];

    };

     

    该结构在内核栈的尾端分配。

     

    如何查找当前正在运行进程的进程描述符

     

     

     

    为什么要屏蔽掉低13位(当THREAD_SIZE为8192时):

     

    内核中的栈是从高地址到低地址,thread_info和内核栈(内核态堆栈)共享同一块内存, 而每个任务的thread_info在内核栈的尾端分配.

     

  • 相关阅读:
    .net基础学java系列(一)视野
    技术栈
    Apollo(阿波罗)携程开源配置管理中心
    .NET 动态调用WCF
    RPC 工作原理
    ServiceStack 简单使用
    PRC 框架选择
    栈vs堆,最详细的对比
    使用SuperSocket打造逾10万长连接的Socket服务
    开源项目练习EF+jQueryUI前后端分离设计
  • 原文地址:https://www.cnblogs.com/feisky/p/2433253.html
Copyright © 2011-2022 走看看