进程的概念(2)

news2024/11/26 23:52:08

进程优先级

1.什么的优先级

概念:指定进程获取某种资源(CPU)的先后顺序

本质:优先级的本质是优先级数字的大小,Linux中优先级数字越小,优先级越高

task_struct 进程控制快-> struct -> 内部字段 -> int prio = ??

default_prio = 80;

nice = ??

优先级vs权限

优先级:已经能做了,是我们获取资源的顺序

权限:能不能做的问题

2.为什么要有优先级

  • 进程访问的资源(CPU)始终都是有限的,系统中进程大部分情况都是比较多的。
  • 操作系统关于调度和优先级的原则:采用分时操作系统,保证基本的公平,如果进程因为长时间不被调度,就造成了饥饿问题。

3.Linux的优先级特点和查看方式

  • 特点

  • PRI:进程优先级
  • NI:进程优先级的修正数据,nice值
  • UID:代表执行者的身份
  • PID:代表这个进程的代号
  • PPID:代表这个进程是由哪个进程发展衍生而来的,也就是父进程的代号

🐂:新的优先级 = 优先级 + nice ,可以达到对于进程优先级动态修改的过程

  • nice并不能容易调整,而是有范围的!->[-20 19] ----40个数字(在后面的地址空间再谈)
  • 每次调整优先级,都是从80开始的
  • 查看方式

用top命令更改已存在进程的nice:

  • top
  • 进入top后按"r" -> 输入进程PID -> 输入nice值

命令行参数和环境变量

命令行参数

       C语言中,我们以前会接触到下面这种写法

  • 带这些参数的意义的什么呢?

  • 可以看出,数组argv就像一个选项,当我们输入什么选项时,bash会根据该选项去匹配对应的进程。
  • 注:默认是输入给父进程bash的

1、为什么要这么干呢?

本质:命令行参数本质上交给我们程序的不同选项,用来制定不同的程序功能。命令中会携带很多的选。

就像我们经常用的命令一样->举例:ls,ls -a,ls -l这些不同的选项会显示出不同的特性

2、谁干的?

  • 父进程bash

命令行中启动的程序,都会变成进程,其实都是bash的子进程。

环境变量

1、直接看现象

为什么我们输入系统的这些命令不用带 ./ ,而是直接输入命令就可以直接执行,而我们自己的可执行程序就需要指明当前路径呢?

  • 这些命令本质就是一个可执行程序,依照上面提到的命令行参数表,可以带各种不同的选项
  • 表明,在Linux中,存在一些全局的设置,告诉命令行解释器,应该去那些路径下寻找可执行程序

这里,我们引入一个环境变量:PHTH

👵概念
  • 在操作系统中用来指定操作系统运行环境的一些参数
🙏查看环境变量方法
  • echo &name                      name:你的环境变量名称

  • 在系统中很多的设置,在我们登录Linux系统的时候,就已经被加载到了bash进程中(内存)
  • 当bash在执行命令的时候,需要先找到命令,然后再执行,而上面这个路径下的命令,是bash执行命令时的默认寻找路径,如果没指定,就会自动到这个路径下寻找,如果没找到,就会报错,这就是为什么上面我们要指定当前命令,而系统这些自带的命令不用指定当前命令。
🐔设置环境变量的方法

通过这种方法,我们的可执行程序也可以像系统默认的命令一样使用,而不要指定当前路径。

  • 当我们重新打开程序时,我们可以看到

表明默认我们修改的环境变量都是内存级别的,则最开的环境不是在内存中的,而是在系统的对应配置文件。

🧍‍♀️配置文件在哪里呢?

  • 在root路径下,存在着上面四种关于bash的文件,而.bash_profile中如果我们添加配置,则在电脑重启的时候也不会清空,因为此时修改的环境变量是在配置文件中进行的。

2、常见的环境变量

  • PATH:指定命令的搜索路径
  • HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
  • SHELL:当前的shell,它的值通常是/bin/bash。

🍋测试HOME

🐂与环境变量相关的命令

  1. echo:显示某个环境变量值
  2. export:设置一个新的环境变量
  3. env:显示所有环境变量
  4. unset:清除环境变量
  5. set:显示本地定义的shell变量和环境变量

3、整体理解环境变量

a、代码

  • bash进程在启动时,默认会给子进程形成环境变量表。

b、理解

  • 环境变量具有系统的全局属性,因为环境变量本身会被紫禁城继承下去。

如图:这个变量是存在的,但是我们查看环境变量的时候不会显示出来,这种变量叫做本地变量

本地变量只在本bash内部有效,无法被子进程继承下去,导成环境变量,此时才能被子进程获取。

进程的地址空间

1、直接看代码,看现象

由图可以看出,父子进程是具有独立性的。

进程 = 内核数据结构(task_struct) + 代码和数据

为什么地址不变,而当子进程中的g_val变成300的时候,父进程的g_val还是100呢?

我们发现,父子进程,输出地址是一致的,但是变量内容不一样!能得出如下结论:

  • 变量内容不一样,所以父子进程输出的变量绝对不是同一个变量
  • 但地址值是一样的,说明,该地址绝对不是物理地址!
  • 在Linux地址下,这种地址叫做 虚拟地址
  • 我们在用C/C++语言所看到的地址,全部都是虚拟地址!物理地址,用户一概看不到,由OS统一管理
  • OS必须负责把虚拟地址转变成物理地址

2、引入最基本的理解

父进程和子进程都分别有其自己的一个虚拟地址空间,当用虚拟地址访问数据的时候,OS通过页表的查找找到对应的物理地址。

这里也就涉及到了一个概念:写时拷贝

OS会自助完成写时拷贝,进行按需申请,但父进程和子进程仅仅只是访问同一个数据而不修改的时候,两个进程此时指向的确实是同一个物理空间,但当需要进行修改的时候,OS会进行该数据的拷贝,并把需要修改的进程指向该拷贝的空间

意义:通过调整拷贝的时间顺序,达到有效节省空间的目的。

3、地址空间的意义

如果没有地址空间,数据写入物理内存的时候地址会是乱的,此时要访问特定的数据就会很麻烦,CPU的效率将会折扣,而如果有了地址空间,每次写入数据时只关注地址空间就行,而取出数据时,把相对应的地址空间加载到内存中,OS对该地址空间的访问可以迅速拿到想要的数据,而无需去遍历整个物理内存。

  • 讲无序变成有序,让进程以统一的视角看待物理内存以及自己运行的各个区域!
  • 进程管理模块和内存管理模块进行解耦
  • 拦截非法请求->对物理内存进行保护

页表的意义

OS在通过页表进行访问物理地址时,页表会进行一系列的检查

  1. 数据是不是不在物理内存中 -> 缺页中断
  2. 数据是不是需要写时拷贝 -> 发生写时拷贝
  3. 如果都不是,才进行异常处理

Linux真正是如何的调度的?

上面我们提到,nice值并不能让你任意调整,而是有范围的![-20,19] --- 40个数字

  • Linux系统每一个CPU都有一个运行队列
  • Linux采用分时操作系统,为了保证公平
  • 其实nice可以修改的这40个nice值对应的是运行队列中queue队列中的[100,139]

  • 这里的bitmap数组大小为什么是5,是因为在32位机器下,32*5=160>140,满足所需要的位数。

理解

  • 在CPU找进程的时候,runqueue会有两个队列,一个表示活跃的队列,一个表示过期的队列,通用这两个队列的转换,就可以实现对进程优秀级大小不同的实现快慢。
  • CPU查看*active是否位空,如果不为空,说明里有进程需要执行,如果有,就遍历从100到139这个区级的进程,根据优先级找到里面需要执行的进程
  • 如果因为某种原因(时间片到了等等)导致该进程暂时先停止然后去执行其他进程,那么该进程的数据就会拷贝到过期的队列中,然后把活跃中该进程删除
  • 等到把活跃队列所有进程都删除之后,就交换活跃队列和过期队列的地址,过期队列变成活跃队列,活跃队列变成过期队列,再重复以上过程
  • 等到OS检查*active为空时,说明此时没有进程需要执行。

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

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

相关文章

MT3608B 航天民芯代理 1.2Mhz 24V输入 升压转换器

深圳市润泽芯电子有限公司为航天民芯一级代理商 技术支持欢迎试样~Tel:18028786817 简述 MT3608B是恒定频率的6针SOT23电流模式升压转换器,用于小型、低功耗应用。MT3608B开关频率为1.2MHz,允许使用微小、低电平成本电容器和电感器高度不…

UE5 GAS开发P40 周期性效果,持续治疗

Periodic Gameplay Effects周期性的游戏效果 它们在一段时间内以固定的间隔重复应用到目标上。这种效果通常用于表示持续性伤害、治疗或其他影响,例如中毒、灼烧或回复效果。 修改GE_CrystalHeal,在Period改为每0.1秒执行一次 假如同时有三个持续时间在进行,那么这…

万兆以太网MAC设计(11)完整UDP协议栈仿真

文章目录 前言一、模块接口二、IP模块与ARP模块之间的联系三、整体协议栈仿真总结: 前言 目前除了巨帧处理逻辑之外,所有的准备工作都已经结束了,先进行整体的功能验证。 一、模块接口 所有模块接口皆采用AXIS数据流的形式,其中…

机器学习:基于Sklearn框架,使用逻辑回归对由心脏病引发的死亡进行预测分析

前言 系列专栏:机器学习:高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学…

小程序AI智能名片商城系统直连:打造用户与企业无缝对接的新时代!

在高度不确定性的商业环境中,企业如何快速响应市场变化,实现与用户的零距离接触?答案就是——小程序AI智能名片商城系统直连!这一创新工具不仅为企业打开了与用户直接连接的大门,更为企业提供了持续收集用户反馈、快速…

Rust面试宝典第10题:绘制各种图形

题目 我们需要编写一个图形相关的应用程序,并处理大量图形(Shape)信息,图形有矩形(Rectangle)、正方形(Square)、圆形(Circle)等种类。应用程序需要计算这些图…

Eclipse C++ 无法debug 问题

环境: ubuntu20.04 Eclipse CDT(x86_64) 工程,使用的是默认的CMake Project 现象: 1. 使用Eclipse, 加了断点后,debug 无法停在断点;step over 执行后是从main 直接执行到exit &#xff…

动态增删表格

期望目标&#xff1a;实现一个能通过按钮来动态增加表格栏&#xff0c;每次能添加一行&#xff0c;每行末尾有一个删减按钮。 <el-button type"text" class"primary"click"addMember()">添加</el-button> <el-table:data"m…

C语言趣味代码(四)

这一篇主要编写几个打字练习的小程序&#xff0c;然后通过这些小程序的实现来回顾复习我们之前学过的知识&#xff0c;然后通过这写打字练习的小程序来提升我们的打字技术和编程技术。 1. 打字练习 1.1 基本打字练习 1.1.1 基本实现 首先我们来制作一个用于计算并显示输入一…

React | React.cloneElement 的使用

我看到同事的代码里有 cloneElement&#xff0c;于是去了解了一下这个函数。 就跟它的名字一样&#xff0c;克隆元素&#xff0c;可以基于一个元素创建一个新的元素&#xff0c;并且为新元素添加新的属性或者覆盖已有的属性。 下面是一个简单例子&#xff1a; .node1 {backg…

2024最新docker部署gitlab

docker部署gitlab 快速命令 1 拉取镜像 docker pull gitlab/gitlab-ce2 启动容器 docker run -itd \-p 9980:80 \-p 9922:22 \-v /opt/soft/docker/gitlab/etc:/etc/gitlab \-v /opt/soft/docker/gitlab/log:/var/log/gitlab \-v /opt/soft/docker/gitlab/opt:/var/opt/g…

MATLAB语音信号分析与合成——MATLAB语音信号分析学习资料汇总(图书、代码和视频)

教科书&#xff1a;MATLAB语音信号分析与合成&#xff08;第2版&#xff09; 链接&#xff08;含配套源代码&#xff09;&#xff1a;https://pan.baidu.com/s/1pXMPD_9TRpJmubPGaRKANw?pwd32rf 提取码&#xff1a;32rf 基础入门视频&#xff1a; 视频链接&#xff1a; 清…

为什么我的Mac运行速度变慢 mac运行速度慢怎么办 如何使用CleanMyMac X修复它

近些年伴随着苹果生态的蓬勃发展&#xff0c;越来越多的用户开始尝试接触Mac电脑。然而很多人上手Mac后会发现&#xff0c;它的使用逻辑与Windows存在很多不同&#xff0c;而且随着使用时间的增加&#xff0c;一些奇奇怪怪的文件也会占据有限的磁盘空间&#xff0c;进而影响使用…

红黑树笔记

2-3树 -> 左倾红黑树 红黑树实际上是2-3树的一种基于BST的实现。普通二叉搜索树&#xff08;BST&#xff09;中的每一个节点&#xff0c;只有一个键&#xff0c;两条链接&#xff08;两个子节点&#xff09;&#xff0c;这种节点被称为2节点。2-3树中&#xff0c;引入了一个…

利用二叉检索树将文章中的单词建立索引(正则表达式)

知识储备 链接: 【二叉检索树的实现——增删改查、读取命令文件、将结果写入新文件】 1、正则表达式的处理 &#xff08;1&#xff09;r’前缀的作用 r’前缀的用于定义原始字符串&#xff0c;特点是不会处理反斜杠\作为转义字符 &#xff08;2&#xff09;正则表达式中元…

335GB,台北地区倾斜摄影OSGB数据V0.2版介绍!

前几天发布了台北地区倾斜摄影OSGB数据第一个版本(139GB,台北倾斜摄影OSGB数据V0.1版),虽然数据还是一个半成品&#xff0c;完全没想到热度很高&#xff0c;很多读者对这份数据都有比较浓厚的兴趣&#xff0c;在这里首先感谢各位读者的大力支持与鼓励&#xff0c;给了我持续更新…

Arm Linux 移植 Air724UG 4G模块-USB方式

目录 一、开发环境二、连接方式三、4G模组的 VID 和 PID四、Linux kernel 的配置五、ppp的编译六、测试 一、开发环境 开发板&#xff1a;NUC980 iot开发板 4G模块&#xff1a;银尔达 Core-Air724 二、连接方式 micro usb线&#xff0c;一端连接4G模组&#xff0c;一端连接N…

亚马逊云科技AWS将推出数据工程师全新认证(有资料)

AWS认证体系最近更新&#xff0c;在原有12张的基础上&#xff0c;将在2023年11月27日添加第13张&#xff0c;数据工程师助理级认证(Data Engineer Associate)&#xff0c;并且在2024/1/12前半价(省75刀&#xff1d;544人民币。 原有的数据分析专家级认证(Data Analytics Specia…

Spark-机器学习(7)分类学习之决策树

在之前的文章中&#xff0c;我们学习了分类学习之支持向量机&#xff0c;并带来简单案例&#xff0c;学习用法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。…

java-链表排序

需求 思路 排序&#xff1a;讲所有的值都取出来&#xff0c;存储到ArrayList中&#xff0c;然后排序&#xff0c;将排序之后的元素依次使用add方法添加到自定义链表合并排序&#xff1a;先合并&#xff0c;然后调用刚才写的排序算法合并&#xff1a;将表一的头结点作为新链表的…