Linux探秘坊-------8.进程详解

1.概念详解

在这里插入图片描述

1.运行&&阻塞&&挂起

在这里插入图片描述
内容基础:方框中的就是调度队列,是一个 双向队列,每一个元素是PCB+其对应的代码数据

1.运行

只要进程 在调度队列中,进程的状态就是运行(running).

2.阻塞

阻塞:等待某种硬件资源就绪(例如网卡,键盘…)

在这里插入图片描述
在这里插入图片描述

  • 操作系统中不只有调度队列(runqueue),还有 设备队列(devicequeue) 用来管理设备。
  • 设备队列中还有等待队列(wait queue)

如果某一个进程在调度队列中,而调度其需要从键盘上读取数据,但键盘上没响应,所以cpu会把这个进程从调度队列中拿下来,并把其链接到对应硬件的等待队列中。这就是一个阻塞的过程
在这里插入图片描述
在这里插入图片描述

3.挂起

挂起的本质是--------将数据唤入或唤出到磁盘中的交换区(内存资源不足时)

在这里插入图片描述

内存资源不足时,如果进程处于阻塞状态,那么会将进程的数据交换到硬盘的swap分区,PCB依然保留,内存资源充足时,数据会从swap分区唤出和PCB重新组合为进程--------------------阻塞挂起

运行挂起同理。

2.PCB内核链表的理解

在这里插入图片描述
这是普通的双端队列,可以看到next指针是指向下一个元素的头,prev也是指向上一个元素的头。

在这里插入图片描述

  • PCB中的next是直接指向下一个元素的next,prevent也是直接指向上一个元素的prev。

在这里插入图片描述

一个PCB可以隶属于多个数据结构,可以属于调度队列,可以属于等待队列,也可以属于设备队列。所以有多个next,prev

2.进程状态

在这里插入图片描述

在这里插入图片描述

  • r表示running,表示正在运行
  • s表示浅睡眠,(例如输出一个字符只要1毫秒,但如果进程持续1(sleep(1))秒,那剩余的时间都处于浅睡眠时间,【可以被kill杀掉进程
  • d表示深度睡眠,这类状态基本与硬盘数据交换有关【不可被kill杀掉进程
  • Z表示僵尸状态,即子进程在运行完后不会直接消失,而是会先保留信息以留给父进程,这个状态就是僵尸状态信息保留在PCB中

1.僵尸进程

如果子进程结束,父进程还没结束,而且父进程还没有接收完子进程的信息,这个状态的子进程就是僵尸进程
在这里插入图片描述
在这里插入图片描述
那如果一直存在,那么子进程的PCB就一直不会消失,那么就会一直占用内存,可能会导致内存泄漏。

2.孤儿进程

如果子进程还没结束但父进程已经结束了,那么子进程就被称为孤儿进程。

在这里插入图片描述

  • 测试代码如上,可以看到id为0的是子进程,处于无限循环中,父进程则于5次循环后结束,可见五次循环后子进程就会变为孤儿进程
  • 但子进程不能没有父进程,所以这个子进程会被1号进程“领养”(一号进程会变为它的父进程)一号进程就是操作系统,如果不领养,子进程就会一直处于僵尸状态,导致内存泄漏

3.小知识

在这里插入图片描述

  • 进程退出了,内存泄漏的问题就不在了(例如**malloc,**进程结束后,申请的内存会被系统回收)
  • 常驻内存例如:window系统,一些软件(开机后一直运行都如此,会导致卡机)

4.进程优先级

1.是什么

本质是进程获得CPU资源的先后顺序(与权限不一样)

在这里插入图片描述

2.为什么

因为CPU资源是有限的,需要通过优先级来确认谁先谁后

3.怎么办

优先级也是一种数字

  • 值越小,优先级越高;反之,越低

4.查看优先级

在这里插入图片描述

  • 黄色方框中的“ps -al”用来显示进程优先级,绿色方框中的用于限制只显示 myprocess中的进程优先级
  • 蓝色方框中在这里插入图片描述

在这里插入图片描述

5.修改优先级

⽤top命令更改已存在进程的nice
在这里插入图片描述
注意:

在这里插入图片描述
PRI(显示)=PRI(默认)(80)+ NICE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19972.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VUE 集成高德地图部署到nginx后打开不了,控制台报错

VUE 集成高德地图部署到nginx后打开不了,控制台报错:xxxxxxx,because it violates the following Content Security Policy directive: “script-src ‘self’ https://webapi.amap.com ‘unsafe-inline’ ‘unsafe-eval’ blob: data:”. Note that ‘script-src-e…

解决vue-awesome-swiper 4.x + swiper 5.x 分页pagination配置不生效问题

这次给的需求需要实现几个轮播图,我打算用swiper来做。刚开始我参照同事之前实现的swiper,复制到我的新页面中,是可用的。但是这次的需求需要有底下的分页pagination,而且因为版本比较老,比较难找到配置项。这里说一下…

Linux中线程创建,线程退出,线程接合

线程的简单了解 之前我们了解过 task_struct 是用于描述进程的核心数据结构。它包含了一个进程的所有重要信息,并且在进程的生命周期内保持更新。我们想要获取进程相关信息往往从这里得到。 在Linux中,线程的实现方式与进程类似,每个线程都…

Unity Muse AIGC工具

这篇介绍unity3D的AIGC工具,Unity Muse,实现文本生成材质、动画、聊天等功能。 一、关于Unity Muse Unity Muse Unity Muse:利用 AI 释放您的创造潜力 | Unity 利用编辑器内置的 AI 更快地将你的想法变成现实 使用Unity Muse&#xff0c…

UART(一)——UART基础

一、定义 UART(Universal Asynchronous Receiver/Transmitter)是一种广泛使用的串行通信协议,用于在设备间通过异步方式传输数据。它无需共享时钟信号,而是依赖双方预先约定的参数(如波特率)完成通信。 功能和特点 基本的 UART 系统只需三个信号即可提供稳健的中速全双工…

【MyBatis】预编译SQL与即时SQL

目录 1. 以基本类型参数为例测试#{ }与${ }传递参数的区别 1.1 参数为Integer类型 1.2 参数为String类型 2. 使用#{ }传参存在的问题 2.1 参数为排序方式 2.2 模糊查询 3. 使用${ }传参存在的问题 3.1 SQL注入 3.2 对比#{ } 与 ${ }在SQL注入方面存在的问题 3.3 预编译…

Redis 03章——10大数据类型概述

一、which10 (1)一图 (2)提前声明 这里说的数据类型是value的数据类型,key的类型都是字符串 官网:Understand Redis data types | Docs (3)分别是 1.3.1redis字符串&#xff0…

Linux:线程概念、理解、控制

目录 一、认识线程 1.认识线程V1 2.认识线程V2 3.认识线程V3 4.认识线程V4 5.认识线程V5 二、线程控制 1.前言 2.创建线程 3.线程等待 4.线程终止 5.线程分离 三、线程理解 一、认识线程 1.认识线程V1 借用大多数计算机教材的话,线程是进程的一个执行…

maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时

1、问题背景:maven使用默认settings.xml配置时,Idea基于pom.xml更新依赖时报错,有些组件下载时连接超时, 通过日志发下,去连接maven.org网站下载依赖,有时候肯定会超时。 2、解决办法:使用国外…

【第3章:卷积神经网络(CNN)——3.5 CIFAR-10图像分类】

嘿,小伙伴们,今天咱们来聊聊一个超级酷炫的话题——卷积神经网络(CNN)及其在CIFAR-10图像分类中的应用。这不仅仅是一个技术话题,更是一场探索人工智能奥秘的旅程。准备好了吗?咱们这就发车! 一、CNN:人工智能的“千里眼” 首先,咱们得知道CNN是啥。CNN,全名Convol…

Win10环境借助DockerDesktop部署大数据时序数据库Apache Druid

Win10环境借助DockerDesktop部署最新版大数据时序数据库Apache Druid32.0.0 前言 大数据分析中,有一种常见的场景,那就是时序数据,简言之,数据一旦产生绝对不会修改,随着时间流逝,每个时间点都会有个新的…

【射频仿真技巧学习笔记】Cadence修改图表背景、曲线颜色

很多初始设置的Cadence仿真出来的曲线是长下面这样的,背景是黑色,而且曲线是Dot点状fine细线,这样查看图像会很不方便 如果一条一条去改曲线的性质会很不方便, 这里我介绍两种方法 方法一 首先打开virtuoso的初始界面 在命令…

【Vue3源码解析】应用实例创建及页面渲染

下载源码 git clone https://github.com/vuejs/core.git写该文章时的Vue版本为: "version": "3.5.13",这里要注意 pnpm 的版本不能太低,我此时的版本为 9.15.4。更新 pnpm 版本: npm install -g pnpm然后安装依赖&…

Ubuntu 系统 cuda12.2 安装 MMDetection3D

DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” 贵在坚持! ---------------------------------------…

云贝餐饮连锁V3独立版全开源+vue源码

一.介绍 云贝餐饮连锁V3独立版,作为一款全开源、全插件的源码部署系统,其在餐饮行业软件系统中独树一帜。该系统不仅功能全面,涵盖了餐饮连锁企业的日常运营、财务管理、库存管理、会员管理等多个方面,而且框架结构清晰&#xff…

learngit git常用指令

learngit & git常用指令 目录 learngit & git常用指令1.add && commit2.status && diff3.log && reset && reflog4.Repositoty(版本库)5.checkout6.rm7.github(push && rm)8.clone9.branch && switch && merg…

算法1-7 搜索

目录 1 深度优先搜索 1.1 P1219 八皇后 1.2 P1135 深搜剪枝 1.3 P1605 多路深搜回溯 2 广度优先搜索 2.1 P1443 马的遍历 3 多方向搜索 3.1 P1101 单词方阵 1 深度优先搜索 需要考虑深度的情况: 固定长度组合:当问题要求生成确定长度的组合&…

响应式布局学习笔记

什么是响应式布局? 响应式布局(Responsive Web Design)是一种网页设计方法,使网站能够根据设备屏幕尺寸(如手机、平板、电脑)自动调整内容和布局,提供最佳浏览体验。 如何调试响应式布局&…

Cursor 与团队协作:提升团队开发效率

引言 在团队开发中,代码质量参差不齐、重复错误频发、代码审查耗时过长是制约效率的三大痛点。据 GitHub 调查,开发者平均每周花费 4.3 小时修复他人代码问题,而 60% 的合并请求(PR)因风格或低级错误被驳回。Cursor 作…

rocketmq-netty通信设计-request和response

1、NettyRemotingServer启动分析 org.apache.rocketmq.remoting.netty.NettyRemotingServer#start public void start() {this.defaultEventExecutorGroup new DefaultEventExecutorGroup(nettyServerConfig.getServerWorkerThreads(),new ThreadFactory() {private AtomicI…