精华内容
下载资源
问答
  • pcb进程控制块
    千次阅读
    2021-01-04 15:40:16

    一、进程控制块

               进程控制块是存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,没一个进程都有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤销而撤销。

               在不同的操作系统中对进程的管理和控制机制不同,PCB中的信息存在差异,通常PCB包含如下信息。

               1、进程标识符:每个进程都必须有一个唯一的标识符,可以是字符串,也可以是数字,UNIX系统中就是一个整型数,在进程创建时由系统赋予。

               2、进程当前状态:说明进程当前所处的状态,为了管理的方便,系统设计时会将相同状态的进程组成一个队列,如就绪进程队列,等待进程则要根据等待的事件组成多个等待队列,如等待打印机队列、等待磁盘I/O完成队列等等。

               3、进程相应的程序和数据地址:将PCB与其程序和数据联系起来。

               4、进程资源清单:列出除CPU以外的资源记录,如拥有的I/O设备,打开的文件列表等。

               5、进程优先级:进程的优先级反映进程的紧迫程度,通常由用户指定和系统设置。UNIX系统采用用户设置和系统计算相结合的方式确定进程的优先级。

               6、CPU现场保护区:当进程因某种原因不能继续占用CPU时(等待打印机),释放CPU,这时就要将CPU的各种状态信息保护起来,为将来再次得到处理机恢复CPU的各种状态,继续进行。

               7、进程同步与通信机制:用于实现进程间的互斥、同步和通信所需的信号量等。

               8、进程所在队列PCB的链接字:根据进程所处的现行状态,进程相应的PCB参加到不同队列中。PCB链接字指出该进程所在队列中下一个进程PCB的首地址。

               9、与进程相关的其它信息:如进程记账信息,进程占用CPU的时间等。

    二、Liunx进程控制块

               在Liunx中每个进程都由task_struct数据结构来定义。task_struct就是我们通常所说的PCB。          

    struct task_struct
    {
    	volatile long state; //说明了该进程是否可以执行,还是可中断等信息
    	unsigned long flags; // flags 是进程号,在调用fork()时给出
    	int sigpending; // 进程上是否有待处理的信号
     
    	 mm_segment_t addr_limit;  //进程地址空间,区分内核进程与普通进程在内存存放的位置不同  //0-0xBFFFFFFF for user-thead    //0-0xFFFFFFFF for kernel-thread
    	 //调度标志,表示该进程是否需要重新调度,若非0,则当从内核态返回到用户态,会发生调度
    	 volatile long need_resched;
    	 int lock_depth;    //锁深度
    	 long nice;       //进程的基本时间片
     
    	 //进程的调度策略,有三种,实时进程:SCHED_FIFO,SCHED_RR, 分时进程:SCHED_OTHER
    	 unsigned long policy;
    	 struct mm_struct *mm;    //进程内存管理信息
     
    	 int processor;
    	 //若进程不在任何CPU上运行, cpus_runnable 的值是0,否则是1 这个值在运行队列被锁时更新
    	 unsigned long cpus_runnable, cpus_allowed;
    	 struct list_head run_list;   //指向运行队列的指针
    	 unsigned long sleep_time;   //进程的睡眠时间
     
    	 //用于将系统中所有的进程连成一个双向循环链表, 其根是init_task
    	 struct task_struct *next_task, *prev_task;
    	 struct mm_struct *active_mm;
    	 struct list_head local_pages;      //指向本地页面      
    	 unsigned int allocation_order, nr_local_pages;
    	 struct linux_binfmt *binfmt;      //进程所运行的可执行文件的格式
    	 int exit_code, exit_signal;
    	 int pdeath_signal;           //父进程终止时向子进程发送的信号
    	 unsigned long personality;
    	 //Linux可以运行由其他UNIX操作系统生成的符合iBCS2标准的程序
    	 int did_exec:1; 
    	 pid_t pid;          //进程标识符,用来代表一个进程
    	 pid_t pgrp;        //进程组标识,表示进程所属的进程组
    	 pid_t tty_old_pgrp;      //进程控制终端所在的组标识
    	 pid_t session;             //进程的会话标识
    	 pid_t tgid;
    	 int leader;    //表示进程是否为会话主管
    	 struct task_struct *p_opptr,*p_pptr,*p_cptr,*p_ysptr,*p_osptr;
    	 struct list_head thread_group;          //线程链表
    	 struct task_struct *pidhash_next;    //用于将进程链入HASH表
    	 struct task_struct **pidhash_pprev;
    	 wait_queue_head_t wait_chldexit;      //供wait4()使用
    	 struct completion *vfork_done;         //供vfork() 使用
     
     
    	 unsigned long rt_priority;       //实时优先级,用它计算实时进程调度时的weight值
     
     
    	 //it_real_value,it_real_incr用于REAL定时器,单位为jiffies, 系统根据it_real_value
     
    	 //设置定时器的第一个终止时间. 在定时器到期时,向进程发送SIGALRM信号,同时根据
     
    	 //it_real_incr重置终止时间,it_prof_value,it_prof_incr用于Profile定时器,单位为jiffies。
     
    	 //当进程运行时,不管在何种状态下,每个tick都使it_prof_value值减一,当减到0时,向进程发送
     
    	 //信号SIGPROF,并根据it_prof_incr重置时间.
    	 //it_virt_value,it_virt_value用于Virtual定时器,单位为jiffies。当进程运行时,不管在何种
     
    	 //状态下,每个tick都使it_virt_value值减一当减到0时,向进程发送信号SIGVTALRM,根据
     
    	 //it_virt_incr重置初值。
     
    	 unsigned long it_real_value, it_prof_value, it_virt_value;
    	 unsigned long it_real_incr, it_prof_incr, it_virt_value;
    	 struct timer_list real_timer;        //指向实时定时器的指针
    	 struct tms times;                      //记录进程消耗的时间
    	 unsigned long start_time;          //进程创建的时间
     
    	 //记录进程在每个CPU上所消耗的用户态时间和核心态时间
    	 long per_cpu_utime[NR_CPUS], per_cpu_stime[NR_CPUS]; 
     
     
    	 //内存缺页和交换信息:
     
    	 //min_flt, maj_flt累计进程的次缺页数(Copy on Write页和匿名页)和主缺页数(从映射文件或交换
     
    	 //设备读入的页面数); nswap记录进程累计换出的页面数,即写到交换设备上的页面数。
    	 //cmin_flt, cmaj_flt, cnswap记录本进程为祖先的所有子孙进程的累计次缺页数,主缺页数和换出页面数。
     
    	 //在父进程回收终止的子进程时,父进程会将子进程的这些信息累计到自己结构的这些域中
    	 unsigned long min_flt, maj_flt, nswap, cmin_flt, cmaj_flt, cnswap;
    	 int swappable:1; //表示进程的虚拟地址空间是否允许换出
    	 //进程认证信息
    	 //uid,gid为运行该进程的用户的用户标识符和组标识符,通常是进程创建者的uid,gid
     
    	 //euid,egid为有效uid,gid
    	 //fsuid,fsgid为文件系统uid,gid,这两个ID号通常与有效uid,gid相等,在检查对于文件
     
    	 //系统的访问权限时使用他们。
    	 //suid,sgid为备份uid,gid
    	 uid_t uid,euid,suid,fsuid;
    	 gid_t gid,egid,sgid,fsgid;
    	 int ngroups;                  //记录进程在多少个用户组中
    	 gid_t groups[NGROUPS];      //记录进程所在的组
     
    	 //进程的权能,分别是有效位集合,继承位集合,允许位集合
    	 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;         //是否使用FPU
    	 char comm[16];                      //进程正在运行的可执行文件名
    	 int link_count, total_link_ count;  //文件系统信息
     
    	 //NULL if no tty 进程所在的控制终端,如果不需要控制终端,则该指针为空
    	 struct tty_struct *tty;
    	 unsigned int locks;
    	 //进程间通信信息
    	 struct sem_undo *semundo;       //进程在信号灯上的所有undo操作
    	 struct sem_queue *semsleeping;   //当进程因为信号灯操作而挂起时,他在该队列中记录等待的操作
    	 //进程的CPU状态,切换时,要保存到停止进程的task_struct中
    	 struct thread_struct thread;
    	 struct fs_struct *fs;           //文件系统信息
    	 struct files_struct *files;    //打开文件信息
    	 spinlock_t sigmask_lock;   //信号处理函数
    	 struct signal_struct *sig;   //信号处理函数
    	 sigset_t blocked;                //进程当前要阻塞的信号,每个信号对应一位
    	 struct sigpending pending;      //进程上是否有待处理的信号
    	 unsigned long sas_ss_sp;
    	 size_t sas_ss_size;
    	 int (*notifier)(void *priv);
    	 void *notifier_data;
    	 sigset_t *notifier_mask;
    	 u32 parent_exec_id;
    	 u32 self_exec_id;
     
    	 spinlock_t alloc_lock;
    	 void *journal_info;
    }

     

    更多相关内容
  • PCB进程控制块

    2020-03-14 21:09:18
  • PCB进程控制块的理解

    2020-06-06 19:16:55
    文中 图片来源于网络 PCB进程控制块,是个结构体类型,

    文中 图片来源于网络

    PCB进程控制块,是个结构体类型,结构体类型为struct  task_struct。

    如图所示的,进程切换时需要保存和恢复的一些CPU寄存器---->是因为,cpu的时间轮片给轮询不同的进程,但是,所有的进程是用的同一套寄存器,所以,要保存寄存器状态,等下次时间片过来的时候,恢复之前的寄存器值。

    控制终端的信息--->

    进程在不同的终端中运行,显示的终端是不同的。

    当前工作目录:改变当前进程的工作目录

    umask:保护文件创建或修改的默认权限。 

    会话和进程组:功能相近的进程放在一起,即为进程组;

    会话,比进程组高一级的组。

    进程可以使用的资源上限:ulimit -a 显示资源上限

     

    展开全文
  • 进程控制块PCB

    2021-08-18 11:06:04
    在操作系统中,是用进程控制块(process control block,PCB)数据结构来描述进程的。 知乎搜 PCB 的提示 打住打住,我们是个正经的人,怎么会去看那些问题呢?是吧,回来回来。 PCB 是进程存在的唯一标识,这...

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/qq_34827674/article/details/107305756

    进程的控制结构

    在操作系统中,是用进程控制块process control block,PCB)数据结构来描述进程的。

    知乎搜 PCB 的提示

    打住打住,我们是个正经的人,怎么会去看那些问题呢?是吧,回来回来。

    PCB 是进程存在的唯一标识,这意味着一个进程的存在,必然会有一个 PCB,如果进程消失了,那么 PCB 也会随之消失。

    PCB 具体包含什么信息呢?

    进程描述信息:

    • 进程标识符:标识各个进程,每个进程都有一个并且唯一的标识符;

    • 用户标识符:进程归属的用户,用户标识符主要为共享和保护服务;

    进程控制和管理信息:

    • 进程当前状态,如 new、ready、running、waiting 或 blocked 等;

    • 进程优先级:进程抢占 CPU 时的优先级;

    资源分配清单:

    • 有关内存地址空间或虚拟地址空间的信息,所打开文件的列表和所使用的 I/O 设备信息。

    CPU 相关信息:

    • CPU 中各个寄存器的值,当进程被切换时,CPU 的状态信息都会被保存在相应的 PCB 中,以便进程重新执行时,能从断点处继续执行。

    可见,PCB 包含信息还是比较多的。

    每个 PCB 是如何组织的呢?

    通常是通过链表的方式进行组织,把具有相同状态的进程链在一起,组成各种队列。比如:

    • 将所有处于就绪状态的进程链在一起,称为就绪队列

    • 把所有因等待某事件而处于等待状态的进程链在一起就组成各种阻塞队列

    • 另外,对于运行队列在单核 CPU 系统中则只有一个运行指针了,因为单核 CPU 在某个时间,只能运行一个程序。

    那么,就绪队列和阻塞队列链表的组织形式如下图:

    图片

    就绪队列和阻塞队列

    除了链接的组织方式,还有索引方式,它的工作原理:将同一状态的进程组织在一个索引表中,索引表项指向相应的 PCB,不同状态对应不同的索引表。

    一般会选择链表,因为可能面临进程创建,销毁等调度导致进程状态发生变化,所以链表能够更加灵活的插入和删除。

    进程的控制

    我们熟知了进程的状态变迁和进程的数据结构 PCB 后,再来看看进程的创建、终止、阻塞、唤醒的过程,这些过程也就是进程的控制。

    01 创建进程

    操作系统允许一个进程创建另一个进程,而且允许子进程继承父进程所拥有的资源,当子进程被终止时,其在父进程处继承的资源应当还给父进程。同时,终止父进程时同时也会终止其所有的子进程。

    创建进程的过程如下:

    • 为新进程分配一个唯一的进程标识号,并申请一个空白的 PCB,PCB 是有限的,若申请失败则创建失败;

    • 为进程分配资源,此处如果资源不足,进程就会进入等待状态,以等待资源;

    • 初始化 PCB;

    • 如果进程的调度队列能够接纳新进程,那就将进程插入到就绪队列,等待被调度运行;

    02 终止进程

    进程可以有 3 种终止方式:正常结束、异常结束以及外界干预(信号 kill 掉)。

    终止进程的过程如下:

    • 查找需要终止的进程的 PCB;

    • 如果处于执行状态,则立即终止该进程的执行,然后将 CPU 资源分配给其他进程;

    • 如果其还有子进程,则应将其所有子进程终止;

    • 将该进程所拥有的全部资源都归还给父进程或操作系统;

    • 将其从 PCB 所在队列中删除;

    03 阻塞进程

    当进程需要等待某一事件完成时,它可以调用阻塞语句把自己阻塞等待。而一旦被阻塞等待,它只能由另一个进程唤醒。

    阻塞进程的过程如下:

    • 找到将要被阻塞进程标识号对应的 PCB;

    • 如果该进程为运行状态,则保护其现场,将其状态转为阻塞状态,停止运行;

    • 将该 PCB 插入的阻塞队列中去;

    04 唤醒进程

    进程由「运行」转变为「阻塞」状态是由于进程必须等待某一事件的完成,所以处于阻塞状态的进程是绝对不可能叫醒自己的。

    如果某进程正在等待 I/O 事件,需由别的进程发消息给它,则只有当该进程所期待的事件出现时,才由发现者进程用唤醒语句叫醒它。

    唤醒进程的过程如下:

    • 在该事件的阻塞队列中找到相应进程的 PCB;

    • 将其从阻塞队列中移出,并置其状态为就绪状态;

    • 把该 PCB 插入到就绪队列中,等待调度程序调度;

    进程的阻塞和唤醒是一对功能相反的语句,如果某个进程调用了阻塞语句,则必有一个与之对应的唤醒语句。

    展开全文
  • Linux PCB(进程控制块) 详解

    千次阅读 2022-03-14 14:25:03
    这个户口操作系统被称为PCB进程控制块),在linux中具体实现是 task_struct数据结构,/usr/src/linux-headers-4.4.0-96/include/linux/sched.h文件中可以查看struct task_struct 结构体定义(系统版本可能不同...
  • 进程概念与PCB详解(新手必看)
  • 1.进程实体包括:程序段、数据段、进程控制块PCB; 2.进程控制块是操作系统中最重要的数据结构。 PCB是用来记录进程信息的。比如说当CPU执行某程序的时候,当停止执行一段时间后,重新执行的时候如何让他从断的那里...
  • PCB进程控制块)讲解

    万次阅读 多人点赞 2019-05-04 22:34:45
    PCB进程控制块,实际是一个结构体,放在sched.h文件中,Linux下可以通过whereis sched.h命令查看具体路径 该结构体主要包含: 1.进程id 2.进程的状态:就绪、运行、挂起、停止 3.进程切换时需要保存和恢复的一些...
  • 进程控制块PCB)包含哪些信息
  • 操作系统:进程控制块PCB

    千次阅读 2020-12-07 15:27:06
    对于进程控制块PCB的作用、包含的信息以及组织方式进行了相应的介绍!
  • 05进程学习之PCB进程控制块 前言 我们知道,每个进程的内核区中都有一个进程控制块(PCB)来维护进程相关的信息,每个进程的PCB都是被MMU映射到物理内存上某块区域的不同地方。其实质是task_struct类型的结构体。 ...
  • 进程控制块PCB

    2020-06-27 00:51:52
    1. 进程和虚拟内存简介 程序本来是存储在磁盘的,当我们需要执行它的时候,先把它读取到内存当中,再然后放入到寄存器中,最后让cpu执行程序,这个时候程序就变成了一个进程.每个进程直接肯定都拥有自己独有的一份...
  • 进程控制块——PCB

    2018-11-25 10:19:46
    PCB进程控制块的结构:  进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构。系统用它来记录进程的外部特征,描述进程的运动变化过程。同时,系统可以利用PCB来管理和控制进程,所以说,PCB是系统感知...
  • 转发:PCB进程控制块

    2018-04-20 15:04:25
    文字转自:... 想要有顺序地学习Linux,入口在这里哦:Linux:目录索引 PCB进程控制块 0.PCB是干什么的? 学了操作系统后,我们都知道操作系统要想管理一个对象,它不是直接进行管理的,...
  • 操作系统之进程控制块PCB

    千次阅读 2020-03-21 13:02:35
    操作系统之进程控制块PCB PCB的作用: PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据)成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。 (1) 作为独立运行基本单位的标志。当一个...
  • 关键字:进程的特性、进程的七种状态:运行态 就绪态 等待态 新建态 终止态 就绪挂起态 等待挂起态、PCB进程控制块、进程上下文、三种进程状态的切换、进程要素。
  • 目录 一、进程概述 1、PCB(Processing Control Block) ...四、进程控制 4.1 结束进程 4.2 孤儿进程 4.2 僵尸进程 4.3 进程回收 wait waitpid 一、进程概述 1、PCB(Processing Contro...
  • PCB(进程控制块)中所储存的信息

    千次阅读 2019-04-20 17:21:31
    1.进程id。系统中每个进程有唯一的id,在c语言中用pid_t类型表示...5,描述控制终端的信息。 6.当前工作目录(Current Working Directory) 7.umask掩码 8.文件描述符表,包含很多指向结构体的指针 9.和信号相关...
  • PCB 是进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在 多道程序环境下不能独立运行的程序,... Linux的进程控制块为一个由结构task_struct所定义的数据结构,其中包括管理进程所需的各种信息。
  • 进程控制块 PCB1

    2022-08-08 22:47:57
    进程控制块 PCB1
  • 进程控制块

    千次阅读 2020-03-15 21:14:56
    1.进程控制块的思维导图 2.task_struct结构 查看Linux的task_struct(即PCB)结构,我搜集到了以下各行代码的含义: struct thread_info thread_info; //存放的是PCB中频繁访问和需要快速访问的字`段。内核依赖于该...
  • 进程控制块(PCB)

    2020-08-29 14:24:58
    进程控制块(PCB) 用来描述和控制进程的运行的一个数据结构——进程控制块PCB(Process Control Block),是进程实体的一部分,是操作系统中最重要的记录型数据结构。 PCB是进程存在的唯一标志 系统能且只能通过PCB对...
  • 下图所示的PCB(进程控制块)的组织方式是(),图中()。 A.链接方式 B.索引方式 C.顺序方式 D.Hash A.有1个运行进程、2个就绪进程、4个阻塞进程 B.有2个运行进程、3个就绪进程、2个阻塞进程 C.有1个运行进程、3个...
  • 进程控制块PCB详解

    万次阅读 多人点赞 2015-06-12 11:23:44
    PCB(process control block),进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB中的内容。一般情况下,PCB中包含以下内容: (1...
  • PCB进程管理)_百度百科

    千次阅读 2021-07-23 03:27:06
    PCB(进程管理块)语音编辑锁定上传视频为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。...
  • 主要讲解进程控制块pcb)的定义和描述,适合想了解操作系统的PCB
  • 2018计算机考研交流群:452734424进程控制块(PCB)是进程存在的惟一标志,是操作系统进程管理中一种重要的数据结构。1)PCB的作用存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的重要的数据...
  • 进程和进程控制块PCB

    千次阅读 2019-11-14 08:53:11
    进程控制块 进程概念 是程序的一次执行过程,是系统进行资源分配和处理机调度的一个独立单位。 是一个运行中程序的描述,通过描述信息中的内存指针可以找到内存中运行的程序代码及数据,并且通过上下文数据可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,838
精华内容 8,735
关键字:

pcb进程控制块

友情链接: 12030515.zip