精华内容
下载资源
问答
  • 进程控制块PCB

    千次阅读 2019-04-10 22:56:55
    我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。 /usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件可以查看struct task_...

    我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。
    /usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 结构体定义。其内部成员有很多,我们重点掌握以下部分即可:

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

    进程基本的状态有5种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常与就绪态结合来看。
    在这里插入图片描述

    循环创建n个子进程

    一次fork函数调用可以创建一个子进程。那么创建N个子进程应该怎样实现呢?
    简单想,for(i = 0; i < n; i++) { fork() } 即可。但这样创建的是N个子进程吗?
    在这里插入图片描述
    从上图我们可以很清晰的看到,当n为3时候,循环创建了(2^n)-1个子进程,而不是N的子进程。需要在循环的过程,保证子进程不再执行fork ,因此当(fork() == 0)时,子进程应该立即break;才正确。

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    int main(void)
    {
        int i;
        pid_t pid;
        printf("xxxxxxxxxxx\n");
    
        for (i = 0; i < 5; i++) {
            pid = fork();
            if (pid == 0) {
                break;
            }
        }
        if (i < 5) {
            sleep(i);
            printf("I'am %d child , pid = %u\n", i+1, getpid());
        } else  {
            sleep(i);
            printf("I'm parent\n");
        }
        return 0;
    }
    

    刚fork之后:
    父子相同处: text、栈、堆、环境变量、用户ID、宿主目录、进程工作目录、信号处理方式…
    父子不同处: 1.进程ID 2.fork返回值 3.父进程ID 4.进程运行时间 5.闹钟(定时器) 6.未决信号集

    子进程复制了父进程0-3G用户空间内容,以及父进程的PCB,但pid不同。真的每fork一个子进程都要将父进程的0-3G地址空间完全拷贝一份,然后在映射至物理内存吗?

    当然不是!父子进程间遵循读时共享写时复制的原则。这样设计,无论子进程执行父进程的逻辑还是执行自己的逻辑都能节省内存开销。
    在这里插入图片描述
    在这里插入图片描述
    cpu 为什么要使用虚拟地址空间与物理地址空间映射?解决了什么样的问题?

    1.方便编译器和操作系统安排程序的地址分布。
    程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。
    2.方便进程之间隔离
    不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法更改正在由另一进程使用的物理内存。
    3.方便OS使用你那可怜的内存。
    程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,
    内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。

    重点注意!躲避父子进程共享全局变量的知识误区! 每个有子集单独的date区
    【重点】:父子进程共享:1. 文件描述符(打开文件的结构体) 2. mmap建立的映射区 (进程间通信详解)
    fork之后父进程先执行还是子进程先执行不确定。取决于内核所使用的调度算法

    展开全文
  • 进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB内容。 一般情况下,PCB包含以下内容: (1)进程标识符(内部,外部...

    进程控制块(PCB)

    概念:

    进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB中的内容。

    一般情况下,PCB中包含以下内容:

    (1)进程标识符(内部,外部)
    (2)处理机的信息(通用寄存器,指令计数器,PSW,用户的栈指针)。
    (3)进程调度信息(进程状态,进程的优先级,进程调度所需的其它信息,事件)
    (4)进程控制信息(程序的数据的地址,资源清单,进程同步和通信机制,链接指针)

    PCB为一结构体

    struct task_struct
    {
        pid_t pid;
        pid_t ppid;
        int uid;
        ......
    };

    作用:

    使一个在多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程

    操作系统为每一个进程维护一个页表

    进程的状态

    并发运行与并行运行的区别

    1、并发是两个任务可以在重叠的时间段内启动,运行和完成。并行是任务在同一时间运行,例如,在多核处理器上。
    2、并发是独立执行过程的组合,而并行是同时执行(可能相关的)计算。
    3、并发是一次处理很多事情,并行是同时做很多事情。
    应用程序可以是并发的,但不是并行的,这意味着它可以同时处理多个任务,但是没有两个任务在同一时刻执行。
    应用程序可以是并行的,但不是并发的,这意味着它同时处理多核CPU中的任务的多个子任务。
    一个应用程序可以即不是并行的,也不是并发的,这意味着它一次一个地处理所有任务。
    应用程序可以即是并行的也是并发的,这意味着它同时在多核CPU中同时处理多个任务。

    展开全文
  • 进程控制块包含的信息

    千次阅读 2017-02-13 12:17:05
    进程控制块包含三类信息  1.标识信息。 用于唯一地标识一个进程,常常分由用户使用的外部标识符和被系统使用的内部标识号。几乎所有操作系统进程都被赋予一个唯一的、内部使用的数值型的进程号,操作系统的其他...

    进程控制块包含三类信息 

    1.标识信息。

    用于唯一地标识一个进程,常常分由用户使用的外部标识符和被系统使用的内部标识号。几乎所有操作系统中进程都被赋予一个唯一的、内部使用的数值型的进程号,操作系统的其他控制表可以通过进程号来交叉引用进程控制表。常用的标识信息包括进程标识符、父进程的标识符、用户进程名、用户组名等。

     2.现场信息。

    用于保留一个进程在运行时存放在处理器现场中的各种信息,任何一个进程在让出处理器时必须把此时的处理器现场信息保存到进程控制块中,而当该进程重新恢复运行时也应恢复处理器现场。常用的现场信息包括通用寄存器的内容、控制寄存器(如PSW寄存器)的内容、用户堆战指针、系统堆饺指针等。 

    3.控制信息。

    用于管理和调度一个进程。常用的控制信息包括:

    l)进程的调度相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指引元等

    2)进程组成信息,如正文段指针、数据段指针

    3)引进程间通信相关信息,如消息队列指针、信号量等互斥和同步机制

    4)进程在辅存储器内的地址

    5)CPU资源的占用和使用信息,如时间片余量、进程己占用CPU的时间、进程己执行的时间总和,记账信息

    6)进程特权信息,如在内存访问和处理器状态方面的特权...

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

    进程控制块(PCB)

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

    存储的信息:

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

    进程控制块包含三类信息

    1.标识信息。用于唯一地标识一个进程,常常分由用户使用的外部标识符和被系统使用的内部标识号。几乎所有操作系统中进程都被赋予一个唯一的、内部使用的数值型的进程号,操作系统的其他控制表可以通过进程号来交叉引用进程控制表。常用的标识信息包括进程标识符、父进程的标识符、用户进程名、用户组名等。

    2.现场信息。用于保留一个进程在运行时存放在处理器现场中的各种信息,任何一个进程在让出处理器时必须把此时的处理器现场信息保存到进程控制块中,而当该进程重新恢复运行时也应恢复处理器现场。常用的现场信息包括通用寄存器的内容、控制寄存器(如PSW寄存器)的内容、用户堆战指针、系统堆饺指针等。

    3.控制信息。用于管理和调度一个进程。常用的控制信息包括:l)进程的调度相关信息,如进程状态、等待事件和等待原因、进程优先级、队列指引元等2)进程组成信息,如正文段指针、数据段指针:引进程间通信相关信息,如消息队列指针、信号量等互斥和同步机制4)进程在辅存储器内的地址5)CPU资源的占用和使用信息,如时间片余量、进程己占用CPU的时间、进程己执行的时间总和,记账信息6)进程特权信息,如在内存访问和处理器状态方面的特权7)资源清单,包括进程所需全部资源、已经分得的资源,如主存资源、I/0设备、打开文件表等。

     

    什么是数据结构:

    数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法索引技术有关。

    简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,

    即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系

    分为逻辑结构和存储结构。 
    数据的逻辑结构和物理结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。

    算法的设计取决于数据的逻辑结构(代码逻辑)

    而算法的实现依赖于指定的存储结构(物理地址层)。


    顺序结构:物理地址连续;

    链式结构:物理地址不连续;

    索引结构:高效获取数据的数据结构,物理地址又连续又不连续;

    散列结构:一种顺序结构和链式结构结合。  这是个人理解

    队列:把处于同一状态(例如就绪态)的所有进程控制块链接在一起,这样的数据结构称为进程队列(Process Queues)。

    进程的创建来源于以下四个事件:



    1.提交一个批处理作业。

    2.在终端上交互式的登录。

    3.操作系统创建一个服务进程。

    4.存在的进程孵化(spawn)新的进程。

    进程的创建过程如下描述:

    1.在主进程表中增加一项,并从PCB池中取一个空白PCB。

    2.为新进程的进程映像中的所有成分分配地址空间。对于进程孵化操作还需要传递环境变量,构造共享地址空间。

    3.为新进程分配资源,除内存空间外,还有其它各种资源。

    4.查找辅助存储器,找到进程正文段并装入到正文区。

    5.初始化进程控制块,为新进程分配一个唯一的进程标识符,初始化PSW。

    6.把进程加入某一就绪进程队列,或直接将进程投入运行。

    7.通知操作系统的某些模块,如记账程序、性能监控程序。

    进程切换的步骤

    1.保存被中断进程的处理器现场信息。

    2.修改被中断进程的进程控制块的有关信息,如进程状态等。

    3.把被中断进程的进程控制块加入有关队列。

    4.选择下一个占有处理器运行的进程。

    5.修改被选中进程的进程控制块的有关信息。

    6.根据被选中进程设置操作系统用到的地址转换和存储保护信息。

    7.根据被选中进程的信息来恢复处理器现场。

    展开全文
  • 2.3 进程控制块

    2021-08-15 14:10:21
    进程控制块内容(process control block/PCB) 进程控制块(PCB)是进程的实例化。创建时,操作系统为每一个进程分配一个唯一标识符。该标识符p可以是指向PCB结构的指针,或是很多PCB的数组的索引。 PCB的具体实现和...
  • 进程控制块PCB详解

    万次阅读 多人点赞 2015-06-12 11:23:44
    PCB(process control block),进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB内容。一般情况下,PCB包含以下内容: (1...
  • 进程控制块PCB(Process Control Block),它是进程实体的一部分,是操作系统最重要的记录型数据结构。PCB 记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息。进程控制块的作用是使一个在...
  • 进程包含了程序代码和当前活动(其中当前活动通过程序计数器和处理器寄存器的内容表示)两个部分,进程是执行的程序。 具体有: 文本段(代码段) 数据段(全局变量) 栈(stack)(包含临时数据、函数参数...
  • 我们在介绍list.h文件时说道,linux是把所有的进程组织成双向...进程控制块中包含一个具体进程的所有信息,它大概包含以下信息: struct task_struct { /* * 1> 状态信息——描述进程的动态变化,如就绪态、等待
  • (进程在内存因策略或调度需求,会处于各种状态)广义上,所有的进程信息被放在一个叫做进程控制块的数据结构,可以理解为进程属性的集合。2.进程控制块每个进程在内核中都有一个进程控制块(PCB)来维护进程...
  • 这节讲进程控制块中的标识进程之间亲属关系的那些域。  系统创建的进程具有父子关系。所有的进程都是PID为1的init进程的后代(ps -e命令可以看到系统进程相关的一些信息)。内核在系统启动的最后阶段启动init...
  • 进程控制块PCB简介

    2017-02-13 12:07:45
    PCB(process control block),进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB内容。一般情况下,PCB包含以下内容: ...
  • (PCB)进程控制块

    2017-12-27 12:06:00
    然后填写PCB进程控制块有关该进程的信息,而在进程控制块中,有一部分(proc)会常驻在内存,其余保存在磁盘,等到需要使用时,通过内存映射表,把磁盘上的内容拷贝到主存。当进程处于休眠状态,被cpu调起时,...
  • 进程控制块PCB结构 task_struct 描述

    千次阅读 2016-06-02 20:56:48
    本分类下文章大多整理自《深入分析linux内核源代码》一书。...Linux的每个进程由一个task_struct数据结构来描述,在Linux,任务(task)、和进程(process)是两个相同的术语,task_struct其实就是
  • linux下的进程控制块和文件描述符

    千次阅读 2019-01-21 17:06:28
    PCB(process control block),进程控制块,是一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB内容。一般情况下,PCB包含以下内容: (1)进程标识符(内部,外部)...
  • 进程状态变迁进程控制块进程创建进程撤消终止进程的五种方法 一,进程状态变迁 进程的三种基本状态 就绪(Ready)状态 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程...
  • 进程控制块(PCB)的结构

    千次阅读 2013-02-19 10:32:52
    进程控制块(PCB)的结构 进程控制块 PCB (Process Control Block):  存放进程的管理和控制信息的数据结构称为进程控制块。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,...
  • 05进程学习之PCB进程控制块 前言 我们知道,每个进程的内核区中都有一个进程控制块(PCB)来维护进程相关的信息,每个进程的PCB都是被MMU映射到物理内存上某块区域的不同地方。其实质是task_struct类型的结构体。 ...
  • Linux的进程及进程控制

    千次阅读 多人点赞 2018-09-03 17:33:14
    进程控制块PCB 进程状态 环境变量: 常见环境变量 getenv函数 setenv函数 unsetenv函数 进程控制 fork函数 getpid函数 getppid函数 getuid函数 getgid函数 进程共享 gdb调试 exec函数族 execlp函数 ...
  • 进程的描述与控制 进程的描述 程序的顺序执行和并发执行 顺序执行的特点 顺序性:每一操作都在下一操作开始前结束,严格按照顺序; 封闭性:程序在封闭环境下执行,程序运行时占全机资源,资源的状态只有...
  • linux 下的进程控制块-task_struct 初学

    千次阅读 2016-06-04 17:51:04
    进程控制块PCB(Process Control Block) (1)概述 进程控制块的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其它进程并发执行的进程。或者说,OS是...
  • 操作系统3 ————PCB和进程控制

    千次阅读 多人点赞 2019-02-02 17:27:28
    2.进程控制块中的信息 3.进程控制块的作用 4.进程控制块的组织方式 三.Linux的进程控制块 1.概述 2.task_struct数据结构简述 .Unix的进程控制块 1.概述 2.进程表(Proc表) 3.U区 4.系统区表 ...
  • 文章目录 除了CPU资源未满足,其它资源全都满足了;...另外,运行进程可能被剥夺处于就绪态,需要让出CPU时间片(可能操作:给进程分配CPU的时间片用完了或者被更高优先级的进程抢占) 另外,运行进程
  • Linux C/C++编程之(十六)进程及进程控制

    千次阅读 多人点赞 2020-07-07 11:47:43
    6)进程控制块PCB 每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息,Linux内核的进程控制块是task_struct结构体。 进程id。系统每个进程有唯一的id,在C语言中用pid_t类型表示,其实就是一个非负...
  • 进程控制块PCB学习

    2017-01-09 01:57:00
    PCB(process control block),进程控制块,是我们学习操作系统后遇到的第一个数据结构描述,它是对系统的进程进行管理的重要依据,和进程管理相关的操作无一不用到PCB内容。一般情况下,PCB包含以下内容: (1...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 129,954
精华内容 51,981
关键字:

以下进程控制块中的四项内容