1.进程的概念
概念:一个跑起来的程序,就是一个进程(process);
进程是操作系统资源分配的基本单位;
2.句柄
系统中包含很多的软件资源(进程就是一种软件资源),写代码就需要用到一些软件资源,软件资源在操作系统内核里,在应用程序的代码中,不方便直接操作;
句柄:就好比一个遥控器(简单的整数/编号):通过系统调用借助这个句柄就可以操作软件资源了;
指针也可以视为一种句柄;
3.进程调度的属性
进程是一个重要的“软件资源”,是由操作系统内核负责管理的;
描述:讲清楚都有哪些属性特征;
组织:通过一定的数据结构,把多个这样的基本单位串起来;通过类型双向链表,来把多个PCB给串到一起(不是单纯的双向链表);
4.PCB(进程控制块)
概念:为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为进程控制块(PCB Process Control Block);
PCB中描述进程的特征:
4.1 pid:进程的身份标识符(唯一的数字);
4.2 内存指针:指向了说自己的内存是哪些;
4.3 文件描述表:硬盘上的文件等其他资源;
5.进程调度相关的属性
PCB包含了很多属性,以下属性为核心属性:
1)进程的状态
就绪状态:随叫随到,进程随时准备好了去CPU上执行;
运行状态:正在和我在一起的;
阻塞状态:出差了,短时间内无法到CPU上执行了;
比如 进程在进行密集的IO操作,读写数据;
2) 优先级
先给谁排,后给谁排,给谁排多点,给谁排少点;
进程也是有优先级的;
3) 上下文
操作系统在进行进程切换的时候,就需要把进程执行的“中间状态”记录下来,保存好;
下次这个进程再上CPU上运行的时候,就可以恢复上次的状态,继续往下执行;
"存档,读档":上下文的本质上就是你存档的内容,进程的上下文,就是CPU中各个寄存器的值;
寄存器:CPU内置的存储数据的模块;保存的就是程序运行过程中的中间结果;
保存上下文,就是把这些CPU寄存器的值,记录保存到内存中;
回复上下文,就是把内存中的这些寄存器值恢复回去;
4)记账信息
操作系统,统计每个进程在CPU上占用的时间和执行的指令数目;根据这个来决定下一阶段如何进行调度;
6.内存管理
6.1 虚拟地址空间:程序中所获取到的内存地址,并非是真实的物理内存地址,而是经过了一层抽象,虚拟出来的地址。
6.2 C语言中的地址:内存地址就是虚拟的内存地址,并非真实的物理内存地址;
内存(物理上是个内存条)
内存编号:就是物理地址;
6.3 内存了不起的特性:随机访问;访问内存上的任意地址的数据,速度都极快,时间上都差不多。
正是针对该特点:数组的访问时间复杂度为O(1);
6.4 进程之间相互影响的问题(进程访问内存越界)
解决方法:进行“隔离”,引入虚拟地址内存;
MUU硬件设备防止进程访问内存越界:让多个进程使用的内存是隔离的,防止内存访问越界;
6.5 进程之间进行数据交互的问题:
需要搞一个多个进程都能访问的“公共空间”,基于这个公共空间来进行交互数据即可;
这里的通信方式/公共空间有很多具体的体现形式;
两种方式:基于文件、基于网络;