进程调度算法磁盘调度算法银行家算法操作系统课程设_第1页
进程调度算法磁盘调度算法银行家算法操作系统课程设_第2页
进程调度算法磁盘调度算法银行家算法操作系统课程设_第3页
进程调度算法磁盘调度算法银行家算法操作系统课程设_第4页
进程调度算法磁盘调度算法银行家算法操作系统课程设_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计说明书学院名称:专业班级:姓名:学号:2013年1月1日

评分标准优秀:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,程序完全实现设计要求,独立完成;良好:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;程序完全实现设计要求,独立完成,但存在少量错误;中等:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确;及格:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本正确;不及格:没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确。没有独立完成,抄袭或雷同。成绩评定为:。指导教师:年月日

目录一.进程调度算法4-----23页二.银行家算法24-----34页三.磁盘调度算法35------46页进程调度算法1.设计目的在多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略决定哪个进程优先占有处理机,因而必须解决进程调度的问题,进程调度算法就是要解决进程调度的问题。2.任务及要求2.1设计任务设计程序来模拟进程的四种调度算法,模拟实现调度的基本功能。2.2设计要求产生的各种随机数要加以限制,如alltime限制在40以内的整数。进程的数量n不能取值过大。3.算法及数据结构3.1算法的总体思想(流程)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态,0:就绪态;1:运行态;2:阻塞态。利用链表将数据连接起来,实现数据的存储。3.2链表模块3.2.1功能实现链表的存储功能,以及实现存储的查找功能。3.2.2数据结构构造链表这个数据结构,以及链表的初始化,链表的插入,链表的长度。3.2.3算法typedefstruct{ElemType*elem;intlength;intlistsize;}SqList;StatusInitList(SqList&l){ l.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!l.elem)exit(OVERFLOW); l.length=0; l.listsize=LIST_INIT_SIZE; returnOK;}intListLength(SqListl){ return(l.length);}StatusListInsert_Sq(SqList&L,inti,ElemTypee){//在顺序表L的第i个位置前插入元素e,i的合法值为1..L.length+1if(i<1||i>L.length+1) returnERROR;if(L.length>=L.listsize){ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW);L.elem=newbase; L.listsize+=LISTINCREMENT;}ElemType*q=&L.elem[i-1],*p=&L.elem[L.length-1];while(p>=q){ *(p+1)=*p;--p;}//插入位置后的元素右移*q=e;++L.length;returnOK;}StatusGetElem(SqListL,inti,ElemType&e){ if(i<=0||i>L.length) returnERROR; else e=*(L.elem+i-1); returnOK;}voidOutputlist(SqList&L){ if(0==L.length) printf("空集!"); else for(inti=0;i<L.length;++i) { printf("%c",*(L.elem+i)); }}3.3主函数模块3.3.1功能实现进程调度的四种算法,以及人机交互的菜单。3.3.2数据结构主要包括五个部分,分别是四种算法,和进程的输入和菜单部分,功能分别实现。3.3.3算法voidmain(){ for(1;;){ intnumber; PCBpcb[100]; srand(time(0)); intmax; intppp[100]; inttime=0; inttime1; intm; inta[100]; a[0]=0; printf("\n*************************进程调度算法的模拟***************************\n"); printf("*1.先到先服务调度2.最短作业优先调度*\n"); printf("*3.优先权调度4.轮转发调度*\n"); printf("**********************************************************************"); printf("\n请选择调度的方法:"); scanf("%d",&m); if(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误!重新输入:"); scanf("%d",&m); if(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误!重新输入:"); scanf("%d",&m); if(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误!重新输入:"); scanf("%d",&m); if(m!=1&&m!=2&&m!=3&&m!=4) { printf("输入错误!重新输入:"); scanf("%d",&m); } } } } printf("请输入进程的个数:"); scanf("%d",&number); printf("\n开始时用户进程均为就绪状态,运行时间随机产生\n\n"); SqListsq; InitList(sq); for(intr=0;r<number;r++) { pcb[r].CPUtime=0; } for(inti=0;i<number;i++) { pcb[i].Priority=rand()%50; while(1) { if(pcb[i].Priority<20) { pcb[i].Priority=rand()%50; } else break; } pcb[i].Alltime=rand()%40; while(1) { if(pcb[i].Alltime<10) { pcb[i].Alltime=rand()%40; } else break; } } for(intj=0;j<number;j++) { ListLength(sq); ListInsert_Sq(sq,ListLength(sq),pcb[i]); } if(m==1) { printf("\n****************程序演示开始*****************\n"); intcoun=0;//计数变量 intwait[100];//等待时间数组 wait[0]=0; intAllwait=0; for(inti1=0;i1<number;i1++) { printf("下面开始调用第%d个进程;\n",i1); printf("开始时间为%d执行时间为%d\n",coun,pcb[i1].Alltime); coun+=pcb[i1].Alltime; if(i1!=0) { wait[i1]=pcb[i1-1].Alltime+wait[i1-1]; } } for(inti2=0;i2<number;i2++) { Allwait=wait[i2]+Allwait; } printf("平均等待时间为:%d\n",Allwait/number); } if(m==2) { intmin=pcb[0].Alltime;intwait1[100]; wait1[0]=0; intin=0; intcoun1=0; printf("*****************最短作业优先调度!********************\n"); cout<<"进程所需时间分别是:"<<endl; for(i=0;i<number;i++) { cout<<pcb[i].Alltime<<endl; } printf("进程调度的顺序为:"); for(i=0;i<number;i++) { min=50;for(j=0;j<number;j++) { if(pcb[j].Alltime<min) { min=pcb[j].Alltime; in=j; } } printf("%d",in+1); pcb[in].Alltime+=50; } }if(m==3) { printf("ID优先级运行总时间进程状态\n"); for(intk=0;k<number;k++) { printf("%d%d%d就绪\n",k+1,pcb[k].Priority,pcb[k].Alltime); } printf("\n***********************程序调度演示开始***********************\n"); for(intf=1;f<1000;f++) { intcount=0,count1=0; for(inti=0;i<number;i++) { ppp[i]=pcb[i].Priority; if(pcb[i].Alltime!=0) { count1++; } } count1--; time=time+count1*4; max=Max(ppp,number); if(pcb[max].Alltime==0) { ppp[max]=-1; pcb[max].Priority=-1; max=Max(ppp,number); } pcb[max].Priority-=4; pcb[max].Alltime-=4; pcb[max].CPUtime+=4; if(pcb[max].Alltime<=0) { pcb[max].Alltime=0; }for(intw=0;w<number;w++) { if(pcb[w].Alltime==0) { ppp[w]=-1; pcb[w].Priority=-1; } } for(inte=0;e<number;e++) { pcb[e].Priority++; } printf("\n##########第%d个进程正在执行!##########\n",max+1); printf("\n第%d次调度结束,运行结果为:\n\n",f); printf("ID优先级需要总时间执行时间\n"); for(intk=0;k<number;k++) { printf("%d%d%d%d\n",k+1,pcb[k].Priority,pcb[k].Alltime,pcb[k].CPUtime); } for(intl=0;l<number;l++) { if(pcb[l].Alltime==0) count++; } if(count==number) { break; } } time1=time/number; printf("\n*****************************用户进程全部执行完毕!******************************"); printf("\n\n平均等待时间是:"); printf("%d\n\n",time1); } if(m==4) { printf("ID运行总时间进程状态\n"); for(intk=0;k<number;k++) { printf("%d%d就绪\n",k+1,pcb[k].Alltime); } printf("\n***********************程序调度演示开始***********************\n"); for(intf=1;f<1000;f++) { intcount=0; for(i=0;i<number;i++) { if(pcb[i].Alltime==0) { continue; } if(pcb[i].Alltime>0) { pcb[i].Alltime-=4; pcb[i].CPUtime+=4; } if(pcb[i].Alltime<0) { pcb[i].Alltime=0; } ///////////////////////////////////////////////////// printf("\n##########第%d个进程正在执行!##########\n",i+1); printf("\n第%d次调度结束,运行结果为:\n\n",f); printf("ID需要时间执行时间\n"); for(intk=0;k<number;k++) { printf("%d%d%d\n",k+1,pcb[k].Alltime,pcb[k].CPUtime); } //////////////////////////////////////////////////// } for(intl=0;l<number;l++) { if(pcb[l].Alltime==0) count++; } if(count==number) { break; } } printf("\n*****************************用户进程全部执行完毕!******************************"); } }}4.实验结果及分析4.1实验结果先到先服务算法的实验结果如下:最短作业优先调度的实验结果如下:优先权调度算法的实验结果如下:轮转法调度的实验结果如下:4.2结果分析本次试验基本实现了进程调度的四种算法,每一种算法都能模拟出算法的具体过程。相应的结果也完全符合预想的结果。同时,对于算法的实践编写进一步增加了编程的技巧,以及编程的熟练程度。银行家算法1.设计目的银行家算法是避免死锁的一种十分重要的方法,通过编写一个模拟的动态的银行家算法的程序,能够进一步加深对死锁的理解,以及产生死锁的必要条件。并掌握通过银行家算法来避免死锁。2.任务及要求2.1设计任务根据银行家算法的基本思想来设计程序,模拟银行家算法的过程。用程序来实现银行家算法的具体动态过程。2.2设计要求根据银行家算法的基本思想,编写和调试一个能实现动态的分配资源的模拟程序。并能够有效的防止死锁的发生。3.算法及数据结构3.1算法的总体思想(流程)银行家算法的基本思想是,系统中的所有进程放入进程集合,在安全状态下系统受到进程的请求后会试探性的把资源分配给他,现在系统将剩下的资源和进程集合中其他进程还需要的资源作对比,找出剩余资源能满足的进程,从而保证进程运行完并释放资源继续满足剩下进程对资源的需要。最后检查集合为空集时表明本次申请可行,系统继续处于安全状态,可以实施本次分配。否则不能实施本次分配。3.2显示资源矩阵showdata()模块3.2.1功能主要是显示资源的矩阵,包括输入的已分配的的资源矩阵,以及输出的资源矩阵。3.2.2数据结构最大需求矩阵max以及已分配矩阵allocation,分别定义为m*n阶的矩阵,利用二维数组来存储。3.2.3算法voidshowdata()//显示资源矩阵{inti,j;cout<<"系统目前可用的资源[Avaliable]:"<<endl;for(i=0;i<N;i++){ cout<<name[i]<<"";}cout<<endl;for(j=0;j<N;j++){cout<<Avaliable[j]<<"";//输出分配资源}cout<<endl;cout<<"MaxAllocationNeed"<<endl;cout<<endl;cout<<"进程名";for(j=0;j<3;j++){for(i=0;i<N;i++)cout<<name[i]<<"";cout<<"";}cout<<endl;for(i=0;i<M;i++){cout<<""<<i<<"";for(j=0;j<N;j++) {cout<<Max[i][j]<<""; }cout<<"";for(j=0;j<N;j++) {cout<<Allocation[i][j]<<""; }cout<<"";for(j=0;j<N;j++) {cout<<Need[i][j]<<""; }cout<<endl;}}3.3申请资源判定模块3.3.1功能利用银行家实现对申请的资源进行判定。3.3.2数据结构对已经存储的矩阵进行比较。3.3.3算法voidshare()//利用银行家算法对申请资源对进行判定{charch;inti=0,j=0;ch='y';cout<<"请输入要求分配的资源进程号(0-"<<M-1<<"):";cin>>i;//输入须申请的资源号cout<<"请输入进程"<<i<<"申请的资源:"<<endl;for(j=0;j<N;j++) {cout<<name[j]<<":";cin>>Request[j];//输入需要申请的资源 }for(j=0;j<N;j++) {if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错 {cout<<"进程"<<i<<"申请的资源大于它需要的资源";cout<<"分配不合理,不予分配!"<<endl;ch='n';break; }else {if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则 {cout<<"进程"<<i<<"申请的资源大于系统现在可利用的资源";cout<<"分配出错,不予分配!"<<endl;ch='n';break; } }}if(ch=='y') {changdata(i);//根据进程需求量变换资源showdata();//根据进程需求量显示变换后的资源safe();//根据进程需求量进行银行家算法判断}}3.4主函数模块3.4.1功能实现银行家算法对资源的增加、删除、修改。3.4.2数据结构对已经完成的模块进行功能集成。3.4.3算法intmain(){inti,j,number,choice,m,n,flag;charming; cout<<endl;cout<<"************************银*行*家*算*法********************"<<endl; cout<<endl;cout<<"请输入资源的种类:";cin>>n; cout<<endl;N=n;for(i=0;i<n;i++) { cout<<"资源"<<i+1<<"的名称,只限单个字符:";cin>>ming;name[i]=ming;cout<<"资源的数量:";cin>>number;Avaliable[i]=number; }cout<<endl;cout<<"请输入进程的数量:";cin>>m;M=m;cout<<"请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵):"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>Max[i][j];do { flag=0;cout<<"请输入各进程已经申请的资源量("<<m<<"*"<<n<<"矩阵):"<<endl;for(i=0;i<m;i++){for(j=0;j<n;j++) { cin>>Allocation[i][j];if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j]; }}if(flag)cout<<"申请的资源大于最大需求量,请重新输入!\n"<<endl; }while(flag);showdata();//显示各种资源safe();//用银行家算法判定系统是否安全while(choice) { cout<<"**************************银行家算法演示************************"<<endl;cout<<"1:增加资源";cout<<"2:删除资源"<<endl;cout<<"3:修改资源";cout<<"4:分配资源"<<endl;cout<<"5:增加进程";cout<<"0:离开"<<endl;cout<<"****************************************************************"<<endl;cout<<"请选择功能号:";cin>>choice;switch(choice) { case1:addresources();break;case2:delresources();break;case3:changeresources();break;case4:share();break;case5:addprocess();break;case0:choice=0;break;default:cout<<"请正确选择功能号(0-5)!"<<endl;break; } }return1;}4.实验结果及分析4.1实验结果4.2结果分析银行家算法就是在系统分配资源时,找到一个安全序列,使得进程间不会发生死锁。若发生死锁则让进程等待。4.3实验总结通过本次试验,加深了我对银行家算法的理解,掌握了如何利用银行家算法来避免死锁。通过对代码的编写也加深了我对数据结构的进一步理解。磁盘调度算法1.设计目的加深对操作系统的磁盘调度的进一步理解以及进一步的认识。加强实践能力和动手动脑能力,同时加深对磁盘调度概念的理解,同时也再一次提高了自己编程的能力。2.任务及要求2.1设计任务分析设计模拟磁盘管理系统的方法,加深对磁盘调度算法的了解以及个算法的特点。2.2设计要求分别设计出先来先服务算法,最短寻道时间优先算法,扫描算法。并分别求出它们的平均寻道时间。3.算法及数据结构3.1算法的总体思想(流程)1.先来先服务的算法,即先来的请求先被响应。FCFS算法看起来是比较合理的算法,但是当请求频率过高的时候FCFS算法的响应时间就会大大的延长,这也是最基本的算法,直接实现的是由输入的顺序来顺序的执行。2.最短寻道时间优先算法,要求访问的磁道,与当前磁头所在的磁道的距离最近,从而以使每次的寻道时间最短。3.扫描磁盘调度,该算法不考虑与访问磁道与当前磁道的距离,更优先考虑的磁头当前的移动方向,例如,当磁头正在有向外移动时,SCAN算法所考虑的下一个访问对象,应是其与访问的磁道,即在当前磁道之外,又是最近的。这样磁头逐渐的从外向里移动,直至再无更里面的磁道要访问,从而避免了出饥饿的情况。3.2先来先服务模块3.2.1功能实现磁盘调度的先来先服务调度。3.2.2数据结构用链表来存储输入的数据,即各待访问的磁道。然后遍历这个链表,依次对这个链表进行访问,从而实现先来先服务调度。3.2.3算法voidfcfs(Node*head,intc,intf)//先来先服务算法{ voidprint(Node*);Node*l;//,*m,*n;floatnum=0;l=head->next;for(inti=0;i<c;i++) { num+=abs(l->data-f);f=l->data;l=l->next; }num=num/c;cout<<"先来先服务的寻道顺序是:"<<endl;print(head);cout<<"平均寻道长度:"<<num<<endl;}3.3最短寻道时间优先模块3.3.1功能实现磁盘调度的最短寻道时间调度。3.3.2数据结构以链表来存储数据,通过循环访问链表来寻找距本次磁道的最短距离,依次这样访问。3.3.3算法、voidsstf(Node*head,intc,intf)//最短寻道时间优先算法{ voidprint(Node*);Node*p,*q,*r,*s,*l,*m;l=(Node*)malloc(sizeof(Node));l->next=NULL;m=l;q=head;p=head->next;s=head;r=head->next;floatnum=0;for(inti=0;i<c;i++) { intmin=abs(f-r->data);for(intj=0;j<c-i-1;j++) { p=p->next;q=q->next;if(abs(f-p->data)<min) { min=abs(f-p->data);r=p;s=q; } }num+=abs(f-r->data);f=r->data;s->next=r->next;r->next=NULL;m->next=r;m=r;q=head;p=head->next;s=head;r=head->next; }num=num/c;cout<<"最短寻道时间优先顺序是:"<<endl;print(l);cout<<"平均寻道长度:"<<num<<endl;}3.4扫描算法模块3.4.1功能实现磁盘调度的扫描算法。3.4.2数据结构以链表来存储数据,以开始磁道为限来分磁道,分为大于的和小于的,然后分别访问两部分,按照开始的方向进行访问。3.4.3算法voidscan(Node*head,intc,intf)//扫描算法{ voidprint(Node*);intmin,max,i=0,j=0;floatnum=0;Node*p,*q,*r,*s,*m,*n,*x,*y;r=(Node*)malloc(sizeof(Node));//存放比开始磁道小的磁道r->next=NULL;s=r;m=(Node*)malloc(sizeof(Node));//存放比开始磁道大的磁道m->next=NULL;n=m;x=(Node*)malloc(sizeof(Node));x->next=NULL;y=x;q=head;p=head->next;while(p->next!=NULL) { if(p->data-f>0) { q->next=p->next;p->next=NULL;n->next=p;n=p;p=q->next;i++; }else { q->next=p->next;p->next=NULL;s->next=p;s=p;p=q->next;j++; } }if(p->data>=f) { n->next=p;n=p;i++; }else { s->next=p;s=p;j++; }q=r;//对比开始磁道小的磁道排序p=r->next;while(q->next->next!=NULL) { q=q->next;p=q->next;max=q->data;while(p->next!=NULL) { if(p->data>max) { max=p->data;p->data=q->data;q->data=max;max=q->data; }p=p->next; } if(p->data>max) { max=p->data;p->data=q->data;q->data=max;max=q->data; } }q=m;p=m->next;while(q->next->next!=NULL) { q=q->next;p=q->next;min=q->data;while(p->next!=NULL) { if(p->data<min) { min=p->data;p->data=q->data;q->data=min;min=q->data; } p=p->next; } if(p->data<min) { min=p->data;p->data=q->data;q->data=min;min=q->data; } } x=m;p->next=r->next;y=x->next;while(y->next!=NULL) { num+=abs(f-y->data);f=y->data;y=y->next; } num+=abs(f-y->data);num=num/c;cout<<"扫描算法的顺序是:"<<endl;print(x);cout<<"平均寻道长度为:"<<num<<endl;}4.实验结果及分析4.1实验结果先来先服务算法的实验结果:最短寻道时间优先算法实验结果:扫描算法实验结果:4.2结果分析至此,此次设计基本完成了所规定的功能,但由于设计时间的仓促,CSCAN调度算法还没有实现,其他的都基本上实现了。实验结果也完全符合预想的结果,此次课程设计中我又学到了许多东西,无论在理论上还是实践上,都有了不少的提高,这对于以后的学习以及工作都有一定的帮助。

工程付款作业指引编制人编制日期审核人签发人修订记录日期修订状态修改内容修改人审核人签发人目的规范工程付款程序,明确付款审批人职责。适用范围海尔地产(集团)有限公司及下属区域公司所有工程项目付款。术语和定义3.1工程项目付款:指项目建安工程费、工程建设其它费的付款,包括合同类和非合同类的付款。3.2合同类付款包括集中采购(含授权采购)和分散采购所形成的合同付款。3.3非合同类的付款一般指政府相关部门的规费及配套费等。4.职责区域公司和涉及集团需要工程付款的部门区域公司和涉及集团需要工程付款的部门根据合同约定和工程进展情况,填写《进度、质量完成情况确认表》。4.1.2负责核实供方是否已按合同约定完成规定的工程量且达到质量要求。4.1.3负责确认按合同约定是否须付款。4.1.4负责根据合同经济条款和预结算审核情况,确认付款金额。4.1.5项目规费或配套费的支付需同时提供政府部门有关文件和规定。4.1.6负责核对并填写付款台帐。4.1.7负责填写付款审批单及汇总相关资料。4.1.8合同最终付款需同时提供《供方履约评估表》的复印件。工程管理中心负责确认区域公司提交的申请中的工程进度和工程质量。成本管理中心4.2.1负责核定区域公司提交的申请中的工程量及应付当期工程款。4.2.2负责核定应付当期工程款。4.2.3负责核对并填写部门付款台帐。4.2.4负责向财务管理中心提供月度付款审批金额汇总表。主管副总裁负责根据合同执行情况,确认是否可以付款。财务管理中心4.5.1负责根据合同经济条款和已付款情况,确认是否须付款及应付金额。4.5.2负责根据合同经济条款和已付款情况,核对成本管理中心核定结果,审批是否须付款及应付金额。4.5.3董事长/总裁批准支付后,办理费用支付。4.5.4负责核对并填写付款台帐。4.5.5负责审核预算外的工程付款董事长/总裁负责根据集团总体情况,确认是否付款。5.工作程序填写付款审批单区域公司和涉及公司需要工程付款的部门经办人会同顾问单位核实已完工程量,确认按合同约定是否须付款,填写付款台帐及付款审批单。区域公司和涉及公司需要工程付款部门的部门负责人复核经办人意见,包括施工进度、质量情况及合同执行情况,签署审批意见。分散采购的合同付款审批按区域公司付款审批制度执行。集中采购(含授权采购)的合同付款审批按下述审批流程执行。5.3.1审批流程(月度资金预算内)5.3.1.1策划设计类的合同付款需集团策划、设计主管部门(投资发展中心、研发设计中心、工程管理中心)审核确认;5.3.1.2成本管理中心核定当期已完工程量并根据合同约定核定当期应付款,签署审批意见;a、100万以内的付款,集团工程管理中心、成本管理中心审核后,区域公司履行付款手续。b、100万以上的付款,集团工程管理中心、成本管理中心审核签署审批意见后提交总裁,总裁根据集团总体情况,签署审批意见后区域公司方可履行支付手续。5.3.2付款审批流程(月度资金预算外)5.3.2.1策划设计类的合同付款由集团策划、设计主管部门(投资发展中心、研发设计中心、工程管理中心)审核确认;5.3.2.2成本管理中心核定当期已完工程量并根据合同约定核定当期应付款,签署审批意见;5.3.2.3财务管理中心经办人根据合同经济条款和已付款情况,签署审批意见,财务管理中心总经理确认;5.3.2.4主管副总裁根据财务总体情况,签署审批意见;5.3.2.5董事长/总裁根据集团总体情况,签署审批意见。5.3.2.6区域公司收到集团审核意见后,方可履行付款手续。5.4成本管理中心每月汇总付款审批金额,整理成表报送财务管理中心。财务管理中心依此表为依据核对月度资金付款额度。5.5非合同类的付款。区域公司需提供政府部门有关文件和规定,报集团成本管理中心审核后方可履行付款手续。a、100万以内的非合同类付款,集团相关部门及工程管理中心、成本管理中心审核后,区域公司履行付款手续b、100万以上的非合同类付款,集团相关部门及工程管理中心、成本管理中心审核后签署审批意见后提交总裁,总裁根据集团总体情况,签署审批意见后区域公司方可履行支付手续。5.6合同除保修金外的最后付款需同时提供《供方履约评估表》的复印件及成本管理中心的确认单。5.7营销费用的付款按照《营销费

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论