zoukankan      html  css  js  c++  java
  • (三)进程

    一、进程概念
    进程是程序执行的一个实例。操作系统会以进程为单位,分配系统资源,进程是资源分配的最小单位。

    Linux进程的四大要素
    1:一段供进程执行的程序,该程序可以被多个进程执行。
    2:独立的内核堆栈。
    3:进程控制快(task_struct:有了这个数据结构,进程才能成为内核调度的一个基本单位接受内核的调度。同时,这个结构还记录着进程所占用的各项资源。
    4:独立的存储空间:即拥有专有的用户空间,除了前面的内核空间还有用户空间。

    二、进程描述符
    1.进程描述符包含了与一个进程相关的所有信息。
    struct task_struct{
     进程信息
     }

    2.进程描述符处理
    对于每一个进程而言,内核为其单独分配了一个内存区域,这个区域存储的是内核栈和该进程所对应的一个小型进程描述符——thread_info结构。
    struct thread_info { 

    }

    三、进程状态

      可运行(TASK_RUNNING)

      可中断的等待(TASK_INTERRUPTBLE)

      不可中断的等待(TASK_UNINTERRUPTILBE)

      暂停(TASK_STOPPED)

      跟踪(TASK_TRACED)

      僵死(TASK_ZOMBIE)

      僵死撤销(EXIT_DEAD)

    线程
    线程存在于进程当中,是操作系统调度执行的最小单位。说通俗点,线程就是干活的。

    四、进程间关系

    进程0和进程1由内核创建,进程1(init)是其他所有进程的祖先。

    五、进程与等待队列
    等待队列(wait queue)用于使进程带等待某一特定的事件发生,而无需频繁的轮询操作,进程在等待时间内睡眠,在等待的事件发生时由内核自动唤醒

    1.等待队列相关数据结构
    每一个等待队列都由两部分组成:等待队列头(struct wait_queue_head_t)和等待队列成员(struct wait_queue)。

    1. struct __wait_queue_head {  
    2.     spinlock_t lock; /*因为等待队列可以在中断时随时修改,因此设置一个自旋锁保证一致性*/  
    3.     struct list_head task_list;  
    4. };  
    5. typedef struct __wait_queue_head wait_queue_head_t;  
    6.   
    7. struct __wait_queue {  
    8.     unsigned int flags; /*指明等待的进程是互斥进程还是非互斥进程*/  
    9.     struct task_struct *task; /*指向任务的task_struct*/  
    10.     wait_queue_func_t func;  
    11.     struct list_head task_list;  
    12. };  
    13. typedef struct __wait_queue_head wait_queue_head_t 
    2.等待队列的使用分为以下两部分:
    (1)为使当前进程在一个等待队列中睡眠,需要调用wait_event(或某个等价函数),此后,进程进入睡眠,将控制权交给调度器。以块设备为例,当内核向块设备发出请求后,因为数据传输不会立即发生,因此进程睡眠
    (2)相对应的,是当数据到达后,必须调用wake_up函数(或某个等价函数)来唤醒等待队列中睡眠的进程

     五、进程创建

    fork   vfork

  • 相关阅读:
    Linux下安装Flume
    [译]MIT6.824_1.1分布式系统介绍——驱动力与挑战
    MySQL-Canal-Kafka数据复制详解
    Linux下搭建Kafka集群
    我在创业公司的云原生之旅
    使用go向es进行数据操作脚本
    kubectl exec 向pod的文件中增加内容
    kubernetes资源导出小脚本
    面试题(四) -- 第一次当面试官
    gitlab备份检查小脚本
  • 原文地址:https://www.cnblogs.com/liuchengchuxiao/p/4207350.html
Copyright © 2011-2022 走看看