进程知识点,只需这一篇

2023-05-16

 

前言

你的进程,为啥挂了?进程挂了,这个问题大家并不陌生。学完这篇,你会对进程有一定了解。后面碰到进程挂的情况,你很快能找到对应解决思路。

图片

进程在操作系统中,是一个很重要的概念。你熟悉操作系统,能避免一些坑,写出高质量的代码。

windows界面设置真炫酷,不多说。下面用动画加文字的方式,给大家讲述。
 

为什么需要进程

通常程序不能并发执行,因为程序并发执行的结果,是不可再现的。为了使程序,可以并发执行,且能对其加以描述和控制,引入了进程的概念。

图片

上面把小人比作程序,操作系统中一次只能跑一个程序,除非引入进程。
 

进程的特征和定义

进程是程序的一次执行,是系统进行资源分配调度的独立单位。

结构特征:为了使程序能够独立运行,应配置一个进程控制块PCB。进程是由程序段,相关的数据段和PCB(进程控制块)三部分构成的。

动态性:进程是程序的一次执行,由创建而产生,由调度而执行,由撤销而消亡,进程存在一定的生命周期。

并发性:多个进程实体,同存在于内存中,且能在一段时间内同时运行。

独立性:进程实体,是一个能独立运行,独立分配资源,独立接收调度的基本单位。

异步性:进程按自己独立的不可预知的速度推进。

下面动画,把小人比作进程,展示的进程的创建,销毁,动态性,并发性,独立性,异步性。

图片

进程的状态及转换

创建:保证进程的调度,必须在创建工作完成以后,再进行。确保,对进程控制块PCB操作的完整性。

就绪:进程已分配到除CPU外的所有必要资源。

执行:进程已获得CPU,其指令集正在执行。

阻塞/挂起
正在执行的进程由于发生某事件导致暂时无法继续执行。

终止:等待其他进程收集完信息后,将删除该进程,清空PCB并返还给系统。

下面是进程状态图:

图片
 

PCB进程控制块

独立运行基本单位的标志:创建进程时创建PCB,进程结束时回PCB,进程随之消亡。系统是通过PCB,感知进程的存在。PCB已成为,进程存在于系统中的唯一标志。

实现间断性运行方式:进程暂停运行时,必须保留,运行时的CPU等相关信息。进程被再次运行时,需恢复CPU等相关信息。

提供进程管理需要的信息:当进程开始运行时,根据该进程PCB中,记录的程序和数据,在内存或外存中起始地址指针,找到相应的程序和数据。

提供进程调度需要的信息:只有处于就绪状态的进程,才能被调度。而进程的状态就记录在PCB中、以及优先级、等待时间、已执行时间等其他信息。

实现与其他进程的同步与通信:进程同步机制,用于实现多进程协调运行。在PCB中,具有实现进程通信的区域或通信队列指针等。

PCB进程控制块中的信息:PCB中的信息大致上可分为4类,分别是:进程标识符、CPU状态、调度信息、控制信息。

进程标识符:分外部标识符和内部标识符,外部标识符即进程名称,可由父进程指定,通常包括字符和数字的组成。内部标识符,由操作系统提供的,具有唯一性的进程ID。

CPU状态:主要由各种寄存器中内容组成,如通用寄存器、指令计数器(下一条指令的地址)、程序状态(状态信息、条件码、执行方式、屏蔽中断等标志)和栈指针(指向用于存放过程和系统调用参数及调用地址的系统栈的栈顶)构成。

调度信息:包含进程状态、进程优先级、其他信息、事件(阻塞原因)。
进程状态,是进程调度和对换时的依据,优先级高的进程,应优先获得CPU执行。

控制进程所必须的信息,包括程序和数据的存储地址,以便调度该进程执行时,能从PCB中找到其程序和数据,进程同步和通信机制,如消息队列、信号量等。
 

进程的创建和终止过程

创建进程过程:向操作系统申请空白PCB及进程ID、分配运行所需的资源、初始化PCB、等待插入进程调度就绪队列。

相关资源或从操作系统或从父进程获得,资源需求需提前告知,操作系统或父进程好为其分配资源。

PCB至少有2种信息需要初始化
    1.标识信息,即将本进程ID和父进程ID填入PCB控制块中
    2.状态信息,指令计数器指向程序的入口地址、栈指针指向栈顶控制信息。

进程的终止分为:读取进程状态、终止进程、终止子孙进程、释放资源、移出PCB队列。
操作系统通过进程ID从PCB集合中检索出该进程的PCB,从中读出该进程的状态。

如果该进程状态为执行态,则终止进程的执行,并重置调度标志位真。
如果该进程拥有子孙进程,则一并将所有子孙进程终止,防止子孙进程成为僵尸进程等不可控的进程。

接着释放资源,将资源归还给操作系统或父进程。最后就是移出PCB队列了,等待其他进程搜集信息。

进程阻塞和唤醒的事件
    1.请求系统服务而得不到满足时,如问系统请求打印。

    2.启动的操作需同步时:如该操作和请求该操作的进程需同步运行。

    3.新数据尚未到达:如进程A写,进程B读,则A未写,完B不能读。

    4.无新工作可做。

进程的挂起和激活
     1.进程的挂起过程,由进程自己,或其父进程suspend原语完成。将该进程PCB移到指定区域,注意状态的改变,有可能要重新调度。

     2.进程的激活过程,激活active原语激活进程。激活原语将进程从外存调入内存,检查该进程的现行状态并进行相应操作。
 

进程同步

临界资源
一旦有对资源的共享,就必然涉及竞争限制。
临界资源用来表示一种,公共资源或者说是共享数据,可以被多个线程使用。
但是每一次,只能有一个线程使用它。一旦临界资源被占用,其他线程,要想使用这个资源,就必须等待。

进程同步的主要任务是,对多个相关进程,在执行次序上进行协调,以使并发执行的诸进程之间,能有效地共享资源和相互合作,从而使程序的执行,具有可再现性。

临界区
有了临界资源的概念,就很容易理解临界区的概念。在程序中,所有的操作,都是通过代码执行的,访问临界资源的那段代码就是临界区

处理竞争或者合作依赖导致的制约
空闲让进:对于临界资源,如果空闲没有被使用,谁来了之后都可以使用

忙则等待:如果临界资源正在被使用,那么其他后来者就需要进行等待。

有限等待:要求访问临界资源的进程,应保证有限时间内,能进入自己的临界区,自己不能傻傻的等

让权等待:如果无法进入自己的临界区时,应立即释放处理机,而不能占着CPU死等,你死等就算了,别人却也不能用了。
 


锁就是对资源施加控制,锁指的是一种控制权。
当进入临界区时,我们称之为获得锁,获得锁之后就可以访问临界资源。

其他线程想要进入临界区,也需要先获得锁。
当前线程结束后,将会释放锁,别的线程就可以获取这个资源的锁。

死锁
锁表示一种控制权,对临界资源的访问权限。

如果临界资源不止一个,就可能出现:需要先后访问两种临界资源A和B,thread1获得了A线程的锁之后,等待获得B的锁,但是thread2获得了资源B的锁,在等待A资源的锁,这就出现了互相等待的情况。

解决方案
AND型信号量机制就是用于解决这种多共享资源下的同步问题的。
将进程在整个运行过程中,需要的所有资源,一次性全部地分配给进程,待进程使用完后再一起释放。

只要尚有一个资源未能分配给进程,其它所有可能为之分配的资源,也不分配给它。
也就是对,若干个临界资源的分配,采取原子操作方式:要么把它所请求的资源全部分配到进程,要么一个也不分配。

下面动画展示,两个小人,都要使用资源1和资源2,才能达到对面。
左边小人战友资源1,右边小人占有资源2。他们占有当前资源,再去获取对方的资源时,就会产生死锁的情况。

图片
 

进程间通信

图片

如果两个进程,想要知道对方在干嘛,或者进行协调运行,就需要进程间通信。下面介绍一下常见的进程间通信方式。

无名管道:管道是一种半双工的通信方式。数据只能单向流动,而且只能在,具有亲缘关系的进程间使用。进程间的亲缘关系,通常指父子进程关系。

有名管道:有名管道也是,半双工的通信方式,但是它允许无亲缘关系进程间的通信。

消息队列:消息队列是有消息的链表,存放在内核中,并由消息队列标识符标识。它克服了信号传递信息少,管道只能承载无格式字符流以及缓冲区大小受限等特点。

信号量:是一个计数器,可以用来控制多个进程对共享内存的访问。它作为一种锁机制,防止某个进程,正在访问共享资源的时候,其他进程也访问该资源,造成资源抢占。

信号:一种较复杂的通信方式,用于通知和接收进程某个事件的发生。

共享内存:是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。

套接字:是一种进程间通信机制,与其他通信机制不同的是,它可用于 不同机器间的进程通信。
 

絮叨

上面介绍了一些进程相关的基础知识,希望能帮到大家。
进程,作为操作系统中的重要概念,不管在工作还是面试中,都会涉及到。

祝大家学习愉快!
 


专注后台开发相关技术,广度深度并存,干货情怀同在。
微信搜索【盼盼编程】关注这个不一样的程序员。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程知识点,只需这一篇 的相关文章

随机推荐

  • 51单片机100倒计时

    目标 xff1a 基于51单片机的定时器在数码管上显示100s倒计时 xff0c 计时结束后led灯全亮 上面是我的开发版的原理图 xff0c 晶振是11 0592MHZ 找不到STC89C5xRC h的可以用AT89 xff0c 把头文件
  • Linux下的crontab定时执行任务命令详解

    在LINUX中 xff0c 周期执行的任务一般由cron这个守护进程来处理 ps ef grep cron cron读取一个或多个配置文件 xff0c 这些配置文件中包含了命令行及其调用时间 cron的配置文件称为 crontab xff0
  • golang密码加密解密

    简介 最近正在迁移自己的小项目 xff0c 项目之前是基于Laravel5 5开发的 整个用户登陆也是基于框架的 Auth 包认证的 其中用户密码这块也是用到了PHP内置的函数password hash xff0c 用它进行密码加密 而且
  • Android9.0 iptables用Netd实现删除子链功能的实现

    1 前言 在9 0的系统rom定制化开发中 在system中netd网络这块的产品需要中 会要求设置屏蔽ip地址之内的功能 liunx中iptables命令也是比较重要的 接下来就来在INetd这块实现删除创建子链的相关功能 2 nbsp
  • golang错误处理

    Go语言主要的设计准则是 xff1a 简洁 明白 xff0c 简洁是指语法和C类似 xff0c 相当的简单 xff0c 明白是指任何语句都是很明显的 xff0c 不含有任何隐含的东西 xff0c 在错误处理方案的设计中也贯彻了这一思想 我们
  • golang使用gdb

    GDB调试简介 GDB是FSF 自由软件基金会 发布的一个强大的类UNIX系统下的程序调试工具 使用GDB可以做如下事情 xff1a 启动程序 xff0c 可以按照开发者的自定义要求运行程序 可让被调试的程序在开发者设定的调置的断点处停住
  • Go怎么写测试用例

    如何编写测试用例 由于go test命令只能在一个相应的目录下执行所有文件 xff0c 所以我们接下来新建一个项目目录gotest 这样我们所有的代码和测试代码都在这个目录下 接下来我们在该目录下面创建两个文件 xff1a gotest g
  • golang应用日志

    seelog介绍 seelog是用Go语言实现的一个日志系统 xff0c 它提供了一些简单的函数来实现复杂的日志分配 过滤和格式化 主要有如下特性 xff1a XML的动态配置 xff0c 可以不用重新编译程序而动态的加载配置信息 支持热更
  • golang网站错误处理

    我们的Web应用一旦上线之后 xff0c 那么各种错误出现的概率都有 xff0c Web应用日常运行中可能出现多种错误 xff0c 具体如下所示 xff1a 数据库错误 xff1a 指与访问数据库服务器或数据相关的错误 例如 xff0c 以
  • golang应用部署

    程序开发完毕之后 xff0c 我们现在要部署Web应用程序了 xff0c 但是我们如何来部署这些应用程序呢 xff1f 因为Go程序编译之后是一个可执行文件 xff0c 编写过C程序的读者一定知道采用daemon就可以完美的实现程序后台持续
  • golang备份和恢复

    我们经常会遇到生产服务器的网络断了 硬盘坏了 操作系统崩溃 或者数据库不可用了等各种异常情况 xff0c 所以维护人员需要对生产服务器上的应用和数据做好异地灾备 xff0c 冷备热备的准备 在接下来的介绍中 xff0c 讲解了如何备份应用
  • golang自定义路由器设计

    HTTP路由组件负责将HTTP请求交到对应的函数处理 或者是一个struct的方法 xff0c 如前面小节所描述的结构图 xff0c 路由在框架中相当于一个事件处理器 xff0c 而这个事件包括 xff1a 用户请求的路径 path 例如
  • golang中的Session支持

    session集成 beego中主要有以下的全局变量来控制session处理 xff1a related to session SessionOn bool 是否开启session模块 xff0c 默认不开启 SessionProvider
  • golang表单及验证支持

    在Web开发中对于这样的一个流程可能很眼熟 xff1a 打开一个网页显示出表单 用户填写并提交了表单 如果用户提交了一些无效的信息 xff0c 或者可能漏掉了一个必填项 xff0c 表单将会连同用户的数据和错误问题的描述信息返回 用户再次填
  • sublime搭建C/C++编译环境

    代码一 xff1a 34 cmd 34 34 g 43 43 34 34 file 34 34 std 61 c 43 43 11 34 34 o 34 34 file path file base name 34 34 amp 34 34
  • golang用户认证

    在开发Web应用过程中 xff0c 用户认证是开发者经常遇到的问题 xff0c 用户登录 注册 登出等操作 xff0c 而一般认证也分为三个方面的认证 HTTP Basic和 HTTP Digest认证第三方集成认证 xff1a QQ 微博
  • golang多语言支持

    专注后台开发相关技术 xff0c 广度深度并存 xff0c 干货情怀同在 微信搜索 盼盼编程 关注这个不一样的程序员 强烈推荐人工智能学习网站 beego中设置全局变量如下 xff1a Translation i18n IL Lang st
  • golang中的pprof支持

    专注后台开发相关技术 xff0c 广度深度并存 xff0c 干货情怀同在 微信搜索 盼盼编程 关注这个不一样的程序员 强烈推荐人工智能学习网站 Go语言有一个非常棒的设计就是标准库里面带有代码的性能监控工具 xff0c 在两个地方有包 xf
  • 大厂动态规划面试汇总,提升内功

    注 xff1a 本文是BAT真题收录很值得大家花心思看完 xff0c 看完会有收获 前言 算法是面试大公司必考的项目 xff0c 所以面试前准备好算法至关重要 xff0c 今天整理的常见的动态规划题目 xff0c 希望可以帮到大家 要想学习
  • 进程知识点,只需这一篇

    前言 你的进程 xff0c 为啥挂了 xff1f 进程挂了 xff0c 这个问题大家并不陌生 学完这篇 xff0c 你会对进程有一定了解 后面碰到进程挂的情况 xff0c 你很快能找到对应解决思路 进程在操作系统中 xff0c 是一个很重要