目录
前言
一.进程的概念
二.进程和程序之间的关系
2.1二者的关系
2.2资源的占用
三.进程的任务
四.进程的管理
五.PCB中的信息
5.1pid进程标识
5.2内存指针
5.3文件描述符表
六.进程的调度
6.1CPU的简单认识
6.2调度的方式
6.3PCB中调度相关属性
七.进程的通信与隔离
总结
🎁个人主页:tq02的博客_CSDN博客-C语言,Java,Java数据结构领域博主
🎥 本文由 tq02 原创,首发于 CSDN🙉
🎄 本章讲解内容:进程的讲解🎥学习专栏: C语言 JavaSE MySQL基础
前言
操作系统是一种软件,它管理计算机硬件和软件资源,并提供给用户和其他软件程序使用计算机的接口。它充当计算机系统的核心,为用户和应用程序提供一个友好的环境。而本文讲解的是操作系统当中最为核心的概念----进程
一.进程的概念
每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。
进程是操作系统对一个正在运行的程序的一种抽象,换言之:进程就是正在运行的程序
注:每个进程都有自己的内存空间、程序计数器、寄存器和打开的文件等资源。
进程特征: 动态性、并发性、独立性、异步性、结构性
二.进程和程序之间的关系
2.1二者的关系
程序是指一些exe的可执行文件,只存在于硬盘当中,例如:
程序变成进程的详细过程:双击程序,操作系统就会把可执行文件中的数据和指令,加载到内存中,并且CPU会去执行指令,完成一系列相关的工作,从而运行起来变为进程
进程的查看:点开任务管理器,就可以看见目前有多少进程正在运行。
注:一个程序可以多次运行,而每一次运行都会创建一个进程。
进程的状态有:运行、就绪、阻塞、创建、结束
2.2资源的占用
程序也就是exe可执行程序,占用的是硬盘空间。
进程,是程序的运行,需要消耗CPU的资源、内存资源、硬盘、网络带宽等。
在操作系统内部,进程是操作系统进行硬件资源分配的基本单位。
三.进程的任务
操作系统使用进程来管理计算机系统中运行的程序。进程是程序的执行实例,它包含了程序的代码、数据和执行状态。操作系统通过进程来分配系统资源、调度进程执行、保护进程和协调进程间的通信。
进程的主要任务包括:
-
进程创建:当一个程序被执行时,操作系统会创建一个新的进程来运行该程序。这涉及到为进程分配唯一的标识符和初始化进程的执行环境。
-
进程调度:操作系统根据一定的调度算法,决定哪些进程能够获得CPU的执行时间,并且在多个进程之间进行切换。调度算法可以根据进程的优先级、等待时间等因素来进行决策。
-
进程同步与通信:多个进程可能需要相互协作完成任务,因此操作系统提供了各种机制用于进程间的同步和通信。例如,信号量、互斥量、管道、消息队列等。
-
进程挂起与恢复:操作系统可以将一个正在执行的进程暂停,
四.进程的管理
进程为什么需要管理?一台计算机有很多进程,而如果不进行管理,则会发生混乱
管理步骤:描述和组织
描述:会使用一个专门的 结构体 记录一个进程里面的各个属性。
解析:结构体,便是C语言的结构体,并且为了描述进程的结构体,有一个专门术语:PCB(进程控制块)。
组织:使用一系列的数据结构,把多个进程进行一个有效的组织,方便进行遍历,查找等
解析:在Linux中,数据结构通常会使用双向链表的方式:
- 当查看进程列表时,本质便是遍历这个链表
- 创建一个进程时,就是创建了一个PCB,并且插入到链表上
- 销毁一个进程,就是讲一个PCB结构体从链表上删除并释放
额外补充:为什么是C语言的结构体,因为操作系统主要由C/C++来实现。
五.PCB中的信息
问:PCB是进程控制块,专门用于描述进程,可是它又具有什么信息呢?
答:操作系统使用进程控制块(PCB)来跟踪和管理每个进程的状态,主要有pid进程标识、内存指针、文件描述表
5.1pid进程标识
同一个系统,同一个时刻,虽然运行的是同一个程序,但进程不一样,因此pid用于区分每一个进程。
例如:一个微信会有那么多进程存在,因此为了更好区分,使用pid进行标识。
5.2内存指针
表示了该进程,对应的内存资源,而内存资源主要存储:exe中可执行加载的 指令 和 数据
而且还需要保存一些在运行过程中的中间结果之类的数据
5.3文件描述符表
内存指针与内存资源有关,而文件描述符表则是与硬盘资源有关。
每一个进程都会有一个文件描述符表,作用:记录当前进程正在使用哪些文件。
六.进程的调度
进程调度是操作系统中的一个重要概念,它决定了在多道程序环境下,哪个进程将获得CPU的使用权。进程调度的目标是提高系统资源的利用率和响应性能。
6.1CPU的简单认识
在讲解进程的调度前,我们先来讲解一下CPU,进程是需要在CPU上执行指令的,可是CPU只有1个,进程却有很多,那又怎么办呢?答案:轮着使用
在早期,CPU是单核的,所以同一个时刻只能允许一个进程运行,但是在后期,CPU不断的优化,虽然还是一个CPU,但是已经是多核了,也就是说,同一个时刻允许多个进程运行。
而现在八核十六线程、六核十二线程等的CPU,又是什么意思呢?意思就是在核的基础上又分成了2个,一个核可以允许2个线程的运行。而至于线程可以想象为简略版的进程
6.2调度的方式
进程的调度有2种方式,并行和并发
并行:同一时刻,N个进程同时在N个CPU核心上运行
并发:两个进程在轮着在CPU上运行,串行执行
注:由于CPU切换过程速度极快,因此微观上并发是串行执行,但宏观上,进程是同时执行
操作系统在调度进程时,可能是按照并行也可能是按照并发来调度,由于速度过快,导致我们无法感知。因此通常会用并发来代指 并发和并行
6.3PCB中调度相关属性
在PCB中关于进程调度的相关属性,是描述了进程对应CPU资源的使用情况。
属性有:状态、优先级、上下文、记账信息
状态主要有2种:阻塞状态,就绪状态。状态可以相互转换哦
- 就绪状态:进程已经随时做好了在CPU上执行的准备了。
- 阻塞状态:进程并没有准备好在CPU上执行,也称睡眠状态
优先级:指两个进程执行时,谁先谁后执行。但执行的顺序不是指谁先运行,而是为每个进程分配一个优先级,优先级高的进程先执行。
上下文:进程是一个接一个(串行)执行,但是进程一次运行不完(例如:后台应用),因此为了保证下次CPU执行时,可以从上次运行到的位置进行往后运行,相当于存档和读档,因此上下文记录的是进程在执行过程中,CPU的寄存器对应的数据
记账信息:统计每个进程都分别执行了多久,分别执行了哪些命令,分别排了多久的队,给进程的调度提供指导依据。
七.进程的通信与隔离
进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到对方存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备” 隔离性(Isolation)“,但是要完成一个复杂的业务需求,往往无法通过一个进程独立完成,总是需要进程和进程进行配合地达到应用的目的,如此,进程之间就需要有进行“信息交换“的需求,也就是通信.
隔离:进程就相当于一个个通道,在这些通道中分配资源,当其中一个进程崩溃,并不会影响其他进程。进程之间的独立性就依仗于虚拟内存地址。通过虚拟内存地址使其具有隔离性。
通信:相互隔离的进程之间有时也需要交互,交互的过程就是通信。主流操作系统提供的进程通信机制有如下:
1. 管道 2. 共享内存 3. 文件 4. 网络 5. 信号量 6. 信号
总结
我们不但需要学习进程,还要明白什么是线程,线程相当于进程的孩子,可以执行程序,但是依靠的是父亲(进程)的资源。而线程的学习,才是目前最重要的,进程只是为了更好的了解什么是线程。