1.1 什么是进程?
一个正在执行的应用程序。一台计算机会有很多的进程,执行进程指令,需要硬件资源。
进程 是 操作系统 进行资源分配 的 基本单位。
谈到一个应用程序,有两种状态:(1)没有运行的时候,是一个exe文件,躺在硬盘上;(2)运行的时候,exe就会被加载到内存中,并且cpu执行里面的指令。
1.2 进程管理
一.概述
1)进程描述:通过结构体/类,把进程的属性表示出来(主流系统C/C++实现的,广泛用到结构体struct)
2)进程组织:通过数据结构,把多个上面的结构体串起来,并进一步的进行增删改查...
例:
Linux操作系统:使用“PCB”(进程控制块)这样的结构体来描述进程信息。
简单认为,通过链表的方式将多个PCB串到一起:
a.创建新的进程(双击exe,运行程序),就相当于创建了一个PCB结构体,并且插入到链表中。
b.销毁进程,就是把PCB从链表上删除,并且释放这个PCB结构体。
c.查看进程列表,就是在遍历这个链表,依次显示对应的信息。
(简化版本的说法,实际情况更复杂,不只是一个链表。)
二.PCB详细介绍
PCB(Process Control Block)是操作系统用于管理进程控制信息的数据结构,它是进程存在的唯一标识,用于维护进程的属性和状态信息。
PCB其实是一个复杂的结构体,里面的属性很多,此处只讨论一些关键信息:
1. 进程标识符(PID)
--每个进程的PID是唯一的,用于区别其他进程。
2.内存指针(一组)
--操作系统 运行exe就会读取exe中的指令和数据,加载到内存中.(内存地址)----> 表明 进程的执行 需要一定的内存资源的。
3.文件描述符表(顺序表/数组)
--描述了进程打开了那些文件-->对应到硬盘上的数据,表明 进程的执行 需要一定的硬盘资源。
/* 接下来的四点共同决定了 进程的调度 是理解进程管理的重要因素 ,操作系统根据调度算法选择一个 就绪状态 的进程 进入 运行状态。操作系统 进程调度的关键:“分时复用”
(分时复用:这个时刻cpu运行进程1,运行一会儿后,又运行进程2,过一会儿进程3...
由于cpu运算速度非常快 肉眼察觉不到 感觉是同时执行 宏观角度上-->“并发执行”
现在又有了多核心cpu 此时每个核心和核心之间 微观上也能同时执行不同的进程-->“并行执行”
并发/并行都是操作系统内核统一调度的 程序员/普通用户感知不到 因此 平时也把 并发 和 并行 统称为“并发” 对应的编程手法称为“并发编程”。
)
当前操作系统都是“多任务系统” 同时可以进行多个进程,但是cpu数量有限,需要同时进行的进程很多,因此进度的调度十分关键!!! */
4.进程状态
--就绪状态:进程已经准备好运行,等待操作系统调度。在这个状态下,进程具备运行条件,但由于cpu正被其他进程占用,暂时无法执行
--阻塞状态或等待状态:进程由于等待某个事件(如I/O操作完成、信号量、网络数据到达等)的发生而暂时停止运行。等待过程,进程不占用cpu。已经学过的代码中,大部分代码不会产生阻塞,但有一个典型的代码会引起进程阻塞:从控制台读取输入(等待IO产生的阻塞)scanf/Scanner-->执行到这样的语句代码就“卡住”,等待输入数据。
//除了上面之外,进程还有其他状态,此处暂时不展开这么多 //
5.进程优先级
--进程优先级通常是一个整数,表示进程相对于其他进程的重要性或紧迫性,操作系统会根据进程的优先级来决定进程的执行顺序。
6.进程的上下文
--进程的上下文是 操作系统在切换进程时 需要 保存和恢复 的 信息集合。 这些信息包含了进程在执行过程中的状态(各种cpu寄存器中的值),使得进程在重新获得cpu时能够从上次停止的地方继续执行。上下文也可以理解成游戏中的 存档、读档。
7.进程的记账信息
--进程的记账信息是操作系统用来记录和监控进程对资源系统的使用情况的数据。在优先级的加持下,使不同的进程吃到的资源差异越来越大,操作系统统计每个进程在cpu上执行的时间进一步调正调度策略。
这几个属性相互配合,共同构成了进程调度的核心逻辑。上述调度过程 都是系统内核负责完成的,虽然系统内核在完成,写程序的时候是会受到影响的,因此还是需要了解调度过程。
1.3 进程间通信(Inter Process Communication)
进程间通信是指在不同进程之间传送数据或信号的一些方法,现在最主要的进程间通信方式有且只有一个:Socket(后续重点内容)。IPC机制为进程提供了相互通信和数据交换的能力, C++会学习管道、消息队列、共享内存....系统原生提供的API,但是JVM没有封装(开发JVM的大佬觉得这些不是很必要,因此不需要学)
1.4 内存分配——内存管理(Memory Manage)