目录
一、进程的概念?
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 查看系统的最大进程数