<1>【linux进程】(进程的概念?)(进程的空间分配?)(进程的状态管理?)

服务器 0

目录

 一、进程的概念?

1、进程的定义

2、进程的特点

3、进程和程序的区别

4、并行与并发

二、进程的空间分配和堆栈大小?

1、进程的空间分配

 2、虚拟地址与物理地址?

 3、查看堆大小


 一、进程的概念?

1、进程的定义

进程描述是一个程序执行过程。当程序执行后,执行过程开始,则进程产生;执行过程结束,则进程也
就结束。
下面是 windows 系统中,所有的进程,即正在执行的程序,一旦结束进程,就意味着程序结束。

 

2、进程的特点

进程是一个独立的可调度的活动,由操作系统进行统一调度,相应的任务会被调度到 cpu 中进行执行进程一旦产生,则需要分配相关资源,同时进程是资源分配。

 

3、进程程序区别

程序是静态的,它是保存在磁盘上的指令的有序集合,没有任何执行的概念
进程是一个动态的概念,它是程序执行的过程,包括了动态创建、调度和销毁的整个过程

 

4、并行与并发:

并行执行 : 表示多个任务能够同时执行,依赖于物理的支持,比如 cpu 是 8 核芯,则可以同时执行 8 个任务

二、进程的空间分配和堆栈大小?

1、进程的空间分配:

进程建立之后,系统则要为这个进程分配相应的空间,32位Linux系统中,会为每个进程分配 4G 的空间。
4G的进程空间主要分为两部分,高位1G是内核空间,低位3G是用户空间。

 

用户空间又具体分为如下区间:

 现在来看看各段的所代表的含义:

  • stack(栈):存放非静态的局部变量
  • heap(堆):动态申请的内存
  • .bss:未初始化过的全局变量(包括初始化为0的,未初始化的静态变量(包括初始化为0))
  • .data:初始化过并且值不为0的全局变量,初始化过的不为零的静态变量
  • .rodata:只读变量(包括但不限字符串)
  • .text:程序文本段(包括函数,符号常量)

除此之外:当用户进程需要通过内核获取资源时,会切换到内核态运行,此时当前进程会使用内核空间的资源,切换到内核态运行时,主要是通过系统调用

 2、虚拟地址与物理地址?

  • 虚拟地址 : 虚拟地址并不代表真实的内存空间,而是一个用于寻址的编号
  • 物理地址 : 是指内存设备中真实存在的存储空间的编号

虚拟地址通过映射的方式建立与物理地址的关联,从而达到访问虚拟地址就可以访问到对应的物理地址

  • 在 cpu 中有一个硬件 MMU(内存管理单元) ,负责虚拟地址与物理地址的映射管理以及虚拟地址访问
  • 操作系统可以设置 MMU 中的映射内存段

 

在操作系统中使用虚拟地址空间主要是基于以下原因:

  • 直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改
  • 通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在访问时互不干扰

 在linux中,查看堆大小:

<1>Linux下进程栈的默认大小是8M,可以通过 ulimit -s 查看

<2>堆的大小理论上大概等于进程虚拟空间大小-内核虚拟内存大小,Linux下,进程的高位1G留给内核,低位3G留给用户,所以进程堆大小小于3G.

<3>最大进程数
在Linux下,通过 ulimit -u 查看系统的最大进程数

也许您对下面的内容还感兴趣: