百科的介绍:
换句话说,一个跑起来的程序,就是一个进程,也就是在操作系统中运行的exe程序就是一个进程,如下图的进程列表
进程是操作系统对一个正在运行的程序的抽象,同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位
而线程是操作系统调度执行的基本单位
进程是一个重要的"资源管理",是由描述+组织构成的,
描述:使用结构体来描述进程属性(PCB(进程代码块))
组织:通过双向链表,来把多个PCB给串到一起
详细的介绍的进程调度的相关属性
内存管理----虚拟地址空间
程序中所获取的内存地址,并非是真的物理内存的地址,而是经过了一层抽象,虚拟出来的地址(内存的特性:随机访问(闪现))
虚拟地址空间:程序中所取到内存地址,并非是真正的物理内存的地址,而是经过了一层抽象,虚拟的地址
先来介绍未引入虚拟地址的模式
如果代码不小心出不bug了,可能会导致访问的内存越界
像上面的图片,进程1访问的内存越界到进程2时候,就把进程2搞崩溃了
针对进程使用的内存空间,进行’"隔离"引入了虚拟地址空间,代码里不再直接使用真实的物理地址,而是使用虚拟的地址(由操作系统和专门的硬件设备负责进行虚拟地址到物理地址的转换)
如下图:
一旦进程1访问越界了,操作系统发现后,此时就直接向进程反馈一个错误(具体来说是发送一个(SIGN SEGEMNT FAUL信号,引起进程的崩溃)
虽然进程进行隔离,但是也引入了新的问题,进程之间也需要进行数据的交互,如此,进程之间就需要有进行"信息交换"的需求.进程间通信的需求就应运而生。
简单来说,需要搞一多个进程都能访问到"公共空间",基于这个公共空间进行交互数据即可.
其中公共空有很多具体的体现形式(不作过多介绍)
一个进程要完成内核的事情,它必须有一个运行在它的地址空间的线程。此线程负责执行该进程地址空间的代码。每个进程至少拥有一个在它的地址空间中运行的线程。一个进程要完成内核的事情,它必须有一个运行在它的地址空间的线程。此线程负责执行该进程地址空间的代码。每个进程至少拥有一个在它的地址空间中运行的线程。
下一篇:iptables的介绍