进程的概念(2)

进程优先级

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为空时,说明此时没有进程需要执行。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《从Paxos到Zookeeper》——第四、七章:基本概念及原理

目录 第四章 Zookeeper与Paxos 4.1 Zk是什么 4.1.1 Zk特性 4.1.2 Zk基本概念 4.1.2.1 集群角色(Follower, Leader, Observer) 4.1.2.2 数据模型 4.1.2.3 ZNode(数据节点) 4.1.2.4 Session(会话) 4.1.2.5 ACL(Access Control Lists) 4.1.2.6 Watcher(事件…

测试开发 | 相比 Selenium,Web 自动化测试框架 Playwright 有哪些强大的优势?

Playwright 是由微软的研发团队所开发的一款 Web 自动化测试框架,这个框架具有多平台、跨语言的特点。除了基本的自动化测试能力之外,同时它还具备非常强大的录制功能、追踪功能。以下是 Playwright 与 Selenium 的对比。 ​ 由此可见,Play…

HTML5(2)

目录 一.列表、表格、表单 1.列表标签 2.表格 4.无语义的布局标签 5.字符实体 6.综合案例--1 7.综合案例--表单 一.列表、表格、表单 1.列表标签 1.1 无序列表 1.2 有序列表 1.3 定义列表 定义列表一般用于网页底部的帮助中心 2.表格 2.1 2.2 表格结构标签 shiftaltf 格…

chrome 安装devtools

chrome 安装devtools 下载安装 链接:https://github.com/vuejs/devtools 选择对应版本: 安装yarn 下载 npm install -g yarn --registryhttps://registry.npmmirror.com进入下载的目录安装依赖 yarn install --registryhttps://registry.npmmirror.…

简单的图像处理算法

本笔记参考crazy_Bingo 基础: 图像处理都是用卷积矩阵对图像卷积计算,如3X3 的矩阵对640 X 480分辨率的图像卷积,最终会得到638 X 478 的图像。卷积过程是这样的: 一、中值滤波 : 找出矩阵中的最中间值作为像素点 中…

动态增删表格

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

数据库常考理论

1 笛卡尔积X与自然连接∞的区别 2 求候选键 3 无损连接及函数依赖 4 范式判断 笛卡尔积&#xff1a;S1*S2,产生的结果包括S1和S2的所有属性列&#xff0c;并且S1中每条记录依次和S2中所有记录 组合成一条记录&#xff0c;最终属性列为S1S2属性列&#xff0c;记录数为S1*S2记…

mamba 和conda 安装R包

**1. 下载miniconda3 ** wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh这个命令是在linux终端中输入的,miniconda3管理起来更方便。 2. 安装miniconda3 sh Miniconda3-latest-Linux-x86_64.sh接下来会有一些回车(ente…

「C++ 内存管理篇 1」C++动态内存分配

目录 〇、C语言的动态内存分配方式 一、C的动态内存分配方式 1. 什么是C的动态内存分配&#xff1f; 2. 为什么需要C的动态内存分配&#xff1f; a. new的优势 b. new的不足 c. delete的优势 d. 总结 3. 怎么使用new和delete? a. 对于内置类型 b. 对于自定义类型 c. 为什么ne…

牛客NC242 单词搜索【中等 递归DFS C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/987f2981769048abaf6180ed63266bb2 思路 递归&#xff1a;以word第一个字符为起点&#xff0c;在矩阵中 递归搜索&#xff0c;检查是否存在完整的word路径&#xff0c; 注意恢复现场&#xff0c;又叫回溯&#…

物联网通信网关的主要功能体现在哪些方面?-天拓四方

在信息化、智能化的时代&#xff0c;物联网技术的广泛应用正在逐渐改变我们的生活方式。物联网通过各种传感器和设备&#xff0c;将现实世界与数字世界紧密相连&#xff0c;从而实现智能化、自动化的生活和工作方式。作为物联网生态系统中的重要组成部分&#xff0c;物联网通信…

MySQL:飞腾2000+Centos7.6 aarch64 部署MySQL8.0.36

目录 1.硬件环境 2.MySQL选择 Bundle版本【全部文件】​编辑 3.下载并安装 4.安装完成后检查mysql 5.初始化MySQL 6.那就问了&#xff0c;都初始化了啥&#xff1f; 7.尝试启动MySQL 8.给mysql文件授权 9.再次尝试启动正常 10.mysql初始化目录出现了mysql.sock 11.找…

VS2022 配置OpenCV开发环境详细教程

OpenCV OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;由Intel开发并首先发布于1999年。OpenCV被广泛用于实时图像处理、视频分析、物体检测、面部识别、机器人视觉以及许多其他领域。它支持C、Pytho…

Flutter应用开发-几种保存简单配置的方式

文章目录 简单配置保存的几种方式使用 shared_preferences 插件优点缺点 使用 hive 插件优点 缺点使用文件存储&#xff1a;优点缺点 简单配置保存的几种方式 在 Flutter 开发的 Android 应用中&#xff0c;保存应用配置并下次启动时读取&#xff0c;有以下几种比较合适的方式…

rust疑难杂症解决

rust疑难杂症解决 边碰到边记录&#xff0c;后续可能会逐步增加&#xff0c;备查 cargo build时碰到 Blocking waiting for file lock on package cache 原因是Cargo 无法获取对包缓存的文件锁&#xff0c; 有时vscode中项目比较多&#xff0c;如果其中某些库应用有问题&…

Docker | 入门:安装与配置

Docker | 入门&#xff1a;安装与配置 Docker 和传统虚拟机区别 对于传统虚拟机&#xff1a; 虚拟出一套硬件&#xff0c;运行一个完整的操作系统&#xff0c;并在这个操作系统上安装和运行软件。 对于 Docker: 将一个个容器隔离开。 容器内的应用直接运行在宿主机的内容&am…

软件模型(简洁明了)

《 软件测试基础持续更新中》 一、软件开发模型 1.1 大爆炸模型 优点&#xff1a;思路简单&#xff0c; 通常可能是开发者的“突发奇 想” 缺点&#xff1a;开发过程是非工程化的&#xff0c;随意性大&#xff0c;结果不可预知 测试&#xff1a;开发任务完成后&#xff0c;…

一个自卑的人怎么变得自信

一个自卑的人怎么变得自信 自卑感是一种常见的心理状态&#xff0c;它可能源于个人对自己能力、外貌、价值等方面的负面评价。自卑感不仅会影响一个人的情绪状态&#xff0c;还可能阻碍其在生活、学习和工作中的表现。然而&#xff0c;自信并非一蹴而就的品质&#xff0c;它需要…

基础款:Dockerfile 文件

# bash复制代码# 使用 Node.js 16 作为基础镜像 # 指定一个已经存在的镜像作为模版&#xff0c;第一条必须是from FROM node:16# 将当前工作目录设置为/app # WORKDIR /app# 方法一&#xff1a;用dockerfile命令&#xff1a;进行下载打包文件 # 将 package.json 和 package-loc…

MySQL 之 主从复制

1. 主配置文件&#xff08;win下是my.ini&#xff0c;linux下是my.cnf&#xff09; #mysql 服务ID,保证整个集群环境中唯一 server-id1 #mysql binlog 日志的存储路径和文件名 log-bin/var/lib/mysql/mysqlbin #错误日志,默认已经开启 #log-err #mysql的安装目录 #basedir #mys…