进程之进程控制块与虚拟地址空间

1.进程概念

  在用户层面,进程是一次程序的动态运行实例,

  在操作系统层面,进程是操作系统进行资源调度和分配的基本单位,每一个进程都有自己独立的地址空间和运行状态。

操作系统为进程创建了一系列的数据结构来管理进程。操作系统会为每个进程创建一个虚拟地址空间和进程控制块。

2.虚拟地址空间

  在32位操作系统下,一个进程最多可以拥有4G的内存空间,在早期的计算机系统中,将程序直接加载到内存,也就是说,

程序所访问到的地址空间就是真实的内存空间,当有多个进程同时执行时,先将一个进程全部加载内存,然后,在剩下的内存

中取空间分配给其他进程。

  这样的分配方式存在很大问题,首先地址空间不隔离,使得A进程完全可能修改B进程的数据,同时,内存的利用率极低。

这时引入了虚拟地址空间的概念,为每一个进程创建一个虚拟的地址空间,在32位系统下,虚拟空间的大小为4G,然后使用

页表机制将虚拟地址映射到实际物理地址

  虚拟地址实现了多进程之间的地址空间隔离,任何一个进程不会干扰到其他进程的运行,同时,地址空间的映射由操作系统

完成,提高了空间利用率。

  linux下,地址空间分为5段,地址空间从高到低为

  1.内核区:内核空间为操作系统内核保留,不允许应用程序对内核空间进行读写

  2.栈区:栈向下生长,保存局部变量,函数参数,返回地址等

  3.内存映射段:

  4.堆区:堆向上生长,保存动态开辟的空间

  5.BSS段:未初始化或者初始化为0的全局变量和局部静态变量

  6.数据段:已初始化且初始化为非0的全局变量和局部静态变量

  7.代码段:可执行代码,字符串字面值,只读变量

  8.保留区:位于虚拟空间最底层,未赋予物理地址,对它的引用是违法操作,此处收到操作系统保护而用户无权访问,这也是为什

么C语言将空指针设置为0,地址0在保留区,一般不会指向有效数据。

3.task_struct

  linux操作系统使用task_struct管理进程,换句话说,在内核层面,它看不到各种应用程序,各种运行中的进程,它看到的是一个个

task_struct。一个进程对应一个task_struct,操作系统使用链式结构将一个个task_struct管理起来。task_struct中的数据成员标识了

进程的所有信息。

1.进程状态  

volatile long state;
int exit_state; 

  state的取值标识了进程的当前状态,包括运行,阻塞,僵死等等。

2.进程pid

pid_t pid;
pid_t tgid; 

  进程pid标识进程编号

3.进程内核栈  

 void *stack;  

4.标记  

unsigned int flags;

5.标识进程亲属关系的成员  

 struct task_struct *real_parent; /* real parent process */
 struct task_struct *parent; /* recipient of SIGCHLD, wait4() reports */
 struct list_head children;  /* list of my children */
 struct list_head sibling;   /* linkage in my parent‘s children list */
 struct task_struct *group_leader;   /* threadgroup leader */  

6.performance Event

 #ifdef CONFIG_PERF_EVENTS
     struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts];
     struct mutex perf_event_mutex;
     struct list_head perf_event_list;
 #endif

分析进程的性能问题

7.进程调度

int prio, static_prio, normal_prio;
unsigned int rt_priority;
const struct sched_class *sched_class;
struct sched_entity se;
struct sched_rt_entity rt;
unsigned int policy;
cpumask_t cpus_allowed;

4.进程状态

进程的基本状态为以下三种

  1.就绪状态:进程已经获得除过cpu之外的所有资源,只要获得cpu,就可以立即执行,通常处于就绪状态的进程被存放在

就绪队列中

  2.执行状态:进程获得cpu,程序在执行状态

  3.阻塞状态:进程因为某些事件暂时无法继续执行时,便放弃处理机而处于暂停状态。

在linux系统中,进程的具体状态为;
  R :运行状态:就绪态和执行状态

  S :可中断睡眠状态,进程处于等待状态,当进程需要的资源被释放时,进程转为运行态。

  D :不可中断睡眠状态:进程处于等待状态,只能用wake_up()函数唤醒

  Z:退出状态,进程已经终止,但父进程还未回收进程的资源。

时间: 2024-08-09 16:38:35

进程之进程控制块与虚拟地址空间的相关文章

LInux进程虚拟地址空间的管理

2017-04-07 脱离物理内存的管理,今天咱们来聊聊进程虚拟内存的管理.因为进程直接分配和使用的都是虚拟内存,而物理内存则是有系统"按需"分配给进程,在进程看来,只知道虚拟内存的存在! 前言: 关于虚拟内存和物理内存这些东东,本篇不作介绍,此等基础知识参考最普通的操作系统参考书籍即可.当然有问题也可留言,我们共同学习,共同进步! 进程虚拟地址空间: 每个进程拥有一个独立的虚拟地址空间,独立怎么体现?进程A有个地址1000,进程B也有个地址1000,为何两个地址不发生矛盾,还能正常工

Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)

日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 前言 Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) * idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_t

Linux进程虚拟地址空间

在linux中,各个进程的虚拟地址空间是独立的.各个进程的虚拟地址空间起始于0,延伸至TASK_SIZE -1. 在32 bit系统中,内核分配1GB,而各个用户空间进程可用的部分为3GB. 进程虚拟地址空间由若干个区域组成, 1.当前运行代码的二进制代码.text段. 2.程序使用的动态库代码. 3.存储区局变量和静态变量的数据段,bss,data段 4.保存动态分配数据的堆 5.保存局部变量和实现函数 调用的栈 6.环境变量和命令行参数. 7.文件内容映射到虚拟地址空间的内存映射. 具体布局

进程的虚拟地址空间,堆栈、堆、数据段、代码段

上图是进程的虚拟地址空间示意图. 堆栈段: 1. 为函数内部的局部变量提供存储空间. 2. 进行函数调用时,存储“过程活动记录”. 3. 用作暂时存储区.如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈. 数据段(静态存储区): 包括BSS段的数据段,BSS段存储未初始化的全局变量.静态变量.数据段存储经过初始化的全局和静态变量. 代码段: 又称为文本段.存储可执行文件的指令. 堆: 就像堆栈段能够根据需要自动增长一样,数据段也有一个对象,用于完成这项工作,这就是堆(heap).堆区域用

进程的虚拟地址空间分布

一个linux进程的虚拟地址空间分布如上图所示,分为内核空间和进程空间,对于一个32位操作系统来说,4GB的空间分成两部分,低地址的0~3G给用户空间,高地址的3G~4G给内核空间. 内核空间 与进程有关的数据结构段 每个进程都自己独特的PCB和页表,映射到不同的物理内存. 内核代码段 所有进程的内核代码段都映射到同样的物理内存,并在内存中持续存在. 进程空间 1.正文段 存放代码和常量值(字面值常量) 2.未初始化数据段(BSS段) 存放未初始化的全局变量 3.初始化数据段 存放已经初始化的全

进程(二) —— 进程控制块

进程(二) —— 进程控制块 进程控制块(PCB, Process Control Block) 定义: 操作系统管理和控制进程运行所用的信息集合 操作系统用 PCB 来 描述进程的 基本情况 以及 运行变化 的过程 PCB是进程存在的唯一标志 每个进程都在 操作系统 中有一个对应的PCB 进程控制块的使用 进程创建 生成 该进程的 PCB 进程终止 回收它的PCB 进程的组织管理 通过对PCB的组织管理来实现 进程控制块内容 进程标志信息 处理机现场保存 进程控制信息 进程控制信息 调度和状态

进程与进程描述符(task_struct)

一. 进程 进程(Process) 计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实体:在当代面向线程设计的计算机结构中,进程是线程的容器.程序是指令.数据及其组织形式的描述,进程是程序的实体. --------------------------------------------------------------- 释义:一段程序的执行过程 特征:动态.独立.异步.并发 结构特征

进程管理—进程描述符(task_struct)

http://blog.csdn.net/qq_26768741/article/details/54348586 当把一个程序加载到内存当中,此时,这个时候就有了进程,关于进程,有一个相关的叫做进程控制块(PCB),这个是系统为了方便进行管理进程所设置的一个数据结构,通过PCB,就可以记录进程的特征以及一些信息. 内核当中使用进程描述符task_struct. 这个task_struct就是一个定义的一个结构体,通过这个结构体,可以对进程的所有的相关的信息进行维护,对进程进行管理. 接下来我们

Linux中的进程及进程控制

一.整体大纲 二.基础知识 1. 进程相关概念 1)程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁....)     进程,是一个抽象的概念,与操作系统原理联系紧密.进程是活跃(运行起来的)的程序,占用系统资源.在内存中执行.(程序运行起来,产生一个进程).     程序 → 剧本(纸) 进程 → 戏(舞台.演员.灯光.道具...),同一个剧本可以在多个舞台同时上演.同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)     如:同