一定要知道的进程知识

简介: 一定要知道的进程知识

image.png

进程是什么


是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。官方解释,不用大白话也能看懂,难得,用程序员的语言就是,程序是类,进程是对象。

进程的由来


任何东西的存在都有它的必然性,那为什么会有进程?

  • 为了提高计算机系统的效率.增强计算机系统内各种硬件的并行操作能力.操作系统要求程序结构必须适应并发处理的需要.为此引入了进程的概念
  • 进程是操作系统的核心,所有基于多道程序设计的操作系统都建立在进程的概念之上
  • 进程是设计和分析操作系统的有力工具
  • 清晰地刻画动态系统的内在规律,有效管理和调度进入计算机系统主存储器运行的程序

进程的特征


  • 动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的
  • 并发性:任何进程都可以同其他进程一起并发执行
  • 独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位
  • 异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进

进程的结构


程序就是程序员编写的可运行的代码,数据是程序运行中产生的,进程控制块则用于表示进程的状态,其作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位或与其它进程并发执行的进程。另外多个不同的进程可以包含相同的程序,一个程序在不同的数据集里就构成不同的进程,能得到不同的结果,但是执行过程中,程序不能发生改变。

进程运行都经历了什么


当用户发送指令告诉操作系统我要启动程序时,先由操作系统建立一个进程实例,每个进程有自己的虚拟地址、进程控制块、页表等数据结构,从装载器返回的程序入口(虚拟地址)开始,操作系统命令CPU从该虚拟地址开始执行指令,由于代码未加在到内存中,CPU从页表中找到映射的物理地址,通过缺页异常处理将硬盘中的代码读到内存当中,然后CPU修改页表状态,表示代码已经加载内存中,此时再从程序入口(虚拟地址)开始执行,随着执行,代码慢慢的都加在到内存中,不断运行,中间会经历阻塞、挂起状态等,最终结束,释放所有内存中的数据。

进程的地址分配


image.png

每个进程都会分配相同的虚拟地址空间,而相同的虚拟地址空间,其实对应的物理地址不同,但也可以相同,所以这就给进程间通信提供了有利的条件,具体对应的物理地址其实由CPU的MMU模块进行管理。内核空间放着内核的代码和数据。

进程管理


为什么需要管理呢?我们都知道,CPU同一时刻只能处理一件事,也就只能处理一个进程,而且进程肯定比CPU个数多,所以存在多个进程使用一个CPU的情况,所以进程管理的意义在于合理分配计算机资源,这里的资源包括CPU、网络、键盘等,怎么合理呢?就需要在适合的时机创建和释放,合理占坑是一个进程应有的基本道德。那么一个进程一般会有几个状态呢?如下

进程生命周期


  • 运行状态
  • 睡眠状态
  • 等待状态
  • 新建状态
  • 僵死状态

以上状态的转换流程如下

image.png

进程状态的意义在于它告诉我们,当下它可以做什么,特别是对于操作系统爸爸而言,它会根据进程不同的状态去加载或者去释放资源,以免造成浪费,那么就需要一种机制来完成这样的事情,也就是下面讲的进程调度

进程调度


调度意味着被支配,说白了就是被系统用某种算法所支配,当然算法的成败,直接关乎着进程的吞吐量、CPU利用率、资源获取的公平性等,调度算法是极其复杂的,但有一种简单的算法规则你一定听过,那就是优先级算法,始终选择最高优先级的进程,作为下一个运行的进程,但当没有找到最高优先级进程时,该怎么办呢?这时该运行谁呢?其实这时系统给我们创建了一个空转进程,如果没有空转进程可以么?答:不可以,因为进程调度的基本原则是找到当前进程,找到要运行的进程,然后切换,如果当前进程是NULL,下一个要运行的进程也是NULL,调度器还怎么执行呢?会导致整个系统的停止,无法继续。说到进程切换,我们就深入了解下

进程切换


最本质的问题是切换了什么?搞懂这个,你才会明白,下面我画个图,辅助你理解下

image.png

每个进程都对应一个PCB数据结构,用来存储进程的控制信息,有了这些信息就可以在下次再回来时继续运行。PCB为Process Control Block 即进程控制块,数据结构如下:

  • 进程状态,不用解释
  • pid,进程ID,唯一性
  • 寄存器,一般有通用寄存器、指令寄存器,通用的被用户空间访问,指令寄存器存放下一条指令,这样在恢复运行是就知道该干嘛
  • 优先级,进程的优先级,本质是对CPU的控制权优先级大小
  • 通信信息,进程间通信关系,由操作系统提供通信通道
  • 资源,表现对资源的需求,比如打开的文件
  • 等等

这里并没有列完整,由于对于不同的操作系统,可能有不同的数据结构,所以就不一一列举,希望你能明白的是,进程的切换的本质就是替换当前进程对象,改为跟他有一样类结构的对象而已。

拓展:

  • 进程切换的源动力是陷阱机制,隶属中断的一种,而中断分为硬件中断和软件中断,简称硬中、软中,硬中45、软中65,嗯...都买不起,软中就是陷阱机制,陷阱本身也需要驱动,那它的驱动是?如程序异常,非法操作、地址越界、断点、除以0等等。
  • 说到中断,不得不提,中断是用户态到内核态的唯一途径,是唯一,记住哦。

小结


似懂非懂,进程就这?不不,对于我们目前学习进程通信,这些知识也基本ok了,如果后面遇到了,再补充也来得及,毕竟我们在做开卷题,可以随便修改么不是,相信随着后面的不断深入和实践,会有一个完美答卷,下一篇再见。

目录
相关文章
|
网络协议 调度 Python
进程小练习
进程小练习
|
4月前
|
存储 安全 Linux
进程与线程(一)进程相关
进程与线程(一)进程相关
32 1
|
7月前
|
Linux API 调度
进程,任务
进程,任务
39 1
|
7月前
|
存储 Java Unix
什么是进程?
什么是进程?
71 0
|
7月前
|
Java Linux API
进程的认识
进程的认识
|
7月前
|
C语言
进程的初步实现
进程的初步实现
92 0
|
消息中间件 调度
线程和进程
线程和进程
34 0
|
缓存 监控 测试技术
【Linux进程控制】进程创建 | 进程终止 | 进程等待 | 进程替换
本文主要学习理解 fork 的返回值、写时拷贝的工作细节、为什么要存在写时拷贝;进程退出码、进程退出的场景及常见的退出方法、对比 man 2 _exit 和 man 3 exit;进程终止、操作系统怎么进行释放资源、池的概念;进程等待的价值、进程等待的方法 wait 和 waitpid(常用)、int* status、阻塞和非阻塞、如何理解等待、W IFEXITED、WEXITSTATUS、WTERMSIG;什么是进程替换 && 为什么要进程替换、替换原理、7个exec系列的替换函数、模拟shell解释器;
334 1
【Linux进程控制】进程创建 | 进程终止 | 进程等待 | 进程替换
|
存储 调度
关于进程的那些事
关于进程的那些事
91 0

相关实验场景

更多