Linux-进程概念

本文详细阐述了进程的基本概念,包括进程在内核中的角色,以及Linux中的进程描述和组织(如PCB和task_struct)。介绍了进程状态、优先级、内存管理、程序计数器和上下文数据等关键概念,以及并发、竞争性和独立性的特点。

1. 进程基本概念

        书面概念:程序的一个执行实例,正在执行的程序等

        内核概念:担当分配系统资源(CPU时间,内存)的实体。

2. 描述和组织进程-PCB

        PCB(process contral block),进程信息被放在一个叫进程信息控制块的数据结构里面,在Linux下,PCB是:task_strut

        每一个进程都会对应生成一个task_struc,操作系统通过这个结构体来管理进程。

        这些task_struc会以链表的形式存在内核中,操作系统通过增删查改这个链表来管理这些进程。

3. task_struc包含内容

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。 其他信息

3.1 标识符

        进程用PID(process id)来标识,可以通过三种方式来查看:

1. /proc 目录

ls /proc

所有进程都会放在这个目录下,还可以通过

ls -al /proc/(pid)

获得进程的详细信息

这里cwd就是表示可执行程序的当前工作目录

2. ps

ps axj

显示所有的进程

ps -axj | head -1 && ps -axj | grep myproc | grep -v grep

 查询单个进程

3. top

3.2 进程状态

进程状态(STAT)在系统层面可以大致分成以下几种:

  • 新建:进程刚刚创建出来,代码和数据还没有加载到内存中
  • 运行:进程被放到了,CPU的运行队列中
  • 阻塞:等待非CPU资源就为,例如位于磁盘读取等待队列
  • 挂起:在内存资源不足时,OS通过适当的置换进程的代码和数据到磁盘(swap)来缓解内存不足

在Linux下,task_struc的进程状态可以分为下面几种:

  • R(runing)
  • S(sleeping)
  • D(disk sleep)
  • T(stopped)
  • t (tarcing stop)
  • X(dead)
  • Z (zombie)

R运行状态:对应运行态

S睡眠状态:对应阻塞态,可中断睡眠

D磁盘休眠状态:进程不可以被中断,需要等待io完成,磁盘返回信息,结束休眠状态,不可中断睡眠

T停止状态:通过信号来暂停进程,例如(kill -19 pid),也可以通过信号来结束停止状态例如(kill -18 pid)

t调试状态:和暂停状态一样,是由调试暂停引起的进程暂停

X死亡状态:这个状态只是一个返回状态,你不会在任务列表里看到这个状态

Z僵尸状态:当子进程退出,并且父进程没有读取到子进程退出的返回代码时,就会产生僵死(尸)进程

这个状态下,子进程的PCB会被保留下来

还有一种叫孤儿进程:父进程先退出,子进程就称之为“孤儿进程”,孤儿进程会被1号init进程领养,结束时再被init进程回收

注意:

R+表示程序运行,在前台

./myproc&

就可以让程序在后台运行,状态就是R

3.3 优先级

cpu资源分配的先后顺序,就是指进程的优先权(priority)

查看进程优先级:

ps -l

这里PRI就是priority的简写,NI是nice的简写

PRI值越小,优先级越高,越早被执行

nice值,表示进程可被执行的优先级的修正数值,可以通过修改nice来改变PRI

PRI(new)= PRI(old)+ NI

PRI(old)表示进程创建时的默认优先级。

NI值的取值范围【-20,19】

修改进程优先级:

top -> 'r' ->输入进程的PID -> 输入nice值

3.4 内存指针

struct mm_struct *mm;

task_struct里面有一个指针指向mm_struct这样的一个结构体

在mm_struct中包含对应内存中的地址空间的begin和end,描述进程所需内存的区域划分。

3.5 程序计数器

cpu内会有一些寄存器,其中有一个EIP寄存器记录进程的下一次执行代码的地址,EIP的值从task_struct中的pc指针中获取(point code)

3.6 上下文数据

为了更好的理解这里,先提出进程并发的概念

一个CPU在一个时刻只能执行一个进程,但是CPU是一个一个处理进程的吗?

其实不是,每的进程在CPU上只跑一小会,不论进程完成的程度怎么样,都要退下来,让下一个进程继续执行。一小会假定是10ms,那么在一秒钟CPU就可以跑100个进程。在短时间内,我们可以认为,CPU在同时执行这些进程,这些进程也在同步进行。

对于一个进程而言,这次CPU执行到这里,下次CPU来了要继续从这里执行下去。所以就需要保存程序执行时产生的数据和代码执行到的对应位置。CPU下次通过寄存器直接获取这些数据,就可以继续下去。

这些数据就叫上下文数据,由task_struct来保存。

这样子做到了,CPU在不同进程间的切换

4. 其他概念

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行

并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为 并发

关于进程的更多内容敬请关注Linux-地址空间

### Linux 进程基本概念详解 Linux 系统中的进程是操作系统进行资源分配和调度的基本单位,每个运行中的程序都对应一个进程进程的管理与调度是操作系统的核心功能之一[^1]。以下将从多个方面对 Linux 进程的基本概念进行详细说明。 #### 1. 进程的状态 在 Linux 系统中,进程具有多种状态,这些状态反映了进程当前的行为和生命周期。通常,Linux 中的进程有以下几个主要状态: - **创建状态**:当一个新的进程被创建时,它处于此状态。 - **就绪状态**:进程已经准备好运行,等待 CPU 资源分配。 - **执行状态**:进程正在 CPU 上运行。 - **阻塞状态(等待状态)**:进程因等待某些事件(如 I/O 操作完成)而暂停运行。 - **终止状态**:进程已完成或被终止。 此外,Linux 特有的状态还包括: - **D状态(不可中断的睡眠状态)**:这是一种深度睡眠状态,通常发生在进程与硬件交互时,例如等待慢速设备完成操作。该状态下的进程无法被信号唤醒或终止,只能通过等待其完成或重启系统来解决[^2]。 - **Z状态(僵尸状态)**:当子进程退出后,父进程尚未回收其退出状态时,子进程会进入僵尸状态。这种状态的进程仅保留在进程表中,不占用任何实际资源[^5]。 #### 2. 进程控制块(PCB) 每个进程都有一个对应的进程控制块(Process Control Block, PCB),它是操作系统用来描述和管理进程的数据结构。PCB 包含了进程的所有信息,包括但不限于: - 进程标识符(PID- 内存管理信息 - CPU 寄存器状态 - 文件描述符表 - 其他资源使用情况 PCB 是操作系统管理和调度进程的基础,通过它,操作系统可以跟踪和控制每个进程的运行状态[^4]。 #### 3. 进程的优先级与竞争性 由于系统中可能存在大量的进程,而 CPU 的资源有限,因此进程之间存在竞争关系。为了更高效地完成任务,操作系统引入了进程优先级的概念进程优先级决定了进程在 CPU 调度中的顺序,高优先级的进程通常会优先获得 CPU 资源。可以通过 `nice` 命令调整进程的优先级[^3]。 #### 4. 进程的并行与并发 - **并行**:在多核或多 CPU 系统中,多个进程可以同时运行,这称为并行。 - **并发**:在单核 CPU 系统中,操作系统通过时间片轮转等调度策略,在一段时间内让多个进程轮流运行,从而实现并发的效果[^3]。 #### 5. 创建子进程Linux 系统中,可以通过 `fork()` 系统调用创建子进程。`fork()` 函数会复制当前进程的所有资源,并生成一个几乎完全相同的子进程。子进程拥有独立的地址空间和资源,但继承了父进程的部分属性,例如文件描述符和环境变量[^4]。 ```python import os pid = os.fork() if pid == 0: # 子进程代码 print("子进程 PID:", os.getpid()) else: # 父进程代码 print("父进程 PID:", os.getpid(), "子进程 PID:", pid) ``` #### 6. 查看进程 Linux 提供了多种工具用于查看和管理进程,例如: - `ps` 命令:显示当前系统的进程状态。 - `top` 命令:实时监控系统中各个进程的资源使用情况。 - `kill` 命令:向指定进程发送信号以终止或控制其行为。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值