文章目录
- 一.进程的概念
- 1.1概念
- 1.2进程的组成
- 1.2.1 PCB中描述进程的特征
- 二.进程的虚拟地址空间
- 三.进程间的通信
- 引入线程
一.进程的概念
1.1概念
百科的介绍:
换句话说,一个跑起来的程序,就是一个进程,也就是在操作系统中运行的exe程序就是一个进程,如下图的进程列表
进程是操作系统对一个正在运行的程序的抽象,同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位
而线程是操作系统调度执行的基本单位
1.2进程的组成
进程是一个重要的"资源管理",是由描述+组织构成的,
描述:使用结构体来描述进程属性(PCB(进程代码块))
组织:通过双向链表,来把多个PCB给串到一起
1.2.1 PCB中描述进程的特征
- pid 进程的身份标识符(唯一的数字)
- 内存指针 (指向自己的内存是那些)
- 文件描述符表 (硬件上的文件等其他资源)
- 进程调度的相关属性
详细的介绍的进程调度的相关属性
- 进程的状态
- 就绪状态
- 运行状态
- 阻塞状态
- 优先级
- 上下文
操作系统在进行进程切换的时候,就要把进程执行的"中间状态"记录下,保存好,下次这个进程再上CPU运行的时候,就可以恢复上次的状态好继续往下执行(读档,存档) - 记账信息
操作系统,统计每个进程在CPU上占用的时间和执行的指令的数目,根据这个来决定下一阶段如何调度
二.进程的虚拟地址空间
内存管理----虚拟地址空间
程序中所获取的内存地址,并非是真的物理内存的地址,而是经过了一层抽象,虚拟出来的地址(内存的特性:随机访问(闪现))
虚拟地址空间:程序中所取到内存地址,并非是真正的物理内存的地址,而是经过了一层抽象,虚拟的地址
先来介绍未引入虚拟地址的模式
如果代码不小心出不bug了,可能会导致访问的内存越界
像上面的图片,进程1访问的内存越界到进程2时候,就把进程2搞崩溃了
针对进程使用的内存空间,进行’"隔离"引入了虚拟地址空间,代码里不再直接使用真实的物理地址,而是使用虚拟的地址(由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换)
如下图:
一旦进程1访问越界了,操作系统发现后,此时就直接向进程反馈一个错误(具体来说是发送一个(SIGN SEGEMNT FAUL信号,引起进程的崩溃)
三.进程间的通信
虽然进程进行隔离,但是也引入了新的问题,进程之间也需要进行数据的交互,如此,进程之间就需要有进行"信息交换"的需求.进程间通信的需求就应运而生。
简单来说,需要搞一多个进程都能访问到"公共空间",基于这个公共空间进行交互数据即可.
其中公共空有很多具体的体现形式(不作过多介绍)
- 管道
- 共享内存
- 文件
- 网络
- 信号量
- 信号
引入线程
一个进程要完成内核的事情,它必须有一个运行在它的地址空间的线程。此线程负责执行该进程地址空间的代码。每个进程至少拥有一个在它的地址空间中运行的线程。一个进程要完成内核的事情,它必须有一个运行在它的地址空间的线程。此线程负责执行该进程地址空间的代码。每个进程至少拥有一个在它的地址空间中运行的线程。