不同操作系统下的PCD进程控制块

目录

进程控制块概述:... 1

LINUX下 PCB的结构... 1

windows下 PCB的结构... 6

UNIX下 PCB的结构... 7

华为鸿蒙HarmonyOS下 PCB的结构:... 8

进程控制块概述:

进程控制块(Processing Control Block),是操作系统核心中一种数据结构,主要表示进程状态。其作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位或与其它进程并发执行的进程。或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。 PCB通常是系统内存占用区中的一个连续存区,它存放着操作系统用于描述进程情况及控制进程运行所需的全部信息,它使一个在多道程序环境下不能独立运行的程序成为一个能独立运行的基本单位或一个能与其他进程并发执行的进程。

LINUX下 PCB的结构

核心内部成员包括:

PCB在linux中具体实现是task_struct数据结构,核心内部成员包括:

  1. 进程id。系统中每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负整数。
  2. 进程的状态,有就绪、运行、挂起、停止等状态。
  3. 进程切换时需要保存和恢复的一些CPU寄存器。
  4. 描述虚拟地址空间的信息。
  5. 描述控制终端的信息。
  6. 当前工作目录
  7. umask掩码。
  8. 文件描述符表,包含很多指向file结构体的指针。
  9. 和信号相关的信息。
  10. 用户id和组id。
  11. 会话(Session)和进程组。
  12. 进程可以使用的资源上限(Resource Limit)。

进程状态:

内核表示

含义

TASK_RUNNING

可运行

TASK_INTERRUPTIBLE

可中断的等待状态

TASK_UNINTERRUPTIBLE

不可中断的等待状态

TASK_ZOMBIE

僵死

TASK_STOPPED

暂停

TASK_SWAPPING

换入/换出

进程调度信息

域名

含义

need_resched

调度标志

Nice

静态优先级

Counter

动态优先级

Policy

调度策略

rt_priority

实时优先级

 进程调度的策略

名称

解释

适用范围

SCHED_OTHER

其他调度

普通进程

SCHED_FIFO

先来先服务调度

实时进程

SCHED_RR

时间片轮转调度

实时进程

标识符

域名

含义

Pid

进程标识符

Uidgid

用户标识符、组标识符

Euidegid

有效用户标识符、有效组标识符

Suidsgid

备份用户标识符、备份组标识符

Fsuidfsgid

文件系统用户标识符、文件系统组标识符

进程通信有关信息

域名

含义

Spinlock_t sigmask_lock

信号掩码的自旋锁

Long blocked

信号掩码

Struct signal *sig

信号处理函数

Struct sem_undo *semundo

为避免死锁而在信号量上设置的取消操作

Struct sem_queue *semsleeping

与信号量操作相关的等待队列

进程链接信息

名称

英文解释

中文解释 [指向哪个进程]

p_opptr

Original parent

祖先

p_pptr

Parent

父进程

p_cptr

Child

子进程

p_ysptr

Younger sibling

弟进程

p_osptr

Older sibling

兄进程

Pidhash_nextPidhash_pprev

进程在哈希表中的链接

Next_task prev_task

进程在双向循环链表中的链接

Run_list

运行队列的链表

时间和定时器信息

与时间有关的域

域名

含义

Start_time

进程创建时间

Per_cpu_utime

进程在某个CPU上运行时在用户态下耗费的时间

Per_cpu_stime

进程在某个CPU上运行时在系统态下耗费的时间

Counter

进程剩余的时间片

进程的所有定时器

 

文件系统信息

定义形式

解释

Sruct fs_struct *fs

进程的可执行映象所在的文件系统

Struct files_struct *files

进程打开的文件

 虚拟内存信息

定义形式

解释

Struct mm_struct *mm

描述进程的地址空间

Struct mm_struct *active_mm

内核线程所借用的地址空间

页面管理信息

  定义形式

解释

Int swappable

进程占用的内存页面是否可换出

Unsigned long min_flat,maj_flt,nswap

进程累计的次(minor)缺页次数、主(major)次数及累计换出、换入页面数

Unsigned long cmin_flat,cmaj_flt,cnswap

本进程作为祖先进程,其所有层次子进程的累计的次(minor)缺页次数、主(major)次数及累计换出、换入页面数

对称多处理机(SMP)信息

   定义形式

解释

 Int has_cpu

 进程是否当前拥有CPU

 Int processor

 进程当前正在使用的CPU

 Int lock_depth

 上下文切换时内核锁的深度

 和处理器相关的环境(上下文)信息

定义形式

解释

Struct thread_struct *tss

任务切换状态

其它

windows下 PCB的结构

在windows中执进程控制块是由 EPROCESS 块来表示的。每个进程都有一个 EPROCESS 结构,里面保存着进程的各种信息,和相关结构的指针。EPROCESS 结构位于系统地址空间,所以访问这个结构需要有ring0的权限。

在windows中所有进程使用 LIST_ENTRY ActiveProcessLinks 链表连接在一起,通过全局变量 PsActiveProcessHead 可以找到这个链。EPROCESS 中保存着一个给人看的进程名,Windows 任务管理器中显示的进程名,就是从这里获得的,更准确的叫法是映像名称。ImageFileName[16] 是一个16个字节长的字节数组,保存着进程名。当进程名的长度大于等于16个字节时,在 ImageFileName[16] 只保存进程名的前15个字节,ImageFileName[16] 最后一个字节为0,字符串的结束符。进程名可以相同,但是进程ID都是不相同的。

进程ID (PID)

+09c void *UniqueProcessId

父进程ID

+1c8 void *InheritedFromUniqueProcessId

页目录

+018 uint32 DirectoryTableBase[2]

每个进程有自己4G地址空间,当进程切换时,就需要切换地址空间。也就是切换页目录页表。所以每个进程都需要保存自己页目录的地址。每个进程的页目录所在物理页的物理地址,就保存在进程 EPROCESS 结构偏移 +018 处 DirectoryTableBase数组的第0项中,即 DirectoryTableBase[0]。对于执行地址转换的 CPU 来说需要知道页目录所在物理页的物理地址就可以进行地址转换。对于维护进程的页目录和页表的系统来说,需要把页目录和页表所在的物理页映射到地址空间中。

UNIX下 PCB的结构

在UNIX操作系统中进程的状态信息和控制信息等由 proc 结构体和 user 结构体管理。由 proc 结构体构成的数组proc[]中的每个元素分别对应一个进程。proc 结构体管理着在进程状态、执行优先级等与进程相关的信息中需要经常被内核访问的那部分信息。举例来说,内核在(进程切换过程中)选择下一个将被执行的进程时,会首先检查所有进程的状态。这种需要遍历所有进程的情况在其他处理中也会经常出现。由于proc[]常驻内存,因此内核可以在很短时间内完成对所有进程状态的检查。假如proc[] 能够被移至交换空间,内核必须访问交换空间才能取得相应数据,这会导致花费过多时间并引起性能下降。proc[] 的长度决定了在系统中可以同时存在的进程上限。 proc[] 的长度由常量NPROC 定义,其值为50。

华为鸿蒙HarmonyOS下 PCB的结构:

 

  1. 从系统的角度看,进程是资源管理单元。进程可以使用或等待CPU、使用内存空间等系统资源,并独立于其它进程运行。
  2. 鸿蒙内核的进程模块可以给用户提供多个进程,实现了进程之间的切换和通信,帮助用户管理业务程序流程。这样用户可以将更多的精力投入到业务功能的实现中。
  3. 鸿蒙内核中的进程采用抢占式调度机制,支持时间片轮转调度方式和FIFO调度机制。
  4. 鸿蒙内核的进程一共有32个优先级(0-31),用户进程可配置的优先级有22个(10-31),最高优先级为10,最低优先级为31。
  5. 高优先级的进程可抢占低优先级进程,低优先级进程必须在高优先级进程阻塞或结束后才能得到调度。
  6. 每一个用户态进程均拥有自己独立的进程空间,相互之间不可见,实现进程间隔离。

参考资料:

https://blog.csdn.net/kuangyufei/article/details/122222791

(4条消息) EPROCESS 结构_swanabin的博客-CSDN博客_eprocess结构

鸿蒙内核源码分析(进程管理篇) | 进程是内核的资源管理单元 | 百篇博客分析HarmonyOS源码 | v2.07_wx5f6629825db74的技术博客_51CTO博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值