Linux 进程切换与命令行参数

假设进程1现在要切走了,切入进程2.那进程1就要先保存数据,方便以后恢复,
然后进程2再切走,进程1再把数据还原:
操作系统又分为实时操作系统和分时操作系统。
实时操作系统是是给操作系统一个进程,操作系统必须优先处理这个进程,处理完之后才能处理下个进程,列如车载系统会优先处理刹车。
分时操作系统是操作系统自己会按优先级对进程进行调度。
linux即可以实时,又可以分时。linux有140个优先级,其中前100个是普通的,后面40个。
放在一个指针数里里面,这个指针数组叫做tast_struct* queue[140]:

假设此时有优先级为60,80,90的进程吗,那它们就会从上到下放到queue[40]里面:
然后此时60进程处理完了,80进程也快结束时,又来了1个优先级为80的进程,然后快结束时又来了几个,那优先级为90的进程一直没有机会被调度,会处于饥饿状态,并且这种调度方式也不符合操作系统公平调度的方针。
为了避免这种情况发生,所以还有一个queue【140】队列,然后这两个队列通过两个指针变量来控制。
active指针和expired指针。active指针指向活跃队列,expired指针指向过期队列。
假如以后又有优先级为80的进程加入,那就直接让它们加进过期队列里排着,等我活跃队列的进程全部结束,再把active和expired指针的内容交换一下,这样active指针就会指向过期队列,就会去处理过期队列的内容。

伴随着queue[140]的还有一个int bit[map]5。
int=4bit=32位
32 bit*5=160;
它通过8位8位遍历这160个0,在第几个位上有1就代表优先级为一那一位的有进程。这种遍历方法接近O(1),被称之为Linux2.6内核的调度队列与调度原理。

假设cpu现在要调度一个进程,操作系统就会去queue[140]里去查看,先看active是否有进程,active显示有进程,那就去bitmap[5]里查看,bitmap[5]再8位8位遍历160个位,假设在第80位发现一个1,那么就去把优先级为80的进程,把它的pcb喂给CPU。

命令行参数
main函数有两个参数:
int main(int argc,char* argv[])
整形argc,指定字符串指针数组argv有多少个元素。
现在我们把argv的初始元素打印出来看看:
#include<stdio.h>
int main(int argc,char* argv[])
{
int i=0;
for(;i<argc;i++)
{ printf("%d:%s ",i,argv[i]);
}
printf("\n"); return 0;
}
~
~
如下图,运行结果是 ./myproc,这是第一个元素,也就是下标为0的元素,这个元素也就是我们的可执行文件的文件名。

argv一共有5个参数,假设我们给这个四个参数传参,它即会把这四个参数依次打印出来:


那这样写的用处在哪呢?假设我们通过设置main函数参数来实现了一个计算器:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc,char* argv[])
{if(argc!=4){printf("输入错误,请至少输入四个参数:%s",argv[0]);}int a= atoi(argv[2]);int b= atoi(argv[3]);int result=0;if( strcmp(argv[1],"add")==0){result=a+b;printf("%d+%d=%d\n",a,b,result);}else if( strcmp(argv[1],"sub")==0){ result=a-b;printf("%d-%d=%d\n",a,b,result);}else if( strcmp(argv[1],"mul")==0){result=a*b;printf("%d*%d=%d\n",a,b,result); }else if( strcmp(argv[1],"div")==0){if(argv[3]==0)printf("除数不能为0");result=a/b;printf("%d*%d=%d\n",a,b,result);}else {printf("你输入了+-*/以外的操作符");}return 0;

上面这段程序说明了我们在输入命令参数的时候实际上是输入用空格分隔的字符串,然后shell1把这些字符串传给main函数的argc,argv两个参数,然后运行的。
比如我们输入 touch test.c,vim就是一个参数,test.c就是文件名。
我们可以模拟实现一下touch:
相关文章:
Linux 进程切换与命令行参数
假设进程1现在要切走了,切入进程2.那进程1就要先保存数据,方便以后恢复, 然后进程2再切走,进程1再把数据还原: 操作系统又分为实时操作系统和分时操作系统。 实时操作系统是是给操作系统一个进程,操作系统…...
Python基础入门例程6-NP6 牛牛的小数输出
目录 描述 输入描述: 输出描述: 示例1 解答: 说明: 描述 牛牛正在学习Python的输出,他想要使用print函数控制小数的位数,你能帮助它把所有读入的数据都保留两位小数输出吗? 输入描述&a…...
传奇游戏常见问题解决办法
GEE合区出现错误常规解决方案 GEE合区出现错误大部分因数据库损坏导致的合区报错,如果合区提示内存不足,更新64位合区,使用64位合区工具在服务器上进行合并,合区需要将2个区数据大部分提取到内存中,32位合区工具支持内…...
2310D的dll问题
原文 我正在开发一个游戏引擎,偶然发现了一些空针问题. 考虑此简单程序: class Test {void doIt(){} } void main() {Test t;t.doIt(); }它编译,然后在Linux上使用DMD时,用11信号干掉了. 如果使用Java,甚至不会构建该程序,因为它会失败,说明从未初化它. 但我不关心分析器,我宁…...
包管理工具
代码共享方案 放到npm仓库,下载到本地放到node_modules npm配置文件 必须填写的属性:name、version name是项目的名称; version是当前项目的版本号; description是描述信息,很多时候是作为项目的基本描述;…...
Qt第六十五章:自定义菜单栏的隐藏、弹出
目录 一、效果图 二、qtDesigner 三、ui文件如下: 四、代码 一、效果图 二、qtDesigner 原理是利用属性动画来控制QFrame的minimumWidth属性。 ①先拖出相应的控件 ②布局一下 ③填上一些样式 相关QSS background-color: rgb(238, 242, 255); border:2px sol…...
element table中嵌套el-select 无法选择问题
<el-table-column align"left" label"姓名" show-overflow-tooltip :key"tableKey"><template slot-scope"scope"><el-select placeholder"请选择" :disabled"!saveButton" v-model"scope.ro…...
2.6.C++项目:网络版五子棋对战之数据管理模块-游戏房间管理模块的设计
文章目录 一、意义二、功能三、作用四、游戏房间类基本框架五、游戏房间管理类基本框架七、游戏房间类代码八、游戏房间管理类代码 一、意义 对匹配成功的玩家创建房间,建立起一个小范围的玩家之间的关联关系! 房间里一个玩家产生的动作将会广播给房间里…...
计算机视觉中的数据预处理与模型训练技巧总结
计算机视觉主要问题有图像分类、目标检测和图像分割等。针对图像分类任务,提升准确率的方法路线有两条,一个是模型的修改,另一个是各种数据处理和训练的技巧(tricks)。图像分类中的各种技巧对于目标检测、图像分割等任务也有很好的作用&#…...
GeoHash分享
写在前边 复制的一个内部分享,所以可能更偏向PPT性质,本文提出的问题,在末尾参考材料中都会有所提及,包括更深层次的实现原理和各大API对于GeoHash的优化。感兴趣的读者可以拓展看一下。 START GeoHash是一种地址编码ÿ…...
【超详细】CentOS 7安装MySQL 5.7【安装及密码配置、字符集配置、远程连接配置】
准备工作:CentOS 7系统,并确保可以联通网络 1、获取MySQL 5.7 Community Repository软件包 注意:这里使用的是root用户身份。 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装软件包 rpm -ivh mysql5…...
Elasticsearch 8.X 分词插件版本更新不及时解决方案
1、关于 Elasticsearch 8.X IK 分词插件相关问题 球友在 ElasticSearch 版本选型问题中提及:如果要使用ik插件,是不是就使用目前最新的IK对应elasticsearch的版本“8.8.2”? https://github.com/medcl/elasticsearch-analysis-ik/releases/ta…...
Delete `␍`eslintprettier/prettier
将CRLF改为LF 然后就消失了 除此之外,也可以修改git全局配置 git config --global core.autocrlf false...
4种实用的制作URL 文件的方法
很多小伙伴有自己的博客、淘宝或者共享文件网站,想要分享、推广自己的网址做成url文件,让别人点击这个url文件直接访问自己的网站。URL文件其实就一个超级链接,制作的方法很多,这里列举4种。 收藏网站直接拖拽 1.第一种…...
css总结
记录做项目经常会写到的css 1、左边导航栏固定,右边div占满剩余宽度 <template><div class"entrance"><div class"left"></div><div class"right"><div class"content"></div>…...
[C语言]排序的大乱炖——喵喵的成长记
宝子,你不点个赞吗?不评个论吗?不收个藏吗? 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要…...
Docker 网络与Cgroup资源限制
目录 一、Docker 网络实现原理: 二、Docker 的网络模式: 三、网络模式详解: 1. host模式: 2. container模式: 3. none模式: 4.bridge模式: 5.自定义网络: 四、Cgroup资源控制: …...
D - United We Stand
思路: (1)题目要求将集合A划分为B,C两组,使得C中任意数都不是B中的除数 (2)直观感受,只要让C中数比B中大,则满足条件,不妨只取最大的放入C中; …...
【1.总纲】
目录 知识框架No.0 总纲安排No.1课程安排一、目标二、内容三、 学到 No.2 深度学习介绍一、AI地图二、图片分类三、物体检测和分割四、样式迁移五、人脸合成六、文字生成图片七、文字生成-GPT八、无人驾驶九、广告点击 No.3 安装No.3 安装 知识框架 No.0 总纲安排 B站网址&…...
I/O模型之非阻塞IO
简介 五种IO模型 阻塞IO 非阻塞IO 信号驱动IO IO多路转接 异步IO 代码书写 非阻塞IO 再次理解IO 什么是IO?什么是高效的IO? 为了理解后面的一个问题,我们首先要再重新理解一下什么是IO 在之前的网络介绍中ÿ…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
软件工程 期末复习
瀑布模型:计划 螺旋模型:风险低 原型模型: 用户反馈 喷泉模型:代码复用 高内聚 低耦合:模块内部功能紧密 模块之间依赖程度小 高内聚:指的是一个模块内部的功能应该紧密相关。换句话说,一个模块应当只实现单一的功能…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...
