进程控制块(PCB)结构

一、进程控制块(PCB)结构

进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来控制和管理进程,所以说,PCB(进程控制块)是系统感知进程存在的唯一标志。

Linux系统的PCB包括很多参数,每个PCB约占1KB多的内存空间。用于表示PCB的结构task_struct简要描述如下:

include/linux/sched.h
struct task_struct {
 volatile long state;
 struct thread_info *thread_info;
 atomic_t usage;
unsigned long flags;
unsigned long ptrace;
 
 int lock_depth;
 
 int prio, static_prio;
 struct list_head run_list;
 prio_array_t *array;
 
 unsigned long sleep_avg;
 long interactive_credit;
 unsigned long long timestamp;
 int activated;
 
 unsigned long policy;
 cpumask_t cpus_allowed;
 unsigned int time_slice, first_time_slice;
 
struct list_head tasks;
 struct list_head ptrace_children;
 struct list_head ptrace_list;
 
 struct mm_struct *mm, *active_mm;
...
 struct linux_binfmt *binfmt;
 int exit_code, exit_signal;
 int pdeath_signal;
...
 pid_t pid;
 pid_t tgid;
...
struct task_struct *real_parent;
struct task_struct *parent;
struct list_head children;
 struct list_head sibling;
 struct task_struct *group_leader;
...
 struct pid_link pids[PIDTYPE_MAX];
 
 wait_queue_head_t wait_chldexit;
 struct completion *vfork_done;
 int __user *set_child_tid;
 int __user *clear_child_tid;
 
 unsigned long rt_priority;
 unsigned long it_real_value, it_prof_value, it_virt_value;
 unsigned long it_real_incr, it_prof_incr, it_virt_incr;
 struct timer_list real_timer;
 unsigned long utime, stime, cutime, cstime;
 unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
 u64 start_time;
...
 uid_t uid,euid,suid,fsuid;
  gid_t gid,egid,sgid,fsgid;
 struct group_info *group_info;
 kernel_cap_t cap_effective, cap_inheritable, cap_permitted;
 int keep_capabilities:1;
 struct user_struct *user;
...
 struct rlimit rlim[RLIM_NLIMITS];
 unsigned short used_math;
 char comm[16];
...
 int link_count, total_link_count;
...
 struct fs_struct *fs;
...
 struct files_struct *files;
...
 unsigned long ptrace_message;
 siginfo_t *last_siginfo;
...
 };

调度数据成员:
1) vo latile long state
表示进程的当前状态。进程运行时, 它会根据具体情况改变状态。进程状态总共有TASK RUNN ING ( 可运行状态)、TASK INTERRUPT IBLE ( 可中断的等待状态)、TASK UNINTERRUPT IBLE(不可中断的等待状态)、TASK ZOMB IE( 僵死状态)、TASK STOPPED(暂停状态) 等5种。
2) long pr io rity进程优先级, prio rity 的值给出了进程每次获取CPU 后, 可使用的时间片长度( 单位是jiffies)。
3) unsigned long rt_priority rt_priority 的值给出了实时进程的优先级, rt_priority
1000给出进程每次获取CPU 后, 可使用的时间片长度(单位是jiffies)。
4) long counter在轮转法调度时counter表示当前进程还可运行多久。在进程开始时被赋为priority的值, 以后每隔一个时钟中断递减1,减到0时引起新一轮调度。
5) unsigned long policy表示该进程的进程调度策略。调度策略有:
SCH ED_OTHER 0, 非实时进程, 用基于优先权的轮转法。
SCH ED_FIFO 1, 实时进程, 用先进先出算法。
SCH ED_RR 2, 实时进程, 用基于优先权的轮转法

进程队列指针:
1) struc t task_struct* next_task, * prev_task
在Linux 中所有进程(以PCB 的形式)组成一个双向链表,
next_task和prev_task是链表的前后向指针。
2) struct task_struct* p_opptr, * p_pptr
struct task_struc t* p_cptr, * p_ysptr, * p_osptr
以上分别是指向该进程的原始父进程、父进程、子进程和新
老兄弟进程的指针。
3) struct task_struct* pidhash_next
struct task_struct** pidhash_pprev
用于链入进程hash表的前后指针。系统进程除了链入双
向链表外, 还被加到hash表中。

进程标识:
uid_t uid gid_t gid uid和gid分别是运行进程的用
户标识和用户组标识。
pid_t pid pid_t pgrp pid和pgrp分别是运行进程的
进程标识号和进程组标识号
时间数据成员:
long per_cpu_utime [ NR_CPUS ] per_cpu_stime
[ NR_CPUS]
per_cpu_utime 是用户态进程运行的时间, per_cpu_
stime是内核态进程运行的时间
进程创建时间unsigned long start_time

文件系统数据成员:
struct fs_struct* fs
fs保存了进程本身与VFS( 虚拟文件系统)的关系信息。
struct fs_struct
{
atom ic_t count;
rw lock_t lock;
int umask;
struct dentry* root, * pwd, * altroot;
struct vfsm ount* rootmnt, * pwdmnt, * altrootmnt;
}
其中root、rootm nt是根目录的dentry 和其mount点的vfsmount。
pwd、pwdmnt 是当前工作目录的dentry 和其mount 点的vfs..
mount。altroot、altrootmnt是保存根节点被替换之后原来根目标
的dentry和其mount点的vfsmount。

内存数据成员:
1) struct mm_struct* mm
在Linux 中, 采用按需分页的策略解决进程的内存需求。
task_struct的数据成员mm 指向关于存储管理的mm_truc t结
构。
2) struct mm_struct* active_mm
active_mm 指向活动地址空间。
3) mm_segm ent_t addr_ lim it
表示线程空间地址。
用户线程空间地址: 0..0xBFFFFFFF。
内核线程空间地址: 0..0xFFFFFFFF
4) spinlock_t alloc_ lock
用于申请空间时用的自旋锁。自旋锁的主要功能是临界区
保护。

页面管理:
1) int swappable: 1
进程占用的页面是否可换出。swappab le为1表示可换出。
2) unsigned long min_flt, maj_ flt
该进程累计minor缺页次数和major缺页次数。
3) unsigned long nswap
该进程累计换出页面数。
4) unsigned long swap_cnt
下一次循环最多可换出的页数。

二、makefile

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具.

Makefile来告诉make命令如何编译和链接这几个文件。规则是:
1)如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2)如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3)如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

下面举一个简单的例子:(进度条的实现)

1.vim proc.c写入(进度条的实现)

2、vim Makefile写入

第一行中并没有任何参数,只是在冒号(:)后列出编译中所需的文件,当第一行中的任何文件中更改时,make就知道需要重新编译了。

其中.PHONY意思表示clean是一个“伪目标”,清除 所有 .o文件 ,.o文件就是目标文件

3、执行make指令就可以编译proc.c这个程序

原文作者:My_Blog_Days

原文地址:进程控制块(PCB)结构 - My_Blog_Days - 博客园(版权归原文作者所有,侵权留言联系删除)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课 程 设 计 报 告 课程名称 操作系统 课题名称 作业调度模拟 专 业 通信工程 班 级 学 号 姓 名 指导教师 2012年 6月 29 日 课 程 设 计 任 务 书 课程名称 操作系统 课 题 作业调度模拟 任务书下达日期 2012 年 6 月 24 日 任务完成日期 2012 年 6 月 29 日 《操作系统》课程设计任务书 一、课程设计的性质与目的 操作系统课程设计是集中实践性环节之一,是学习完《操作系统》课程后进行的一次全面 的综合练习。要求学生达到熟练掌握操作系统的基本理论知识;掌握不同的调度算法; 能够利用所学的基本编程知识,实现课程章节中涉及到的一些基本算法,从而加深理论 知识的理解。 二、 设计要求 1 要求利用高级程序设计语言编程完成相关算法; 2 程序具有清晰易懂的界面,有图形界面更佳; 3 程序具备要求的基本功能模; 4 最终结果是能够运行的完整程序; 5 最后给出课程设计报告 三、课程设计报告要求 1 统一封面(本任务书附带)、设计题目、设计要求以及系统功能需求分析; 2 总体设计:包括系统总体设计框架和系统功能模图; 3 详细设计。包括主要功能模的算法设计思路以及对应的工作流程图; 4 主要源程序代码,并附有注释; 5 总结。包括课程设计过程中的学习体会与收获、对操作系统和本次课程设计的认 识等内容。 6 附录(完整源程序清单):可以是手写或打印稿(注意:不能和其他同学一样) 7 报告最后附上评分表(见任务书末页) 四、检查要求: 1 每个人至少选作一题,学号末尾2位对5取余,余数对应的题号就是每个人必做题。必须 有可运行的程序,每个人要通过答辩; 2 每个人必须交《操作系统课程设计报告》(打印稿) 五、评分 1 根据平时上机考勤,且每个人必须自己动手编写程序,不得抄袭; 2 根据程序运行结果; 3 学生能熟练地解释清楚指导老师对自己程序的提问; 4 课程设计报告完成的质量和规范; 六、时间、地点安排 "日期 "6.25 "6.27 "6.28 " "时间 "8:00-12:00 "8:00-12:00 "8:00-12:00 " "地点 "E511 "E511 "E511 " 七、课程设计题目 0. 进程调度算法的设计 设计要求: A.设计进程控制PCB结构,分别适用于优先数调度算法和循环轮转调度算法。 B.建立进程就绪队列。对两种不同算法编制入链子程序。 C.编制两种进程调度算法:1)优先数调度;2)循环轮转调度 1. 银行家算法设计 设计要求: 编制银行家算法通用程序,并检测所给状态的系统安全性。 2.题目:页面置换算法模拟设计 设计要求: 计算并输出下述各种算法在不同内存容量下的命中率。 A.FIFO先进先出的算法 B.LRR最近最少使用算法 C.OPT最佳淘汰算法(先淘汰最不常用的页地址) D.LFR最少访问页面算法 E.NUR最近最不经常使用算法 3.题目:可变内存管理模拟 设计要求: A.功能:内存初始化;分配作业内存;回收内存;显示作业列表;显示空闲内存。 B.编制两种内存分配算法:1)最佳适应算法;2)最坏适应算法。 4.题目:作业调度模拟 设计要求: A.加深对作业概念地理解。 B.掌握短作业优先调度算法。 C.深入了解批处理系统如何组织作业、管理作业和调度作业。 D.了解作业控制的作用,以及作业控制的内容和组织方式。 目录 一、系统功能需求分析 6 二、系统总体设计 7 1、设计的基本原理 7 2、系统的总体框架设计 7 3、系统功能模图 7 三、系统详细设计 8 1、系统总体详细设计 8 2、系统各模详细设计 9 (1)主函数模 9 (2)创建JCB作业控制 11 (3)信息输入模 11 (4)随机产生作业到达时间和服务时间模 12 (5) 计算模 12 (6)对比模 13 (7) 信息输出模 14 四、运行结果及结果分析 15 1、运行结果 15 2、运行结果分析 17 五、总结 17 六、附录 18 七、评分表 22 一、系统功能需求分析 作业调度是对成批进入系统的用户作业,根据作业控制的信息,按一定的策略选取若 干个作业使它们可以去获得处理器运行的一项工作。而对每个用户来说总希望自己的作 业的周转时间是最小的,短作业优先(SJF)便是其中一种调度方法。 本设计是为了加深对作业概念的理解,掌握短作业优先(SJF)调度算法,深入了解批处 理系统如何组织作业、管理作业和调度作业,了解作业控制的作用,以及作业控制 的内容和组织方式。 为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相 关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信 息在存储器中的位置、指向下一个作业控制的指针等

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值