diff --git a/kernel/sysproc.c b/kernel/sysproc.c index d58fd3ad0ce2d74d161a6d3147f25e8de2fcc4d0..6959e51e478aaa3be9924c45c4176596d19b4ac7 100644 --- a/kernel/sysproc.c +++ b/kernel/sysproc.c @@ -190,13 +190,13 @@ sys_top(void) for(p = proc; p < &proc[NPROC]; p++) { if(p->state != UNUSED) { // CPU使用率计算(简化版) - int cpu_usage = (p->cputicks * 100) / (ticks - p->startticks + 1); + int cpu_usage = (p->cputicks * 100) / (ticks - p->ctime + 1); // 内å˜ä½¿ç”¨ç™¾åˆ†æ¯” int mem_percent = (p->sz * 100) / total_mem; // è¿è¡Œæ—¶é—´(ç§’) - int runtime = (ticks - p->startticks) / 10; + int runtime = (ticks - p->ctime) / 10; // 状æ€å—符串 char *state; diff --git a/kernel/trap.c b/kernel/trap.c index 12e171f2f6af0ae7a39fe4bed5239893c0cae098..a11a077fe815d99b83b5d91d8bde4097dc62d3d6 100644 --- a/kernel/trap.c +++ b/kernel/trap.c @@ -84,12 +84,12 @@ usertrap(void) // æ¯10ä¸ªæ—¶é’Ÿä¸æ–检查一次 if(ticks % 10 == 0) { // CPU使用率过高且优先级大于1æ—¶é™ä½Žä¼˜å…ˆçº§ - if((p->cputicks * 100)/(ticks - p->startticks) > 80 + if((p->cputicks * 100)/(ticks - p->ctime) > 80 && p->priority > 1) { p->priority--; } // CPU使用率较低且优先级å°äºŽ10æ—¶æé«˜ä¼˜å…ˆçº§ - else if((p->cputicks * 100)/(ticks - p->startticks) < 20 + else if((p->cputicks * 100)/(ticks - p->ctime) < 20 && p->priority < 10) { p->priority++; }