八_进程控制13 - 进程调度

文章描述了一个C程序,通过nice值调整父进程和子进程的CPU占用率。当nice值相同时,两者共享CPU资源;当父进程nice值最高时,CPU分配比例显著变化,显示了nice值在进程调度中的作用。

在这里插入图片描述

在这里插入图片描述

#include "unistd.h"
#include "sys/time.h"
#include "stdio.h"
#include "errno.h"
#include "sys/param.h"

unsigned long long int count=0;
struct timeval end;

void TimeCheck(char *name)
{
	struct timeval custom;
	gettimeofday(&custom,NULL);
	
	if(custom.tv_sec >= end.tv_sec && custom.tv_usec >= end.tv_usec){
		fprintf(stdout,"%s end, count=%d\n",name,count);
		exit(0);
	}
	
}

int main(int argc,char* argv[])
{
	pid_t pid;
	char* name;
	int ret;
	int level=0;
	int nzero;


	setbuf(stdout,NULL);
	nzero = sysconf(_SC_NZERO);
	if(argc > 1)
		level = strtol(argv[1],NULL,10);

	gettimeofday(&end,NULL);
	end.tv_sec += 10;

	fprintf(stdout,"NZERO = %d \n",nzero);

	pid = fork();
	if(pid<0)
		fprintf(stderr,"fork err\n");

	if(pid == 0){
		fprintf(stdout,"Child current nice value is %d\n",nice(0)+nzero);
		name = "Child";
	}else{
		printf("Parent current nice value is %d, adjusting by %d\n",nice(0)+nzero, level);
		errno = 0;
		ret = nice(level);
		if((ret==-1) && (errno!=0)){
			printf(stderr,"nice error \n");			
		}
		name = "Parent";
		printf("now Parent nice value is %d\n", ret+nzero);
	}	

	while(1){
		
		TimeCheck(name);
		count ++;
	}


}


mhr@ubuntu:~/Desktop/xitongbiancheng/test$ ./a.out 
NZERO = 20 
Parent current nice value is 20, adjusting by 0
now Parent nice value is 20
Child current nice value is 20
Parent end, count=221346030
Child end, count=220661588
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 

当两个进程 nice值相同的时候,两个进程各自占用进阶50%的CPU。可以看到,两个进程被有效地进行了平等对待。百分比并不完全相同,是因为进程调度并不精确。

mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ ./a.out 20
NZERO = 20 
Parent current nice value is 20, adjusting by 20
now Parent nice value is 39
Child current nice value is 20
Child end, count=460304979
Parent end, count=6689695
mhr@ubuntu:~/Desktop/xitongbiancheng/test$ 

相比之下 当父进程有最高的nice值(最低优先级)时,我们看到父进程占用 1.4%的CPU,而子进程占用 98.6%的CPU,这些值取决于进程调用程序如何使用nice值,因此不同的UNIX系统会产生不同的CPU占用比。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值