阅读 224

名词解释进程控制块,进程控制块的组织方式

PCB(processcontrolblock )是进程控制块,是学习操作系统后遇到的最初的数据结构描述,是管理系统进程的重要依据,与进程管理相关的操作必须涉及PCB的内容一般来说,PCB包含以下内容。 (1)进程标识符(内部、外部) )。

)2)处理器的信息)通用寄存器、指令计数器、PSW、用户的堆栈指针)。

)3)进程调度信息(进程状态、进程优先级、进程调度所需的其他信息、事件)。

(4)过程控制信息(程序数据地址、资源清单、过程同步与通信机制、链接指针) )。

数据结构中定义的内容为了支持后面的管理,不同的操作系统根据自己的特点对PCB的内容进行了调整。 作为参考,整理了比较受欢迎的操作系统的PCB结构。

1.Linux进程块

Linux的过程控制块是用task_struct结构定义的数据结构,task_struct被保存

/include/linux/sched.h包含管理进程所需的各种信息。 Linux系统的所有过程控制块被组织成结构数组。 在以前的Linux版本中,可以同时运行的进程数由NR_TASK (默认值为512 )规定。 NR_TASK是PCB结果数组的长度。 最近版本的PCB构成了一个环形结构,系统中实际存在的进程数由定义的全局变量nr_task动态记录。 结构数组: struct task _ struct * task [ NR _ task ]={ init _ task }记录指向每个PCB的指针。 在/kernel/sched.c中定义。

创建新进程时,系统会向内存申请可用的task_struct空间,即可用的PCB块,并填写所需的信息。 也将指向此结构的指针填入task[]数组中。 当前正在运行的进程的PCB由指针数组current_set[]表示。 current_set被定义为指针数组,因为Linux支持多处理器系统,并且系统中可能存在多个同时运行的进程。

Linux系统的PCB包含许多参数,每个PCB占用大约1KB以上的内存空间。 以下是用于表示PCB的结构task_struct的简要说明。

struct task_struct{

.

unsigned short uid;

int pid;

int processor;

.

volatile long state;

长属性;

unsighed long rt_prority;

龙计数;

无符号长标志;

无符号长策略;

.

Struct task_struct *next_task,*prev_task;

Struct task_struct *next_run,*prev_run;

Struct task_struct *p_opptr、*p_pptr、*p_cptr、*pysptr、*p_ptr;

.

(;

以下,对部分数据成员进行说明:

(1) unsigned short pid是用户id

) int pid是进程标识符

) int processor标识用户用来支持对称多处理器方案的CPU;

)4) volatile long state可以标识进程的状态,并且可以是以下六种状态之一:

可运行状态(TASK-RUNING;

可中断的阻塞状态(TASK-UBERRUPTIBLE ) )。

不可中断的阻塞状态(TASK-UNINTERRUPTIBLE ) )。

僵硬状态(TASK-ZOMBLE ) )。

暂停状态(TASK_STOPPED ) )

交换状态(TASK_SWAPPING )

(5) long prority表示进程的优先顺序

(6) unsigned long rt_prority表示实时进程的优先顺序,对普通进程无效

(7) long counter是进程的动态优先顺序计数器,用于进程轮换的调度算法

(8) unsigned long policy表示进程调度策略,其值为以下三种情况之一。

SCHED_OTHER (值0 )对应于常规进程优先级轮换方法(round robin )

SCHED_FIFO (值1 )对应于实时过程先行一种算法;

SCHED_RR (值2 )对应于实时过程优先级轮换方法

(9) struct task_struct *next_task,*prev_task是进程PCB双向链表的前后项目指针

(10 ) struct task_struct *next_run,*prev_run是准备就绪队列双向链表的前后项指针

(11 ) struct task_struct *p_opptr、*p_pptr、*p_ysptr、*p_ptr显示过程家族之间的关系,分别为陶醉的蜜粉过程

2.Unix进程块(在教科书10.2节中有详细介绍) )。

在 UNIX 系统中, 把进程控

制块分为四部分:     进程表项

      进程标识符(PID)

      用户标识符(UID)

      进程状态

      事件描述符

      进程和U区在内存或外存的地址

      软中断信息

      计时域

      进程的大小

      偏置值nice

      P-Link指针

      指向U区进程正文、数据及栈在内存区域的指针

    U 区  

      进程表项指针

      真正用户标识符u-ruid(real user ID)

      有效用户标识符u-euid(effective user ID)

      用户文件描述符表

      当前目录和当前根

      计时器

      内部I/O参数

      限制字段

      差错字段

      返回值

      信号处理数组

 进程区表

      区的类型和大小

      区的状态

      区在物理存储器中的位置

      引用计数

      指向文件索引结点的指针

系统区表 进程区表项、系统区表项和区的关系 进程的数据结构 进程状态与进程映像    进程状态



3.windows下的PCB

        按照MS的定义, Windows中的进程简单地说就是一个内存中的可执行程序, 提供程序运行的各种资源. 进程拥有虚拟的地址空间, 可执行代码, 数据, 对象句柄集, 环境变量, 基础优先级, 以及最大最小工作集.
       Windows中的线程是系统处理机调度的基本单位. 线程可以执行进程中的任意代码, 包括正在被其他线程执行的代码. 进程中的所有线程共享进程的虚拟地址空间和系统资源. 每个线程拥有自己的例外处理过程, 一个调度优先级以及线程上下文数据结构. 线程上下文数据结构包含寄存器值, 核心堆栈, 用户堆栈和线程环境块.

        Windows中的进程控制块是EPROCESS结构, 线程控制块是ETHREAD结构. EPROCESS/ETHREAD的定义在inside windows2000中有比较详细的描述。

        Windows的进程链表是一个双向环链表。这个环链表LIST_ENTRY结构把每个EPROCESS链接起来. 那么只要找到一个EPROCESS结构, 我们就可以遍历整个链表, 这就是枚举进程的原理。

建议:同学看看<<Windows核心编程>>这本书,对大家进行高级程序设计有很大的帮助


文章分类
百科问答
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐