进程动态优先级调度

  1 /*******************************************
  2 *
  3 *  File    : pro.c
  4 *  describe: 操作系统进程调度,动态优先级算法
  5 *  Author  : 阿Q
  6 *  Iime    : 2016.11.19
  7 *
  8 *******************************************/
  9 #include<stdio.h>
 10 #define P 5
 11 #define PrintF(proprety) printf("%s\t",proprety)
 12 struct pcb {         //定义进程结构
 13     int pid;             //进程Id
 14     struct pcb *next;  //指向下一个进程
 15     int time;    //进程所需执行的时间
 16     int priority;  //进程优先级
 17     int state;  //进程执行的状态,只有0、1状态.0未执行,1已执行
 18 };
 19 struct pcb pro[P]= {//初始化5个进程
 20     {0,1,6,3,0},
 21     {1,2,4,4,0},
 22     {2,3,4,3,0},
 23     {3,4,4,2,0},
 24     {4,0,1,0,0},
 25 };
 26
 27 /*******************************************
 28 *
 29 *  Function : 显示所有进程的状态
 30 *
 31 *******************************************/
 32 void display() {
 33     int i=0,property=5;
 34     PrintF("\npid");
 35     for(i=0; i<P; i++) {
 36         printf("%d\t",pro[i].pid);
 37     }
 38     PrintF("\nnext");
 39     for(i=0; i<P; i++) {
 40         printf("%d\t",pro[i].next);
 41     }
 42     PrintF("\ntime");
 43     for(i=0; i<P; i++) {
 44         printf("%d\t",pro[i].time);
 45     }
 46     PrintF("\npri");
 47     for(i=0; i<P; i++) {
 48         printf("%d\t",pro[i].priority);
 49     }
 50     PrintF("\nstate");
 51     for(i=0; i<P; i++) {
 52         printf("%d\t",pro[i].state);
 53     }
 54     printf("\n");
 55 }
 56
 57 /*******************************************
 58 *
 59 *  Function : 对结构体进行排序,按优先级降序*时间升序
 60 *
 61 *******************************************/
 62 int cmp(const void *a,const void *b) {
 63     struct pcb *aa=(struct pcb *)a;
 64     struct pcb *bb=(struct pcb *)b;
 65
 66     //如果进程执行结束,则直接返回状态
 67     if(aa->time==0||aa->state==1)return 1;
 68     else if(bb->time==0||bb->state==1)return -1;
 69
 70     if(bb->priority!=aa->priority)
 71         return (bb->priority - aa->priority);
 72     else
 73         return (aa->time - bb->time);
 74 }
 75
 76 /*******************************************
 77 *
 78 *  Function : 进程排序 需要子函数 cmp()
 79 *
 80 *******************************************/
 81 void reSort() {
 82     qsort(pro,P,sizeof(pro[0]),cmp);
 83 }
 84
 85 /*******************************************
 86 *
 87 *  Function : 检查是否存在未执行完的程序
 88 *
 89 *******************************************/
 90 int check() {
 91     int i=0;
 92     for(i=0; i<P; i++) {
 93         if(!pro[i].state)return 1;
 94     }
 95     return 0;
 96 }
 97
 98 /*******************************************
 99 *
100 *  Function : 修改指针指向
101 *
102 *******************************************/
103 void rePoint() {
104     int i=0;
105     for(; i<P; i++) {
106         if(pro[i].state&&i>0) {
107             pro[i-1].next=0;
108         }
109         if(i<(P-1))
110             pro[i].next=pro[i+1].pid;
111     }
112 }
113
114 int main() {
115     int f=0,i=1;
116     printf("初始状态为:");
117     display();
118     while(check()) {//每执行完一次,测试是否还有进程未执行完
119         printf("第%d次运行后:",i++);
120         //pro[0]为第一个进程,这里当作是在CUP中执行的进程.每次执行执行时间减一,优先级减一。
121         pro[0].time-=1;//执行一次进程执行时间减一
122         pro[0].priority-=1;//动态优先级,每执行一次优先级减一
123
124         if(pro[0].time==0)pro[0].state=1,pro[0].priority=-1,pro[0].next=0;//如果该进程执行完毕,及执行时间为0,则状态该为1,同时调整优先级,指针调制为0
125         reSort();//重排进程
126         rePoint();//重排指针
127         display();//输出
128     }
129     printf("进程以全部运行完毕\n");
130     return 0;
131 }
时间: 2024-11-01 00:25:45

进程动态优先级调度的相关文章

进程动态拦截注入API HOOK

最近工作中遇到一个问题,需要通过程序界面进行判断程序的运行状态,刚开始认为很简单,不就是一个窗体控件获取,获取Button的状态和Text.刚好去年干过该事情,就没太在意,就把优先级排到后面了,随着项目交付时间的临近,就准备开始解决问题,一下懵逼了,这次软件作者也聪明了,居然换了花样. 从图中可以发现,此处的按钮上的文字等信息不是通过Button信息进行操作.静想猜测是通过Windows API直接将信息进行写入,那么哪个API可以进行写入呢,想想不难发现,其实就是窗口程序中在窗口中写入文字的方

动态优先级调度

#include"stdio.h" #include"stdlib.h" #include"string.h" typedef struct node { char name[10]; //进程标志符 int prio; //进程优先数 int cputime; //进程占用cpu时间 int needtime; //进程到完成还要的时间 char state; //进程的状态 struct node *next; //链指针 }PCB; PCB

查看,控制进程

程序:程序是保存在外部存储介质(如硬盘)中的可执行代码和数据的静态集合 进程:进程是运行在CPU及内存中出于动态执行状态的计算机程序,每个程序启动后可以创建多个进程 例如web,大量用户同时访问是,httpd服务会创建多个进程来提供服务 1.查看进程 (1.ps命令:查看静态的进程统计信息(ProcessesStatistic) a:显示当前终端下的所有进程,包括其他用户的进程,与x选项结合是将显示系统中左右的进程信息 u:使用以用户为主的格式输出进程信息 x:显示当前用户所有终端下的进程信息

linux中进程和计划任务的管理(二)命令补充

Ps命令:查看静态的进程统计信息   Ps :不带任何参数将只显示当前用户会话中打开的进程 . Ps  aux :将以简单列表的形式显示出所有进程信息 注释: User:启动该进程的用户账号的名称 Pid:该进程在系统中的数字ID号,在当前系统中是唯一的 Tyy:表明该进程在哪个终端上运行,"?"表示未知或不需要终端 Stat:显示该进程的状态,S(休眠),R(运行),Z(僵死),〈 (高优先级),N(低优先级),s(父进程),+(前台运行),对处于僵死状态的进程应该予以手动终止 St

Linux中如何查看进程和控制进程

查看进程的命令如下:ps命令--查看静态的进程统计信息(一般结合选项使用 ps aux 或 ps -elf 命令)建议使用 ps -elf 查询,输出的信息更详细些,包括 PPID (对应的父进程 的PID 号) 以上输出信息中,第一行为列表标题,其中各字段的含义描述如下. USER:启动该进程的用户账号名称: PID:该进程在系统中的数字 ID 号,在当前系统中是唯一的: %CPU:CPU占用的百分比: %MEM:内存占用的百分比: VSZ:占用虚拟内存(swap 空间)的大小: RSS:占用

CentOS 7进程和计划任务管理(理论+实践)

查看和控制进程 程序与进程的关系 程序 保存在硬盘.光盘等介质中的可执行代码和数据 静态保存的代码 进程 在CPU及内存中运行的程序代码 动态执行的代码 父.子进程 每个进程可以创建一个或多个进程 简单的说,程序是指电脑可以识别运行的指令集合.进程是一个正在执行的程序.进程是程序的一部分,程序运行的时候会产生进程. 查看进程 了解系统中进程的状态是对进程进行管理的前提,使用不同的命令工具可以从不同的 角度查看进程状态. ps命令--查看静态的进程统计信息 命令格式 ps [选项] 常用选项 a:

Linux进程控制和计划任务管理

程序是保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合,而进程是在CPU及内存中处于动态执行状态的计算机程序.在Linux中,每个程序启动后可以创建一个或多个进程. ps命令   查看静态的进程统计信息 ps         只显示当前用户会话中打开的进程 ps  aux    以简单列表的形式显示出进程信息 ps  -elf   以长格式显示系统中的进程信息,包括更丰富的内容 top命令   查看进程动态信息 在当前终端已交互式的界面显示进程排名,及时跟踪CPU.内存等系统资源占

第六周分析Linux内核创建一个新进程的过程

潘恒 原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 task_struct结构: struct task_struct {   volatile long state;进程状态  void *stack; 堆栈  pid_t pid; 进程标识符  unsigned int rt_priority;实时优先级  unsigned int policy;调度策略  struct files

计划任务 进程

计划任务 *  任意 -  连续 , 多个不连续 /n 频率,每n... 0 8-18/2 * * 2  每周二8-18点之间每两个小时 分时日月周 编辑  cronetab -e [-u 用户名] 删除  cronetab -r [-u 用户名] 查看  cronetab -l [-u 用户名] anacron 延时补救 进程 查看进程树  pstree  [ 选项]  [PID或用户名] 选项  a  u  p.... 查看进程快照    ps  [选项] 选项  a u x e l f .