优秀网站展示,国外做的比较好的网站,制作网站的公司不干了,企业网站建设要在现代计算机系统中#xff0c;进程是一个核心概念#xff0c;它代表了程序的执行实例。通过并发执行多个进程#xff0c;计算机能够提高效率和资源利用率。
1. 进程的概念
进程是指在计算机系统中正在执行的程序的实例。每个进程都有自己的地址空间、寄存器集合、堆栈和文…在现代计算机系统中进程是一个核心概念它代表了程序的执行实例。通过并发执行多个进程计算机能够提高效率和资源利用率。
1. 进程的概念
进程是指在计算机系统中正在执行的程序的实例。每个进程都有自己的地址空间、寄存器集合、堆栈和文件描述符等资源。进程的创建和销毁由操作系统负责管理。进程可以独立运行也可以与其他进程进行通信和协作。进程是操作系统分配资源的基本单位。
2. 进程在系统中的管理
2.1 描述
进程是类似于对象有一些属性所以需要 像 类/结构体 这样的概念来描述它
操作系统大多是 C/C实现的所以进程的描述大多使用的是结构体 没有Java写的操作系统
表示进程信息的结构体被称为 PCB 进程控制块 Process Control Block这个概念在说有操作系统中是通用的说有的操作系统中的进程都可以被称为PCB不过具体对应的结构体名称可能会有不同例如Linux 中该结构体名称 为 task_struct
2.2 组织
在操作系统中所有进程都会被以一定的数据结构进行组织起来 例如 在Linux 中使用的是链表把所有的进程给串联起来当我们看到任务管理器中的进程时意味着系统内部就在遍历链表并打印每个节点的相关信息。
如果运行一个新的程序于是系统中就会多一个进程多出的这个进程就需要构造出一个新的 PCB 并且添加到链表上
如果某个运行的程序退出了就需要把对应的 PCB 从链表中删除 并且销毁对应的 PCB 资源
3. CPU的资源分配
一个CPU可能有一个核心可能有多个核心在同一时刻一个核心上只能有一个进程以我的电脑为例 我的电脑有16个逻辑核心也就是说同一时刻我的电脑上只能运行16个进程但是我电脑上却不止运行了16个进程于是就引出了一个概念 分时复用并发让多个进程轮流在核心上运行。
假设只有一个核心让进程1先执行一会然后让进程2执行 然后进程三执行.....然后又到进程1执行以此类推只要切换的速度足够快人是感知不到这个切换的过程的于是在人眼中看起来一个核心在同时执行多个进程这就叫做并发
如果有多个核心 那么同时就可以有多个不同的进程同时执行这种同时执行不是靠快速切换来模拟出来的称为“并行执行” 每个核心任然会进行分时复用。
现在的计算机执行过程 往往是 并行并发 同时存在的 两个进程是并行执行还是并发执行 是看系统的调度的系统如何调度取决于系统调度器模块的实现常规手段是无法干预的。因此往往把“并行” 和 “并发” 统称为“并发” 我们打开任务管理器看见进程所占的CPU百分比是单位时间内 该进程在CPU上执行的时间比例 4. PCB 中的核心属性
PCB 这个结构体是一个非常庞大的结构体有上百个属性这里我们只需要了解几个重要的属性
4.1 进程标识符Process IdentifierPID
每个进程都有一个唯一的PID用于标识和管理进程此处是通过一个整数来进行区分的从1开始累加系统会保证同一个机器上同一时间每个进程的PID是唯一的如果要对某个进程进行一定的操作就可以用PID进行区分 例如在任务管理器中选中某个进程点击结束任务此时就是任务管理器获取到你选中的进程的PID 然后带哦用一个系统的 API 把 PID 作为参数传进去 从而完成这里的结束任务的操作。
4.2 内存指针
进程运行过程中需要消耗一些系统资源其中内存就是一种重要的资源。进程想要使用内存需要从系统这里申请系统给进程分配了一块空间才能使用。每个进程都只能使用自己申请到的内存。
内存指针就是用来描述这个进程能使用哪些内存。
当开始运行一个进程的时候系统会先把这个执行文件包含的指令和数据先加载到内存中然后再创建进程让进程开始执行
4.3 文件描述符表
进程经常要访问硬盘
操作系统对于硬盘这样的硬件设备进行了封装 -文件
一个进程想要操作文件需要先打开文件 打开文件就是 让进程在文件描述符表中分配一个表项构造一个结构体表示这个文件的相关信息例如C语言中的 fopen函数
4.4 状态
描述某个进程是否能够 去 CPU上执行比如某个进程 通过Scanner等待用户输入但是用户什么时候输入是不确定的所以在用户输入前就不能让这个进程在CPU上
此时这个进程的状态就被称为 “阻塞状态”
阻塞状态当前进程不方便去CPU上执行不应该去调度它
就绪状态当前进程随时可以去CPU上执行等待系统调用
4.5 优先级
多个进程等待系统调度时调度的先后顺序在CPU上执行的时间长短都是可以调配的。
例如在你玩游戏时当前运行的游戏优先级肯定是比大多数进程更高的。
4.6 记账信息
对每个进程在CPU上调度的时间进程一个统计 针对这个结果对进程的调度进行一个调整
4.7 上下文
上下文是支持进程调度的重要信息相当于游戏的存档和读档。
每个进程在运行过程中会有很多的中间结果在CPU的寄存器中操作系统对进程的调度可以认为是随机的任何一个进程执行到任何一条指令的时候都有可能被调度出CPU上下文就可以保存当前进程执行的进度确保下次该进程再次进出CPU执行时能够从上次被调度出CPU时的进度开始执行。
例如执行 3 14时刚把 3 和 14 存到寄存器中这个进程就被调度走了等这个进程再次进入CPU执行时就会直接执行后续的指令不会再次执行 把3 和 14 存到寄存器的指令
当操作系统决定切换到另一个进程时需要保存当前进程的上下文信息并加载下一个进程的上下文。
5. 进程间通信
多个进程之间需要进行通信和协作以实现共享资源、数据传输和协同处理等目标。常见的进程间通信方法包括
管道Pipe一种单向的通信方式可以在具有亲缘关系的进程之间进行通信。共享内存Shared Memory多个进程可以访问同一块共享内存实现高速的数据传输和共享。消息队列Message Queue多个进程可以通过消息队列进行异步通信将消息发送到队列中其他进程可以从队列中接收消息。套接字Socket用于不同计算机之间的进程间通信可以通过网络进行数据传输。