进程和线程

本文详细介绍了进程与线程的概念,包括进程作为系统资源分配的单位,线程作为执行的基本单位,以及它们之间的区别。内容涵盖进程的组成、内存空间布局、状态切换、生命周期,以及进程间通信的多种方式如管道、信号、共享内存和消息队列。同时,文章还讨论了线程的资源共享和同步互斥问题。
摘要由CSDN通过智能技术生成

多进程与多线程:进程是系统资源分配的最小单位,线程是程序执行的最小单位,即CPU调度的基本单位。

  • 进程是执行中的目标码( executable object code),正在运行中的程序。进程是由数据、资源、状态及虚拟的一个计算机 组成的。
    在这里插入图片描述

  • 可执行格式包括:元数据(meta data)及多个代码和数据段(sections of code and data)。这些段是会被加载进内存的线性块的目标码( linear chunk)。

    • 最重要和最常用的段是text段(也就是code段)、 data段和bss段。
      text段 包含可执行的代码及只读数据(const),通常被标识成只读或可执行
      data段 包含已经初始化的数据(例如定义过初始值的C 变量 ),通常被标识成可檫写
      bss段 包含尚未初始化的全局变量,内核会将此段映射成zero page (填满零的页面)。
  • 进程还会涉及由内核仲裁和管理的各种系统资源,进程通常只能通过系统调用来请求和操作资源(包括定时器、未决信号、已打开的文件、网络连接、硬件以及IPC机制)。

  • 在内核中,一个进程所配的资源会随着进程相关的数据及统计值,一同被存入进程中的进程描述符(process descriptor)。

    • 进程是一个虚拟的抽象对象,内核支持抢占式多任务处理(preemptive multitasking)和虚拟内存(virtual memory),并为进程提供虚拟化的处理器及内存的虚拟化视图。多个进程可能同时参加调度,但在运行时,每个进程都好像在独自掌控整个系统一样。事实上:内核会无间隙且透明的抢占和重新调用进程(preempts and reschedule process),与正在运行的所有进程共享处理器。因为每个进程被分配单一的线性地址空间,给出每个进程在独自控制系统中所有内存的假象。举例:电表程序可以看成是一个进程。
    • 内核通过现代处理器所提供的硬件支持,来管理虚拟内存和页面调度(paging)机制,让每个进程各自运行在不同的地址空间中,允许多个进程并存在系统中。
  • 进程与程序:

    • 程序是包含可执行代码及执行代码需要的数据等信息的文件,存放在磁盘等介质上。
    • 当程序被操作系统装载到内存并分配给它一定的资源后,此时可以称为进程。
    • 程序是静态概念,进程是动态概念。
  • 进程在内核中的组织形式:进程控制块
    在这里插入图片描述

  • linux进程控制块:task_struct结构
    pid_t pid; struct list_head children,sibling;
    uid_t uid,euid; struct fs_struct *fs;
    gid_t gid,egid; struct files_struct *files;
    volatile long state; struct mm_struct *mm;
    int exit_state; struct signal_struct *signal;
    unsigned int rt_priority; struct sighand_struct *sighand;
    unsigned int policy; cputime_t utime,stime;
    struct list_head tasks; struct timespec start_time;
    struct task_struct *real_parent; struct timespec real_start_time;
    struct task_struct *parent;

    • task_struct :进程状态:
      进程状态 state成员的可能取值如下
      volatile long state; #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_ZOMBIE 4 #define TASK_STOPPED 8
      • 进程状态切换:
        在这里插入图片描述
  • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值