进程course (上)

1.概念

进程是一个程序执行过程。当程序执行后,执行过程开始,则进程产生;执行过程结束,则进程也就结束。它是一个独立的可调度的活动,由操作系统进行统一调度,相应的任务会被调度到 cpu 中进行执行。进程一旦产生,则需要分配相关资源,同时进程是资源分配的最小单位。

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

并行与并发

并行:表示多个任务能够同时执行,依赖于物理的支持。(8核芯的CPU可以同时执行八个任务)

并发:在同一时间段有多个任务在同时执行,由操作系统调度算法来实现。(比如时间片轮转)

2.linux中的进程管理

1. 在 Linux 系统中,管理进程使用树型管理方式;

2. 每个进程都需要与其它某一个进程建立父子关系,对应的进程叫做父进程;

3. Linux 系统会为每个进程分配id ,这个id作为当前进程的唯一标识,当进程结束,则会被回收;

4. 进程的id与父进程的id分别通过getpid()与getppid()来获取。

Tips. pid_t其实是int类型 

3.进程的空间分配和堆栈大小

空间分配

进程建立之后,系统则要为这个进程分配相应的空间,32位Linux系统中,会为每个进程分配 4G 的空间。

4G的进程空间主要分为两部分,高位1G是内核空间,低位3G是用户空间,如图所示:

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

stack : 存放非静态的局部变量

heap : 动态申请的内存

.bss : 未初始化过的全局变量(包括初始化为0的,未初始化过的静态变量(包括初始化为0)

.data : 初始化过并且值不为0的全局变量,初始化过的不为0静态变量

.rodata : 只读变量(字符串之类)

.text : 程序文本段(包括函数,符号常量)

Tips.

 1. 当用户进程需要通过内核获取资源时,会切换到内核态运行,此时当前进程会使用内核空间的资源

2. 用户需要切换到内核态运行时,主要是通过系统调用

堆栈大小

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

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

4.虚拟地址与物理地址

在程序执行过程中,操作系统会为进程分配4G的虚拟地址空间,因此可以通过下图进行理解:

*虚拟地址 : 虚拟地址并不代表真实的内存空间,而是一个用于寻址的编号;

*物理地址 : 是指内存设备中真实存在的存储空间的编号;

虚拟地址空间中的每个地址都是一个虚拟地址 ,虚拟地址通过映射的方式建立与物理地址的关联,从而达到访问虚拟地址就可以访问到对应的物理地址。

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

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

*直接访问物理地址,会导致地址空间没有隔离,很容易导致数据被修改

*通过虚拟地址空间可以实现每个进程空间都是独立的,操作系统会映射到不用的物理地址区间,在访问时互不干扰

5.进程的状态管理

进程状态反映进程执行过程的变化。这些状态随着进程的执行和外界条件的变化而转换。在三态模型中,进程状态分为三个基本状态,即运行态,就绪态,阻塞态。在五态模型中,进程分为新建态、终止态,运行态,就绪态,阻塞态。

三态模型

一个进程从创建而产生至撤销而消亡的整个生命期间,有时占有处理器执行,有时虽可运行但分不 到处理器、有时虽有空闲处理器但因等待某个事件的发生而无法执行,这一切都说明进程和程序不 相同,它是活动的且有状态变化的,这可以用一组状态加以刻画。为了便于管理进程,一般来说, 按进程在执行过程中的不同情况至少要定义三种不同的进程状态:

(1)运行(running)态:进程占有处理器正在运行;

(2)就绪(ready)态:进程具备运行条件,等待系统分配处理器以便运行;

(3)等待(wait)态:又称为阻塞(blocked)态或睡眠(sleep)态,指进程不具备运行条件,正在等待某个事件的完成;

通常,一个进程在创建后将处于就绪状态。每个进程在执行过程中,任意时刻当且仅当处于上述三 种状态之一。同时,在一个进程执行过程中,它的状态将会发生改变。引起进程状态转换的具体原 因如下:

(1)运行态一一等待态:等待使用资源或某事件发生,如等待外设传输;等待人工干预;

(2)等待态一一就绪态:资源得到满足或某事件己经发生,如外设传输结束;人工干预完成; 

(3)运行态一一就绪态:运行时间片到,或出现有更高优先权进程;

(4)就绪态一一运行态:CPU空闲时被调度选中一个就绪进程执行;

五态模型

在一个实际的系统里,进程的状态及其转换比上面叙述的复杂一些,例如,引入专门的新建态(new) 终止态(exit )

状态转换的具体过程:

(1)NULL一一新建态:执行1个程序,创建一个子进程;

(2)新建态一一就绪态:当操作系统完成了进程创建的必要操作,并且当前系统的性能和内存的容 量均允许;

(3)运行态一一终止态:当1个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系 统所终结,或是被其他有终止权的进程所终结;

(4)终止态一一NULL:完成善后操作;

进程状态

(1)运行态(TASK_RUNNING) : 此时进程或者正在运行,或者准备运行,就绪或者正在进行都属于运行态;

(2)睡眠态(TASK_SLEEP): 此时进程在等待一个事件的发生或某种系统资源:

*可中断的睡眠(TASK_INTERRUPT) : 可以被信号唤醒或者等待事件或者资源就绪;

*不可中断的睡眠(TASK_UNTERRUPT) : 只能等待特定的事件或者资源就绪;

(3)停止态(TASK_STOPPED) : 进程暂停接受某种处理(例如:gdb调试断点信息处理);

(4)僵尸态(TASK_ZOMBIE):进程已经结束但是还没有释放进程资源;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值