Linux 进程切换与命令行参数

news2025/1/15 3:18:57

假设进程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:

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

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

相关文章

网络安全https

http是明文的&#xff0c;相当于在网上裸奔&#xff0c;引出了https&#xff0c;大多数网站都转为了https&#xff0c;连非法的赌博网站有的都是https的。 1.https的网站是不是必须让用户装数字证书&#xff1f; 答&#xff1a;分两种&#xff0c;一种是单向认证&#xff0c;像…

桥梁结构健康监测系统落地方案

桥梁结构健康监测的意义是多方面的。首先&#xff0c;它可以实时采集桥梁的结构数据&#xff0c;并对其进行处理和分析&#xff0c;以确定结构损伤的位置、评估桥梁的健康状况&#xff0c;并预测承载力的发展趋势。这有助于及时发现桥梁的结构问题和潜在风险&#xff0c;为采取…

2023年中国互联网视听平台发展趋势分析:未来增速将从2023年开始缓慢提升[图]

互联网视听平台是指基于互联网技术&#xff0c;提供包括音频、影视、综艺节目、直播、短视频等内容的数字化传播平台。互联网视听平台通过电脑端、移动端等多种终端提供在线点播、直播、互动等服务&#xff0c;具有内容丰富、便捷高效、交互性强等特点&#xff0c;是大众获取娱…

基础课7——计算机视觉研究任务与行业应用

计算机视觉的研究任务包括以下几个方面&#xff1a; 图像分类&#xff08;Image Classification&#xff09;&#xff1a;该任务的目标是确定给定图像属于哪个类别。例如&#xff0c;将一张猫的图像分类为“猫”类别。目标检测&#xff08;Object Detection&#xff09;&#…

工业异常检测:从前沿到落地

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言一、前沿技术&#xff1a;SimpleNet1. 任务分类&#xff1a;分隔2. 性能对比&#xff1a;faster&higher3. 研究背景困难&#xff1a;方案&#xff1a;无监督数据…

8.1 矢量图层符号化整体说明

文章目录 前言符号化与图层渲染符号符号层渲染器 总结 前言 地图制图是QGIS的优势所在&#xff0c;QGIS包含完整的地图制图功能&#xff0c;如标注与注记、符号化与地图综合等多种功能。 符号化&#xff08;Symbolization&#xff09;是指利用符号将地理事物或现象抽象化。 QGi…

STM32-ADC实验

实验1&#xff1a;单ADC单通道中断 硬件原理图 由于PC1接到电位器上&#xff0c;所以我们实验选择PC1引脚作为ADC接口&#xff0c;查询STM32数据手册得知PC1可作为ADC1的IN11&#xff08;ADC1_IN11&#xff09;。 USART配置 115200-8-N-1&#xff0c;重定向支持printf打印&…

超简单的视差滚动网站

超简单的视差滚动网站 原理能就是记录鼠标的滚动,然后给不同的元素添加不同的偏移 遵循开源精神,源码如下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"width…

视觉SLAM数据集(三):KITTI 数据集

教程目录 一、官网二、注册登录三、下载数据集四、测试数据集 一、官网 官网地址&#xff1a;https://www.cvlibs.net/datasets/kitti/eval_odometry.php Kitti数据集很庞大&#xff0c;包含了双目、光流、场景流、深度、里程计、目标、跟踪、马路、语义、原始数据等大类别&…

C++入门(3):引用,内联函数

一、引用 1.1 引用特性 引用必须初始化 一个变量可以有多个引用 引用一旦引用一个实体&#xff0c;就不能引用其他实体 int main() {int a 10, C 20;int& b a;b c; // 赋值&#xff1f;还是b变成c的别名&#xff1f;return 0; }1.2 常引用 引用权限可以平移或缩小…

有没有免费靠谱的配音软件?(不带广告)

免费配音软件在当今社会中越来越受到人们的关注和喜爱。随着科技的不断发展和智能手机的普及&#xff0c;配音软件成为了人们生活中不可或缺的一部分。无论是在职场中需要制作视频配音&#xff0c;还是在社交媒体上发布个人动态&#xff0c;配音软件都能帮助我们实现文字转语音…

以太坊搭建私有链(非常详细!!!)

我的系统&#xff1a;CentOS7 64位 我喜欢宝塔的直观&#xff1a; /www/server/panel/pyenv/bin/python3.7 -m pip install --upgrade pip yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed84…

【APP VTable】和市面上的 Table 组件一样,都是接收表格[] 以及数据源[]

博主&#xff1a;_LJaXi Or 東方幻想郷 专栏&#xff1a; uni-app | 小程序开发 开发工具&#xff1a;HBuilderX 这里写目录标题 表格组件USE 表格组件 <template><view class"scroll-table-wrapper"><view class"scroll-table-container"…

使用 excel 快速拼接省市区镇街村居五级区划完整名称

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录 前言数据准备excel 函数附件 前言 之前做了国家区划的映射关系&#xff0c;在其过程中&#xff0c;使用代码…

JAVA-编程基础-12-01-创建多线程的3种方式

JAVA-编程基础-12-创建多线程的3种方式 文章目录 JAVA-编程基础-12-创建多线程的3种方式创建一个类继承Thread类&#xff0c;并重写run方法创建一个类实现Runnable接口&#xff0c;并重写run方法实现Callable接口&#xff0c;重写call()方法&#xff0c;这种方式可以通过Future…

亚马逊云代码AI助手CodeWhisperer使用教程

一、CodeWhisperer 简介 1、CodeWhisperer是一款基于机器学习的通用代码生成器&#xff0c;由Amazon出品&#xff0c;可以给我们提供代码建议。 2、CodeWhisperer 基于各种上下文线索提供建议&#xff0c;包括光标在源代码中的位置、位于光标前面的代码、注释&#xff0c;以及…

MR混合现实情景实训教学系统在旅游管理专业中的应用

在旅游管理专业中&#xff0c;MR混合现实情景实训教学系统的主要应用包括但不限于以下几个方面&#xff1a; 1. 实地考察的替代&#xff1a;对于一些无法实地考察的景点或设施&#xff0c;学生可以通过MR系统进行虚拟参观&#xff0c;从而了解其实际情况。这不仅可以减少时间和…

Banana Pi BPI-W3 RK3588开源硬件开发板 Debian11详解

1. 简介 RK3588从入门到精通Debian 是⼀种完全⾃由开放并⼴泛⽤于各种设备的 Linux 操作系统。Rockchip在官⽅Debian发⾏版的基础上构建和适配了相关硬件功能 2. 环境介绍 硬件环境&#xff1a; ArmSoM-W3 RK3588开发板软件版本&#xff1a; OS&#xff1a;ArmSoM-W3 Debian…

Java中配置RabbitMQ基本步骤

在Java中配置RabbitMQ&#xff0c;需要遵循以下步骤&#xff1a; 1.添加依赖 在项目的pom.xml文件中添加RabbitMQ的Java客户端依赖&#xff1a; <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><versio…

搜维尔科技:Varjo-最自然和最直观的互动

创建真实生活虚拟设计 Varjo让你沉浸在最自然的混合和虚拟现实环境中。 世界各地的设计团队可以聚集在一个摄影现实的虚拟空间中,以真实的准确性展示新的概念-实时的讨论和迭代。这是一个充满无限创造潜力的新时代,加速了人类前所未有的想象力。 虚拟现实、自动反应和XR设计的…