进程的概念

本文详细解释了进程的概念,区分了进程与程序的不同,并介绍了进程的六种状态及其转换情况。此外,还展示了进程虚拟内存空间的组成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程的概念
进程是一个独立的可调度的任务,是程序的一次可执行的过程,是操作系统进行资源分配和调度的基本单元;

进程与程序的区别: 程序是指令和数据的有序 集合 ,其本身没有任何运行的含义,是一个静态的概念。而进程是程序在 处理机 上的一次执行过程,它是一个动态的概念。
程序可以作为一种 软件资料长期存在,而进程是有一定生命期的。程序是永久的,进程是暂时的。
进程更能真实地描述并发,而程序不能;
进程具有创建其他进程的功能,而程序没有。
同一程序同时运行于若干个数据集合上,它将属于若干个不同的进程,也就是说同一程序可以对应多个进程。
在传统的 操作系统中,程序并不能独立运行,作为资源分配和独立运行的 基本单元都是进程。
//简单的说程序是存放在磁盘上的指令集,是一个静态的概念;进程是一个动态的概念,有创建、调度、消亡等过程


进程的状态
  1. 运行状态(TASK_RUNNING):进程当前正在运行,或者正在运行队列中等待调度。
  2. 可中断的阻塞状态(TASK_INTERRUPTIBLE):进程处于阻塞(睡眠)状态,正在等待某件事发生或能够占用某些资源。处在这种状态下的进程可以被信号中断。接受到信号或被显示地唤醒呼叫(如调用wake_up、wake_up_interruptible等),进程将会转换成TASK_RUNNING状态。
  3. 不可中断的阻塞状态(TASK_UNINTERRUPIBLE):与第二个相似,只是它不会被信号中断。这种状态很有用。只有在它所等待的事件发生时,进程才被显示地唤醒呼叫唤醒。
  4. 暂停状态(TASK_STOPPED):进程的执行被暂停,当进程受到SIGSTOP、SIGSTP、SIGTTIN、SIGTTOU等信号。就会进入暂停状态。
  5. 僵尸状态(EXIT_ZOMBIE):子进程运行结束,父进程尚未使用wait函数族等系统调用收回退出状态。处在改状态下的子进程已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调回,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其父进程收集。
      6.消亡状态(EXIT_DEAD):这是最终状态,父进程调用wait函数族回收之后。子进程彻底由系统删除。

下面是进程的状态图(网上盗来的):



每一进程的用户空间都是完全独立互不相干的。进程是由正文段程序段数据段三部分组成;
该图是进程的虚拟内存空间地址

内存虚拟内核

堆栈

Linux动态链接

共享库的内存映射区

数据段(.data .bss)

只读段

(.init .text .rodata )

 

用户空间包括以下几个功能区域
  1. 只读段:包含了代码段(.init .text)和只读数据段(.rodata
  2. 数据段:存放全局变量和静态变量。可读可写(.data)段存放了已经初始化的全局变量和静态变量,BSS(.bss)段存放的是未初始化的全局变量和静态变量
  3. 栈:由系统自动分配和释放。存放函数值、局部变量、返回值等。
  4. 堆:存放动态分配的数据。
  5. 共享映射区:这是linux动态链接和其他共享代码的映射区域。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值