深圳制作网站流程,河南企业做网站,徐州市丰县建设局网站,杭州简单网技术有限公司假设进程1现在要切走了#xff0c;切入进程2.那进程1就要先保存数据#xff0c;方便以后恢复#xff0c; 然后进程2再切走#xff0c;进程1再把数据还原#xff1a; 操作系统又分为实时操作系统和分时操作系统。
实时操作系统是是给操作系统一个进程#xff0c;操作系统…
假设进程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。
int4bit32位
32 bit*5160;
它通过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的初始元素打印出来看看
#includestdio.h
int main(int argc,char* argv[])
{
int i0;
for(;iargc;i)
{ printf(%d:%s ,i,argv[i]);
}
printf(\n); return 0;
}
~
~如下图运行结果是 ./myproc这是第一个元素也就是下标为0的元素这个元素也就是我们的可执行文件的文件名。 argv一共有5个参数假设我们给这个四个参数传参它即会把这四个参数依次打印出来 那这样写的用处在哪呢假设我们通过设置main函数参数来实现了一个计算器 #includestdio.h
#includestdlib.h
#includestring.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 result0;if( strcmp(argv[1],add)0){resultab;printf(%d%d%d\n,a,b,result);}else if( strcmp(argv[1],sub)0){ resulta-b;printf(%d-%d%d\n,a,b,result);}else if( strcmp(argv[1],mul)0){resulta*b;printf(%d*%d%d\n,a,b,result); }else if( strcmp(argv[1],div)0){if(argv[3]0)printf(除数不能为0);resulta/b;printf(%d*%d%d\n,a,b,result);}else {printf(你输入了-*/以外的操作符);}return 0; 上面这段程序说明了我们在输入命令参数的时候实际上是输入用空格分隔的字符串然后shell1把这些字符串传给main函数的argcargv两个参数然后运行的。
比如我们输入 touch test.cvim就是一个参数test.c就是文件名。
我们可以模拟实现一下touch: