进程状态和优先级(进程第2篇)【Linux复习篇】

news2024/12/23 12:44:50

目录

一、进程状态

1、进程有什么状态?

2、 Linux下的进程状态有什么?

 二、进程优先级

1、进程优先级是什么?

2、为什么要有优先级 

3、怎么改进程优先级?要改吗?

4、操作系统如何根据优先级开展调度的?什么是LinuxO(1)调度算法?

5、什么是并行,什么是并发?

6、为什么函数返回值能被外部拿到?系统怎么知道执行到哪行代码?寄存器扮演什么角色?


一、进程状态

1、进程有什么状态?

1)什么是运行状态 - R

每个CPU都会维护一个运行队列,该队列维护的是一些进程的task_struct,调度器会在该队列上挑选一个进程来运行,处于该运行队列上的进程的状态就叫运行态

每个进程都有一个调度时间片,该进程在CPU上跑完自己的时间片就切换下一个进程,也就意味着,在一个时间段内,所有进程都会被执行,这种情况叫并发执行。

2)什么是阻塞状态

一个进程需要读取某些资源时,由于资源没有就绪,而需要将该进程放到该资源的等待队列里,此时处于等待队列里的进程的状态就是阻塞状态。

3)什么是阻塞挂起状态

操作系统内部内存资源严重不足时,会将那些处于阻塞状态的进程的代码和数据先放到磁盘中,只保留PCB,当资源就绪时,再重新加载进来,此时就叫阻塞挂起状态。

2、 Linux下的进程状态有什么?

R(running):运行态(带+号表示前台运行)

S(sleeping):阻塞态(浅度睡眠,可被唤醒,即可随时响应外部,如kill等)

D(disk sleep):深度睡眠,让进程在等待磁盘写入完毕期间,这个进程不能被杀掉。

T(stopped):也是一种阻塞状态,可能是在等待资源,也可能是收到了信号(应用场景:gdb调试时打断点)

X(dead):终止态

Z(zombie):僵尸态,当一个进程退出时,会先维护它退出状态和资源一段时间,等父进程来回收,回收之后子进程才能释放其相关资源(PCB)。

如果一直维持僵尸状态,就会引发内存泄漏问题。

如果父进程先退出,子进程会怎么样?

子进程变孤儿进程,会被1号进程领养。

 二、进程优先级

1、进程优先级是什么?

进程对资源谁先访问,谁后访问。

2、为什么要有优先级 

资源是有限的,进程是多个的,进程之间是竞争关系,如果进程长时间得不到CPU资源,就会引发进程的饥饿问题。因此操作系统要保证进程之间良性竞争,就需要有优先级。

3、怎么改进程优先级?要改吗?

PRI(priority)就是进程的优先级,值越小,越早被执行。

NI(nice):nice值,进程优先级的修正数据,取值范围(-20~19,共40个等级)。

 

PRI(new) = PRI(old) + nice(nice为负时,优先级变高)实际old的PRI是80

也就是说实际 PRI = 80+nice

具体操作:

输入top进入此界面:

按:r(renice),按照要求输入pid和nice值。

不推荐改进程的优先级。普通用户不能调,root才可以 

4、操作系统如何根据优先级开展调度的?什么是LinuxO(1)调度算法?

正在调度的队列的时间片都跑完后,就跑另一个队列里的进程,两个队列交替。

怎么高效地判断每个子队列是否为空?

利用位图,用比特位的0/1表示子队列是否为空,这样就可以用近O(1)的时间复杂度来进行进程调度,这种调度算法就叫Linux内核2.6的O(1)调度算法。

5、什么是并行,什么是并发?

并行:多个进程在多个CPU下分别同时进行运行(不如说两个单核CPU会有两个运行队列,意味着在同一时刻一定会有两个进程在同时运行,这就是并行)

并发:多个进程在一个CPU上采用进程切换的方式,在一段时间内,让多个进程得以推进,称为并发。 

6、为什么函数返回值能被外部拿到?系统怎么知道执行到哪行代码?寄存器扮演什么角色?

通过寄存器。return a;move eax 10(假设a的值是10) 

程序计数器pc/eip:记录当前进程正在执行的指令的下一行指令的地址。

为了提高效率,将进程的高频数据放入寄存器中,寄存器保存的是进程的相关数据,即进程上下文。进程在从CPU上离开时,要将自己的上下文数据保存好带走,为了未来恢复。

进程切换:保存上下文、恢复上下文。 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring MVC和Spring Boot

上节已经提到过请求,这次梳理响应。 响应 响应基本上都要被Controller所托管,告诉Spring帮我们管理这个代码,我们在后面需要访问时,才可以进行访问,否则将会报错。并且其是由RestController分离出来的,Re…

【MCU】栈溢出问题

项目场景: 硬件:STM32F407,操作系统:rt_thread master分支 问题描述 问题栈溢出 id 499 ide 00 rtr 00 len 8 9 Function[rt_completion_wait] shall not be used in ISR (0) assertion failed at function:rt_completion_wait,…

MATLAB实现蚁群算法栅格路径优化

蚁群算法是一种模拟自然界中蚂蚁觅食行为的优化算法,常用于解决路径规划问题。在栅格路径优化中,蚁群算法可以帮助找到从起点到终点的最优路径。以下是蚁群算法栅格路径优化的基本流程步骤: 初始化参数: (1)设置蚂蚁数量&#xff…

【错题集-编程题】数组中的最长连续子序列(排序 + 模拟)

牛客对应链接:数组中的最长连续子序列_牛客题霸_牛客网 (nowcoder.com) 一、分析题目 排序 模拟。 注意:值连续,位置可以不连续!小心处理数字相同的情况。 二、代码 //值得学习的代码 class Solution { public:int MLS(vecto…

【数据库】Redis

文章目录 [toc]Redis终端操作进入Redis终端Redis服务测试切换仓库 String命令存储字符串普通存储设置存储过期时间批量存储 查询字符串查询单条批量查询 Key命令查询key查询所有根据key首字母查询判断key是否存在查询指定的key对应的value的类型 删除键值对 Hash命令存储hash查…

前端补充17(JS)

一、JS组成成分 JS的组成成分,由三部分组成 第一、ECMAScript:语法规则,如何定义变量,数据类型有哪些,如何转换数据类型,if判断 if-else while for for-in forEach do-while switch 数组 函数 对…

HTML表单(详解网页表单如何实现)

目录 一、表单介绍 1.概念 二、表单用法 1.HTML表单 2.HTML 表单 - 输入元素 2.1.文本域(Text Fields) 2.2.密码字段 2.3.单选按钮(Radio Buttons) 2.4.复选框(Checkboxes) 2.5.提交按钮(Submit)…

SAP 变更记录表查询使用逻辑简介

通常用户在遇到问题后,经常会问某个单据的变更记录,很多模块中在前台的操作界面中都根据对应的菜单栏中可以找到对应的变更记录,像销售订单、交货单、采购申请、采购订单都在菜单栏位中都可以查询到对应的修改记录,但是对于想批量…

“豪门”子刊!中科院2区SCI,收稿范围广,发文量超20000!无预警记录,极速录用见刊!

(一)期刊简介概况 【期刊类型】网络数据类SCIE 【出版社】SPRINGER出版社 【期刊概况】IF:4.0-5.0,JCR2区,中科院2区 【版面类型】正刊,仅10篇版面 【预警情况】2020-2024年无预警记录 【收录年份】2…

【项目】基于JDBC+MySQL的Java教务管理系统(附源码+论文说明)

摘要 随着信息技术的不断发展,教育管理也在向数字化、智能化方向迈进。Java作为一种广泛应用于企业级应用开发的编程语言,与数据库技术的结合更是为教务管理系统的开发提供了强大的支持。 本文将介绍基于JDBC(Java Database Connectivity&a…

跨越未知,拥抱挑战——新征程

在浩瀚的IT领域里,每一位开发工程师都如同一位探险家,不断地探索、挑战和成长。作为一名新入职的Java开发工程师,我面临着全新的技术栈和业务领域,这是一次跨越未知的征程,也是一次自我提升的机会。 新入职 初入公司…

mac系统镜像源管理之nrm的安装与使用

之前有介绍过:pnpm安装和使用,nvm安装及使用,在前端开发中其实还有一个工具也会偶尔用到,那就是nrm,本文就详解介绍一下这个工具,非常的简单且好用~ 文章目录 1、什么是nrm?2、安装3…

为什么说这些倒腾AI的方式会把自己“搞死”

在AI技术的浪潮下,许多基于大模型的产品涌现而出,但并非所有创新都能带来成功,有时大模型的出现还会放大AI创业公司的内部矛盾。这个时候,我们需要搭建与AI相配的底层思考框架。 为什么说这些倒腾AI的方式会把自己“搞死”© …

go语言并发实战——日志收集系统(五) 基于go-ini包读取日志收集服务的配置文件

实现日志收集服务的客户端 前言 从这篇文章开始我们就正式进入了日志收集系统的编写,后面几篇文章我们将学习到如何编写日志收集服务的客户端,话不多说,让我们进入今天的内容吧! 需要实现的功能 我们要收集指定目录下的日志文件,将它们发…

Flink CDC详解

文章目录 Flink CDC一 CDC简介1.1 CDC定义1.2 CDC应用场景1.3 CDC实现机制1.4 开源CDC工具对比 二 Flink CDC简介2.1 Flink CDC介绍2.2 Flink CDC Connector(连接器)2.3 Flink CDC && Flink版本2.4 Flink CDC特点 三 Flink CDC发展3.1 发展历程3.2 背景Dynamic Table &…

Ubuntu镜像下载与安装2024.4版本(超适合新手)

前言: 在VMware中安装Ubuntu镜像,首先需要去下载镜像,但是由于服务器在国外,下载速度相对较慢,国内也有镜像,较推荐在国内镜像站下载,例如阿里镜像和清华镜像。 官网:Ubuntu系统下…

LLM 为什么需要 tokenizer?

文章目录 1. LLM 预训练目的1.1 什么是语言模型 2. Tokenizer一般处理流程(了解)3. 进行 Tokenizer 的原因3.1 one-hot 的问题3.2 词嵌入 1. LLM 预训练目的 我们必须知道一个预训练目的:LLM 的预训练是为了建立语言模型。 1.1 什么是语言模…

月入8k,21岁计算机专业男孩转行网优,天赋可以让人发光,努力也能!

今天的主人公是一位仅21岁的年轻小帅哥,大学学的是计算机专业,毕业后的工作是卖苦力,工作一段时间后毅然决然的选择了转行后台网优,让我们一起来看看这位21岁男孩转行背后的故事... 卖苦力,是没有前途的 今天的主人公…

(一)JVM实战——jvm的组成部分详解

前言 本节内容是关于java虚拟机JVM组成部分的介绍,通过其组成架构图了解JVM的主要组成部分。 正文 ClassFile:字节码文件 - javac:javac前端编译器将源代码编译成符合jvm规范的.class文件,即字节码文件 - class文件的结构组成&a…

Springboot的日常操作技巧

文章目录 1、自定义横幅2、容器刷新后触发方法自定义3、容器启动后触发方法自定义**CommandLineRunner**ApplicationRunner 不定时增加 参考文章 1、自定义横幅 简单就一点你需要把banner.text放到classpath 路径下 ,默认它会找叫做banner的文件,各种格式…