当前位置:文档之家› 操作系统原理高优先权调度算法

操作系统原理高优先权调度算法

操作系统原理高优先权调度算法
操作系统原理高优先权调度算法

《操作系统原理》

课程设计报告书

题目:高优先权调度算法

学号:

学生姓名:

专业:

指导教师:

5月30日

目录

1 功能描述 (1)

2 系统设计 (1)

2.1总体设计 (1)

2.2详细设计 (1)

2.3程序运行流程图 (1)

3 系统实现 (2)

3.1程序代码 (3)

4 系统测试与分析 (7)

4.1程序运行开始界面见图2和图3 (7)

4.2高优先权程序正常运行 (8)

教师评分表 (13)

1 功能描述

先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。高优先权优先调度算法可以使紧迫型作业进入系统后能得到优先处理。此算法常被用于批处理系统,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可用于实时系统。该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业装入内存。当用于进程调度时,该算法是把处理机分配给就绪队列中优先权最高的进程。

2 系统设计

2.1总体设计

验内容利用C语言来实现对N个进程采用动态优先权优先算法的进程调度。优先数改变的原则:进程每运行一个时间片,优先数减1。

2.2详细设计

1.在运行界面里输入进程名称,进程优先级和进程时间;

2.每运行一个时间单位,作业的优先权级数减一;

3.在运行出的用户界面中显示初始作业名,作业状态,优先权级数,需要服务的时间,已经运行的时间;

4.每次调度前后显示作业队列;

2.3程序运行流程图

程序运行流程图见流程图1

3 系统实现

用c++编写的高优先权调度算法算法。

3.1程序代码

程序源代码如下:

#include

#include

struct PCB{

char p_name[20];

int p_priority;

int p_needTime;

int p_runTime;

char p_state;

struct PCB* next;

};

void HighPriority();

void RoundRobin();

void Information();

char Choice();

struct PCB* SortList(PCB* HL);

int main()

{

Information();

char choice = Choice();

switch(choice)

{

case '1':

system("cls");

HighPriority();

break;

default:

break;

}

system("pause");

return 0;

}

void Information()

{

printf(" 按回车键进入演示程序");

getchar();

system("cls");

}

char Choice()

{

printf("\n\n");

printf(" 1.演示最高优先数优先算法。");

printf(" 按1继续:");

char ch = getchar();

return ch;

system("cls");

}

void HighPriority()

{

struct PCB *processes, *pt;

//pt作为临时节点来创建链表,使用for语句,限制进程数为5个processes = pt = (struct PCB*)malloc(sizeof(struct PCB));

for (int i = 0; i != 5; ++i)

{

struct PCB *p = (struct PCB*)malloc(sizeof(struct PCB));

printf("进程号No.%d:\n", i);

printf("输入进程名:");

scanf("%s", p->p_name);

printf("输入进程优先数:");

scanf("%d", &p->p_priority);

printf("输入进程运行时间:");

scanf("%d", &p->p_needTime);

p->p_runTime = 0;

p->p_state = 'W';

p->next = NULL;

pt->next = p;

pt = p;

printf("\n\n");

}

getchar(); //接受回车

//processes作为头结点来存储链表

processes = processes->next;

int cases = 0;

struct PCB *psorted = processes;

while (1)

{

pt = processes;

//对链表按照优先数排序

//psorted用来存放排序后的链表

psorted = SortList(psorted);

printf("The execute number: %d\n\n", cases);

printf("**** 当前正在运行的进程是:%s\n", psorted->p_name);

psorted->p_state = 'R';

printf("qname state super ndtime runtime\n");

printf("%s\t%c\t%d\t%d\t%d\t\n\n", psorted->p_name, psorted->p_state, psorted->p_priority, psorted->p_needTime, psorted->p_runTime);

pt->p_state = 'W';

psorted->p_runTime++;

psorted->p_priority--;

printf("**** 当前就绪状态的队列为:\n\n");

//pt指向已经排序的队列

pt = psorted->next;

while (pt != NULL)

{

printf("qname state super ndtime runtime\n");

printf("%s\t%c\t%d\t%d\t%d\t\n\n", pt->p_name, pt->p_state, pt->p_priority, pt->p_needTime, pt->p_runTime);

pt = pt->next;

}

//pt指向已经排序的链表,判断链表是否有已用时间啊等于需要时间的

pt = psorted;

struct PCB *ap;

ap = NULL; //ap指向pt的前一个节点

while (pt != NULL)

{

if (pt->p_needTime == pt->p_runTime)

{

if (ap == NULL)

{

pt = psorted->next;

psorted = pt;

}

else

ap->next = pt->next;

}

ap = pt;

pt = pt->next;

}

if (psorted->next == NULL)

getchar();

}

}

struct PCB* SortList(PCB* HL)

{

struct PCB* SL;

SL = (struct PCB*)malloc(sizeof(struct PCB));

SL = NULL;

struct PCB* r = HL;

while (r != NULL)

{

struct PCB* t = r->next;

struct PCB* cp = SL;

struct PCB* ap = NULL;

while (cp != NULL)

{

if (r->p_priority > cp->p_priority)

break;

else

{

ap = cp;

cp = cp->next;

}

}

if (ap == NULL)

{

r->next = SL;

SL = r;

}

else

{

r->next = cp;

ap->next = r;

}

r = t;

}

return SL;

}

4 系统测试与分析

经过测试运行正常,可以达到预期的输出结果。

4.1程序运行开始界面见图2和图3

4.2高优先权程序正常运行

输入进程名输入5个进程名、优先数、运行时间,然后程序自动从就绪队列中选择优先级高的进程运行优先执行,一直到所有进程全部运行完毕。具体的见图4—图12。

9

教师评分表

动态高优先权优先

《操作系统》课程实验报告实验名称:动态高优先权优先算法 姓名:王智昆 学号:541407110243 地点:4#302 指导老师:张旭 专业班级:运维1402

一、实验目的: 1、熟悉并掌握动态高优先权优先算法。 2、用C语言编程实现动态高优先权优先算法 二、实验内容:用高级语言模拟实现动态分区存储管理,要求: 模拟实现动态高优先权优先(若数值越大优先权越高,每运行一个时间单位优先权-n,若数值越小优先权越高,没运行一个时间单位优先权+n),具体如下: 设置作业体:作业名,作业的到达时间,服务时间,初始优先权,作业状态(W ——等待,R——运行,F——完成),作业间的链接指针 作业初始化:由用户输入作业名、服务时间、初始优先权进行初始化,同时,初始化作业的状态为W。 显示函数:在作业调度前、调度中和调度后进行显示。 排序函数:对就绪状态的作业按照优先权排序。优先权相同时进入等待队列时间早的作业在前。注意考虑到达时间 调度函数:每次从等待队列队首调度优先权最高的作业执行,状态变化。并在执行一个时间单位后优先权变化,服务时间变化,状态变化。当服务时间为0时,状态变为F。 删除函数:撤销状态为F的作业。 #include #include struct PCB{ charp_name[20]; intp_priority; intp_needTime; intp_runTime; charp_state; struct PCB* next; }; voidHighPriority(); void Information(); char Choice(); struct PCB* SortList(PCB* HL); int main() { printf(" 《演示最高优先数优先算法》\n\n"); HighPriority(); return 0; } voidHighPriority()

(售后服务)操作系统编程进程或作业先来先服务高优先权按时间片轮转调度算法

(售后服务)操作系统编程进程或作业先来先服务高优先权按时间片轮转调度 算法

湖南农业大学科学技术师范学院 学生实验报告

(高优先权流程图) (按时间片轮转调度) 程序说明及实现: 1)先来先服务调度算法: 高响应比优先实现进程调度.(用C语言实现), 2)优先级调度程序: 该程序由主程序、构造队列子程序、打印子程序、运行子程序构成。 3)时间片轮转法程序: 于此程序中由于程序比较小,未进行分模块设计。直接采用单壹模块。 1先来先服务 #include floatt,d;/*定义俩个全局变量*/ struct/*定义壹个结构体数组,包括进程的信息*/ { intid; floatArriveTime; floatRequestTime; floatStartTime; floatEndTime; floatRunTime; floatDQRunTime; intStatus; }arrayT ask[4];/*定义初始化的结构体数组*/ GetTask()/*给结构体数组赋值,输入到达,服务时间*/ {inti; floata; for(i=0;i<4;i++) {arrayT ask[i].id=i+1; printf("inputthenumber"); printf("inputthetheArriveTimeofarrayT ask[%d]:",i);/*用户输入进程的时间,初始为零*/ scanf("%f",&a); arrayT ask[i].ArriveTime=a; printf("inputtheRequestTimeofarrayT ask[%d]:",i); scanf("%f",&a); arrayT ask[i].RequestTime=a; arrayT ask[i].StartTime=0; arrayT ask[i].EndTime=0; arrayT ask[i].RunTime=0;

设计一个按优先数调度算法实现处理器调度的程序

题目:设计一个按优先数调度算法实现处理器调度的程序 提示: (1)假定系统有5个进程,每个进程用一个PCB来代表。PCB的格式为: 进程名、指针、要求运行时间、优先数、状态。 进程名——P1~P5。 指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。 要求运行时间——假设进程需要运行的单位时间数。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 状态——假设两种状态,就绪,用R表示,和结束,用E表示。初始状态都为就绪状态。 (2) 每次运行之前,为每个进程任意确定它的“优先数”和“要求运行时间”。 (3) 处理器总是选队首进程运行。采用动态改变优先数的办法,进程每运行1次,优先 数减1,要求运行时间减1。 (4) 进程运行一次后,若要求运行时间不等于0,则将它加入队列,否则,将状态改为“结 束”,退出队列。 (5) 若就绪队列为空,结束,否则,重复(3)。 2.程序中使用的数据结构及符号说明: #define num 5//假定系统中进程个数为5 struct PCB{ char ID;//进程名 int runtime;//要求运行时间 int pri;//优先数 char state; //状态,R-就绪,F-结束 }; struct PCB pcblist[num];//定义进程控制块数组 3.流程图: (1)主程序流程图: (2)子程序init()流程图:

(3) 子程序max_pri_process()流程图:

(4)子程序show()流程图:

(5)子程序run()流程图:

《操作系统原理》算法总结

《操作系统原理》算法总结 一、进程(作业)调度算法 ●先来先服务调度算法(FCFS):每次调度是从就绪队列中,选择一个最先 进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。特点:利于长进程,而不利于短进程。 ●短进程(作业)优先调度算法(SPF):它是从就绪队列中选择一个估计运 行时间最短的进程,将处理器分配给该进程,使之占有处理器并执行,直到该进程完成或因发生事件而阻塞,然后退出处理器,再重新调度。 ●时间片轮转调度算法:系统将所有的就绪进程按进入就绪队列的先后次 序排列。每次调度时把CPU分配给队首进程,让其执行一个时间片,当时间片用完,由计时器发出时钟中断,调度程序则暂停该进程的执行,使其退出处理器,并将它送到就绪队列的末尾,等待下一轮调度执行。 ●优先数调度算法:它是从就绪队列中选择一个优先权最高的进程,让其 获得处理器并执行。 ●响应比高者优先调度算法:它是从就绪队列中选择一个响应比最高的进 程,让其获得处理器执行,直到该进程完成或因等待事件而退出处理器为止。特点:既照顾了短进程,又考虑了进程到达的先后次序,也不会使长进程长期得不到服务,因此是一个比较全面考虑的算法,但每次进行调度时,都需要对各个进程计算响应比。所以系统开销很大,比较复杂。 ●多级队列调度算法 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi)

作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 二、存储器连续分配方式中分区分配算法 ?首次适应分配算法(FF):对空闲分区表记录的要求是按地址递增的 顺序排列的,每次分配时,总是从第1条记录开始顺序查找空闲分区 表,找到第一个能满足作业长度要求的空闲区,分割这个空闲区,一 部分分配给作业,另一部分仍为空闲区。 ?循环首次适应算法:每次分配均从上次分配的位置之后开始查找。 ?最佳适应分配算法(BF):是按作业要求从所有的空闲分区中挑选一个 能满足作业要求的最小空闲区,这样可保证不去分割一个更大的区域, 使装入大作业时比较容易得到满足。为实现这种算法,把空闲区按长 度递增次序登记在空闲区表中,分配时,顺序查找。 三、页面置换算法 ●最佳置换算法(OPT):选择以后永不使用或在最长时间内不再被访问 的内存页面予以淘汰。 ●先进先出置换算法(FIFO):选择最先进入内存的页面予以淘汰。 ●最近最久未使用算法(LRU):选择在最近一段时间内最久没有使用过 的页,把它淘汰。 ●最少使用算法(LFU):选择到当前时间为止被访问次数最少的页转换。 四、磁盘调度

动态优先权算法模拟-操作系统课程设计

实用标准文档 东北大学分校 计算机与通信工程学院 操作系统课程设计 设计题目动态优先权算法模拟 专业名称计算机科学与技术 班级学号 学生 指导教师 设计时间

课程设计任务书 专业:计算机科学与技术学号:学生(签名): 设计题目:动态优先权算法模拟 一、设计实验条件 综合楼808 二、设计任务及要求 模拟单处理机环境下的进程调度模型,调度采用基于动态优先权的调度算法。 三、设计报告的容 1.设计题目与设计任务 设计题目:动态优先权算法模拟 设计任务:模拟单处理机环境下的进程调度模型,调度采用基于动态优先权的调度算法。 2.前言(绪论) 在操作系统中调度算法的实质是一种资源的分配,因而调度算法是指“根据系统资源分配策略所规定的资源分配算法”。对于不同的操作系统和系统目标,通

常采用不同的调度算法。 为了照顾紧迫作业,使之在进入系统后便获得优先处理,引入了最高优先权先调度算法。在作为进程调度算法时,该算法是把处理机分配给就绪队列优先权最高的进程。这可以分为抢占式优先权算法和非抢占式优先权算法。 对于最高优先权优先调度算法,其关键在于:它是使用静态优先权还是动态优先权,以及如何确定进程的优先权。本次课程设计所实现的算法就是动态优先权算法的抢占式优先权调度算法和非抢占式动态优先权算法。 动态优先权拥有其特有的灵活优点,同时,若所有的进程都具有相同的优先权初值,则显然是最先进入就绪队列的进程,将因其动态优先权变得高而优先获得处理机,此即FCFS算法。若所有的就绪进程具有各不相同优先权初值,那么,对于优先权初值低的进程,在等待了足够长的时间后,其优先权便可能升为最高,从而获得处理机。当采用抢占式优先权调度算法时,如果规定当前进程的优先权以一定速率下降,则可防止一个长作业长期垄断处理机。 这里,我们采用高响应比来决定每个进程的优先权。 3.设计主体(各部分设计容、分析、结论等) 【设计容】 动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。 非抢占式优先权调度算法。在这种方式下,系统一旦把处理机分配给就绪队

操作系统原理短作业优先算法报告附源代码

中国地质大学(北京) 操作系统原理 实习报告 实习题目:1、 2、 实习人员:学号姓名(组长) 学号姓名

一、题目分析 在批处理系统中,短作业优先算法是一种比较好的算法,其主要的不足之处是长作业的运行得不到保证。于是我们想到了一种办法解决这个问题,就是引用动态优先权、并使作业的优先级随着等待时间的增加而以速率a提高,长作业在等待一定的时间后,必然有机会分配到处理机,这样长作业也得到了运行。 设计并实现一个采用高响应比算法的进程调度演示程序,响应比 R 定义如下:RWT/T1W/T 其中 T 为该作业估计需要的执行时间,为作业在后备状态队列中的等待时 W间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中 R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T 也就随着增加,也就有机会获得调度执行。这种算法是介于 FCFS 和 SJF 之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用 HRRN 方式时其吞吐量将小于采用 SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。 二、数据结构 结构体数组path[k]实现对进程响应比的计算 Path[max] 实现对进程响应比的排序 Path[ii] 实现程序的各阶段运行状况的输出 三、算法流程图 程序设计流程图

高响应比函数执行过程流程图

四、重难点分析 计算每一个进程的动态优先权,需要在每执行一个进程之后计算一遍未执行进程的优先权,从中选出优先权最高的一个执行。 五、运行测试(截图) 六、分工 编码: 实验报告: 七、总结 本次演算实验主要对最高响应比算法的理解和对进程调度的功能以及进程调度算法有了深入的理解。在这次的课程设计中,计算每一个进程的动态优先权,需要在每执行一个进程之后计算一遍未执行进程的优先权,从中选出优先权最高的一个执行,因为疏忽

使用动态优先权与时间片轮转的进程调度算法的模拟

计算机与信息工程学院设计性实验报告 一、实验目的 通过动态优先权调度算法的模拟加深进程概念和进程调度过程的理解。二、实验仪器或设备 虚拟机 三、总体设计(设计原理、设计方案及流程等) 实验内容 (1)在Linux下用C语言编程模拟N个进程采用高优先权优先(要求采用 动态优先权)和简单时间片轮转两种进程调度算法。为了清楚地观察每 个进程的调度过程,程序应将每个时间片内的进程情况显示出来; (2)进程控制块是进程存在的唯一标志,因此,在模拟算法中每一个进程用 一个进程控制块PCB来代表,PCB用一结构体表示。包括以下字段: ●进程标识数id,或者进程的名称name; ●进程优先数priority,并规定优先数越大的进程,其优先权越高; ●进程需要运行的CPU时间ntime; ●进程的运行时间rtime; ●进程状态state; ●队列指针next,用来将PCB排成队列。 (3)进程在运行过程中其状态将在就绪、执行、阻塞(可选)、完成几种状态 之间转换,同时进程可能处于不同的队列中,如就绪队列、阻塞队列(可 选)。在两种调度算法中,考虑分别可以选择什么样的队列及如何实现进 程的入队、出队操作; (4)为了便于处理,优先权调度每次也仅让进程执行一个时间片,若在一个 时间片内未运行结束,调整进程优先级将其插入就绪队列,进行新一轮

调度; (5)优先数改变原则: ●进程每运行若一个时间单位,优先数减3; ●进程在就绪队列中呆一个时间片,优先数增加1。(仅供参考,合理 即可) (6)优先权调度中,对于遇到优先权一致的情况,可采用FCFS策略解决; (7)由于是模拟进程调度,所以,对被选中的进程并不实际启动运行,而是 修改进程控制块的相关信息来模拟进程的一次运行; (8)为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情 况显示出来,参照格式如下: id cputime needtime priority(count) state 0 0 2 48 ready 1 0 3 47 ready 2 0 6 44 ready 3 0 5 45 ready 4 0 4 46 ready 简单时间片轮转调度模拟程序见roundrobin.c,优先权调度大家请参考时间片轮转自行实现,有自己想法的同学可以按照自己的思路独立完成实验,而不用参考roundrobin.c程序。 四、实验步骤(包括主要步骤、代码分析等) #include "stdio.h" #include #define getpch(type) (type*)malloc(sizeof(type)) struct pcb { char name[10]; char state; int count; int ntime; int rtime; int priority; struct pcb* link; }*ready=NULL,*tail=NULL,*p; typedef struct pcb PCB; int slice;

优先级调度算法实验报告

优 先 级 调 度 算 法 实 验 报 告 院系:****************学院班级:*********** 姓名:*** 学号:************

一、实验题目:优先级调度算法 二、实验目的 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度程序,以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先级算法的具体实施办法。 三、实验内容 1.设计进程控制块PCB的结构,通常应包括如下信息: 进程名、进程优先数(或轮转时间片数)、进程已占用的CPU时间、进程到完成还需要的时间、进程的状态、当前队列指针等。 2.编写优先级调度算法程序 3.按要求输出结果。 四、实验要求 每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH),并假定初始状态为就绪状态。(一)进程控制块结构如下: NAME——进程标示符 PRIO/ROUND——进程优先数 NEEDTIME——进程到完成还需要的时间片数 STATE——进程状态 NEXT——链指针 注: 1.为了便于处理,程序中进程的的运行时间以时间片为单位进行

计算; 2.各进程的优先数或,以及进程运行时间片数的初值,均由用户在程序运行时给定。 (二)进程的就绪态和等待态均为链表结构,共有四个指针如下:RUN——当前运行进程指针 READY——就需队列头指针 TAIL——就需队列尾指针 FINISH——完成队列头指针 五、实验结果:

六、实验总结: 首先这次实验的难度不小,它必须在熟悉掌握数据结构的链表和队列的前提下才能完成,这次实验中用了三个队列,就绪队列,执行队列和完成队列,就绪队列中的优先级数是有序插入的,当进行进程调度的时候,需要先把就绪队列的队首节点(优先级数最大的节点)移入执行队列中,当执行进程结束后,判断该进程是否已经完成,如果已经完成则移入完成队列,如果没有完成,重新有序插入就绪队列中,这就是这次实验算法的思想。 附录(算法代码):

处理器调度之动态优先数调度算法

1 处理机调度 1.1 实验内容及要求 实验内容:按优先数调度算法实现处理器调度。 实验要求:能接受键盘输入的进程数、进程标识、进程优先数及要求运行时间,能显示每次进程调度的情况:运行进程、就绪进程和就绪进程的排列情况。 1.2 实验目的 本实验模拟在单处理器环境下的处理器调度,加深了解处理器调度工作。 1.3 实验环境 本实验的设计基于Windows7操作系统DevC++5.11环境,用C语言实现编程。 1.4 实验思路 (1) 每个进程用一个PCB来代表。PCB的结构为: 进程名——作为进程标识。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 要求运行时间——假设进程需要运行的单位时间数。 状态——假设两种状态:就绪和结束,用R表示就绪,用E表示结束。 初始状态都为就绪状态。 指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。 (2) 开始运行之前,为每个进程确定它的“优先数”和“要求运行时间”。通过键盘输入这些参数。 (3) 处理器总是选择队首进程运行。采用动态改变优先数的办法,进程每运

行1次,优先数减1,要求运行时间减1。 (4) 进程运行一次后,若要求运行时间不等于0,则将它加入就绪队列,否则,将状态改为“结束”,退出就绪队列。 (5) 若就绪队列为空,结束,否则转到(3)重复。 1.5 数据结构与全局变量 typedef struct pcb{ int pname;//进程名 int priority;//优先级 int runTime;//所需时间 int state;//状态 struct pcb* next;//下一个进程控制块 }PCB; //进程控制块 int num;//存储进程数 PCB readyHead;//头结点,不存储进程 PCB *readyEnd;//指向尾结点的指针 1.6 函数说明 (1)主函数main() 输入进程数并调createProcess()初始化进程;若有进程,则依次调用sortProcess()、runProcess()、printProcessLink()和printProcessInfo()。(2)进程创建函数createProcess() 输入进程标识、优先级和运行时间进行初始化。 (3)进程排序函数sortProcess() 用冒泡排序算法根据进程的优先级进行降序排序,每次排序之后优先级最高的进程放在就绪队列首。 (4)进程运行函数runProcess() 将数组首的进程优先级和所需时间减1; 若剩余所需时间为0,则PCB状态标记为E(结束)。

操作系统原理复习提纲

操作系统原理复习大纲 考试范围 一、操作系统概论 1、操作系统的地位及作用 1.1操作系统的地位 1.2操作系统的作用 2、操作系统的功能 2.1单道系统与多道系统 2.2操作系统的功能 3、操作系统的分类 3.1批处理操作系统 3.2分时操作系统 3.3实时操作系统 4、Linux操作系统概述 4.1 Linux的发展历史 4.2 Linux 与GNU 4.3 Linux的性能 4.4 Linux的技术特点 4.5 Linux内核的版本 4.6 Linux内核的组成及功能 二、进程管理 1、进程的基本概念 1.1程序的顺序执行 1.2程序的并发执行 1.3进程的定义和特性 2、进程状态和进程实体 2.1进程的状态及转换 2.2进程的实体 3、进程调度与进程控制 3.1进程调度的功能 3.2进程调度性能准则 3.3进程调度方式 3.4进程控制 4、进程的互斥与同步 4.1进程的互斥 4.2进程的同步 5、P、V操作 5.1 P、V 操作原语 5.2用PV操作实现进程互斥 5.3用PV操作实现进程同步 6、死锁 6.1死锁的产生

6.2发生死锁的必要条件 6.3死锁的预防 6.4死锁的避免 6.5死锁的检测和恢复 7、Linux进程概述 7.1 Linux进程的组成 7.2 Linux进程的状态 7.3核心态和用户态 7.4进程空间和系统空间 8、Linux的进程调度 8.1 Linux进程调度方式 8.2 Linux进程调度依据 8.3 Linux进程调度的加权处理8.4 Linux进程调度方法 8.5进程调度时机 9、Linux进程的创建和执行9.1 Linux进程的族亲关系 9.2 Linux进程的创建 9.3进程的执行 10、Linux进程的睡眠和唤醒10.1等待队列及操作 10.2进程的等待 10.3进程的睡眠 10.4进程的唤醒 三、存储管理 1、存储管理的目的与功能 2、地址重定位 2.1地址重定位 2.2静态地址重定位 2.3动态地址重定位 3、分区存储管理 3.1固定分区管理 3.2可变分区管理 3.3分区管理的存储保护 4、分页存储管理 4.1简单分页存储管理 4.2逻辑地址和物理地址 4.3页表 4.4快表 4.5内存空间管理 4.6存储保护 5、内存扩充技术 5.1覆盖技术

实验二——动态高优先权优先调度算法

《操作系统》课程实验报告实验名称:动态分区存储管理 姓名:王子瑜 学号: 541413450235 地点:四教楼 指导老师:刘放美 专业班级:软件工程(测试技术14-02) 实验成绩:

一、实验要求: 熟悉并掌握动态分区分配的各种算法。 熟悉并掌握动态分区中分区回收的各种情况,并能够实现分区合并。 二、实验内容: 用高级语言模拟实现动态分区存储管理,要求: 1、分区分配算法至少实现首次适应算法、最佳适应算法和最坏适应算法中的至 少一种。熟悉并掌握各种算法的空闲区组织方式。 2、分区的初始化——可以由用户输入初始分区的大小。(初始化后只有一个空 闲分区,起始地址为0,大小是用户输入的大小) 3、分区的动态分配过程:由用户输入作业号和作业的大小,实现分区过程。 4、分区的回收:用户输入作业号,实现分区回收,同时,分区的合并要体现出 来。(注意:不存在的作业号要给出错误提示!) 5、分区的显示:任何时刻,可以查看当前内存的情况(起始地址是什么,大小 多大的分区时空闲的,或者占用的,能够显示出来) 要求考虑:(1)内存空间不足的情况,要有相应的显示; (2)作业不能同名,但是删除后可以再用这个名字; (3)作业空间回收是输入作业名,回收相应的空间,如果这个作业名不存在,也要有相应的提示。 三、实验代码 #include #include #define SIZE 640 // 内存初始大小 #define MINSIZE 5 // 碎片最小值 enum STATE { Free, Busy }; struct subAreaNode { int addr; // 起始地址 int size; // 分区大小

单调速率调度算法RMS

余蓝涛1 (天津大学精密仪器与光电子工程学院天津 300072 ) 摘要: 嵌入式系统对强大实时处理能力的需求和相对紧张的内存及内核资源的现实,对嵌入式操作系统任务调度提出了较高的要求。因此任务调度的算法的分析,实现和优化,对实现嵌入式系统的实时性有着重大的意义。从算法提出的理论基础出发,深入分析了经典的单调速率调度算法的思想,特点,具体实现并重点评价了该算法的优点和局限性。 关键词:单调速率调度算法实时嵌入式系统 Abstract: The zest for powerful real-time processing of embedded system and the reality of relatively scare memory and kernel resource pave way for the high request for task scheduling. Therefore, the analysis, implementation and optimization of task scheduling algorithm have a vast meaning for the real-time system. Based on theoretical basis of classic rate-monotonic scheduling algorithm, this paper not only analyzes fundamental thought, characteristics, practical implementation of this classic algorithm in depth, but also rate its advantages and disadvantages. Key words: Rate-monotonic Scheduling, Algorithm, Real-time, Embedded System 一,引言 现在嵌入式系统得到高速的发展。它的发展为几乎所有的电子产品注入了新的活力。它在国民经济各领域和我们日常生活中发挥了越来越重要的作用。 嵌入式系统在航天、军事、工控以及家电等方面得到了广泛应用。囿于体积,能耗,价格等方面的约束,嵌入式系统处理器速度比较慢,存储器容量也有限。而传统的操作系统为了取得较高的性能,要求硬件设备具有强大的处理能力,大容量的存储能力以及对网络的支持功能,这使得传统的操作系统难以简单地移植到嵌入式系统中。 这就导致了嵌入式操作系统由于受到系统的限制,往往内存资源都非常的有限,要求操作系统的内核都非常的精炼,对于系统中的资源操作系统内核需要进行统一的分配和调度。 嵌入式操作系统调度策略一直以来都是嵌入式操作系统的研究 中的一个热点。任务调度是嵌入式操作系统内核的关键部分,如何进行任务调度,使得各个任务能在其截止期限内得以完成是嵌入式操作系统的一个重要的研究领域。 二,嵌入式实时操作系统 绝大部分嵌入式系统都是实时系统,而且多是实时多任务系统。所谓“实时”,是指系统的正确性不仅仅依赖于计算的逻辑结果而且依赖于结果产生的时间[1][6]。结果产生的时间就是通常所说的截止期限(deadline),描述系统实时性的指标主要有: a,对紧急事件可预见性的快速响应; 1作者简介:余蓝涛(1991-)江西省人天津大学精密仪器与光电子工程学院测控技术与仪器本科生学号:79

操作系统原理知识点总结

第一章绪论 1、操作系统是一组控制和管理计算机硬件和软件资源、合理的对各类作业进行调度以方便用户的程序集合 ※2、操作系统的目标:方便性、有效性、可扩展性、开发性 ※3、操作系统的作用:作为计算机硬件和用户间的接口、作为计算机系统资源的管理者、作为扩充机器 4、单批道处理系统:作业处理成批进行,内存中始终保持一道作业(自动性、顺序性、单道性) 5、多批道处理系统:系统中同时驻留多个作业,优点:提高CPU利用率、提高I/O设备和内存利用率、提高系统吞吐量(多道性、无序性、调度性) 6、分时技术特性:多路性、交互性、独立性、及时性,目标:对用户响应的及时性 7、实时系统:及时响应外部请求,在规定时间内完成事件处理,任务类型:周期性、非周期性或硬实时任务、软实时任务 ※8、操作系统基本特性:并发、共享、虚拟、异步性 并行是指两或多个事件在同一时刻发生。 并发是两或多个事件在同一时间间隔内发生。 互斥共享:一段时间只允许一个进程访问该资源 同时访问:微观上仍是互斥的 虚拟是指通过某种技术把一个物理实体变为若干个逻辑上的对应物。 异步是指运行进度不可预知。 共享性和并发性是操作系统两个最基本的特征 ※9、操作系统主要功能:处理机管理、存储器管理、设备管理、文件管理、用户管理 第二章进程的描述和控制 ※1、程序顺序执行特征:顺序性、封闭性、可再现性 ※2、程序并发执行特征:间断性、失去封闭性、不可再现性 3、前趋图:有向无循环图,用于描述进程之间执行的前后关系 表示方式: (1)p1--->p2 (2)--->={(p1,p2)| p1 必须在p2开始前完成} 节点表示:一条语句,一个程序段,一进程。(详见书P32) ※4、进程的定义: (1)是程序的一次执行过程,由程序段、数据段、程序控制块(PBC) 三部分构成,总称“进程映像” (2)是一个程序及其数据在处理机上顺序执行时所发生的活动 (3)是程序在一个数据集合上的运行过程 (4)进程是进程实体的运行过程,是系统进行资源分配和调度的 一个独立单位 进程特征:动态性、并发性、独立性、异步性 由“创建”而产生,由“调度”而执行;由得不到资源而“阻塞”,

动态优先级调度算法的特点与实现

动态优先级调度算法的特点与实现 本文从实时操作系统的调度功能入手,简单介绍了实时调度算法的分类和种类,并主要讨论动态优先级调度算法的特点和实现。接下来本文介绍了两类动态优先级调度算法:截止时间优先调度算法和最短空闲时间优先调度算法的定义及实现方式。然后将静态调度与动态调度进行比较,突出动态优先级调度的特点,同时指出其可能导致的优先级反转、死锁等不良后果。然后具体介绍了优先级反转的定义以及解决该问题的两种方案:采用优先级继承协议与采用优先级天花板协议。 在嵌入式的实时操作系统中,调度是一个非常重要的功能,用来确定多任务环境下任务执行的顺序和在获得CPU资源后能够执行的时间长度。 操作系统通过一个调度程序(Scheduler)来实现调度功能。调度程序以函数的形式存在,用来实现操作系统的调度算法。调度程序本身并不是一个任务,而是一个函数调用,可在内核的各个部分进行调用。调度程序是影响系统性能(如吞吐率、延迟时间等)的重要部分。在设计调度程序是、时,通常要综合考虑如下因素: ●CPU的使用率(CUP utilization); ●输入/输出设备的吞吐率; ●响应时间(responsive time); ●公平性; ●截止时间。 这些因素之间具有一定的冲突性。比如可通过让更多的任务处于就绪状态来提高CPU 的使用率,但这显然会降低系统的响应时间。因此,调度程序的设计需要优先考虑最重要的需求,然后在各种因素之间进行折中处理。 可以把一个调度算法(Scheduling Algorithms)描述为是在一个特定时刻用来确定将要运行的任务的一组规则。从1973年Liu和Layland开始关于实时调度算法的研究工作以来

操作系统编程进程或作业先来先服务、高优先权、按时间片轮转调度算法

操作系统编程进程或作业先来先服务、高优先权、按时间 片轮转调度算法 湖南农业大学科学技术师范学院 学生实验报告 姓名: 汤黎波年级专业班级 06级计算机教育班日期 2008 年 12 月 8 日 成绩 验证设计编程进程或作业先来先服务、 综合创新实验类型课程名称计算机操作系统实验名称高优先权、按时间片轮转调度 算法(4学时) 【实验目的、要求】 实验目的:(1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 (2)了解Windows2000/XP中进程(线程)的调度机制。 (3)学习使用Windows2000/XP中进程(线程)调度算法,掌握相应的与调度有关的Win32 API 函数。 实验要求:(1)经调试后程序能够正常运行。 (2)采用多进程或多线程方式运行,体现了进程或作业先来先服务、高优先权、按时间片轮转 调度的关系。 (3)程序界面美观。

【实验内容】 在Windows XP、Windows 2000等操作系统下,使用C语言,利用相应的WIN32 API函数,编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法。 【实验环境】(含主要设计设备、器材、软件等) Pc电脑一台 【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、 数据等) 定义: 1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排 在就绪队列的后面, 那么先来先服务(FCFS:first come first service)总是把当前处于就绪队列 之首的那个进程 调度到运行状态。 2)轮转法就是按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各 进程机会均等的调度方法。 3)优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的 下一个CPU周期的长短和其他因素。 实验步骤: (1)需求分析:了解基本原理,确定程序的基本功能,查找相关资料,画出基本的数据流图; (2)概要设计:确定程序的总体结构、模块关系和总体流程; (3)详细设计:确定模块内部的流程和实现算法;

优先级调度算法

优先级调度算法 1、调度算法 考虑到紧迫型作业进入系统后能得到优先处理,引入了高优先级优先调度算法。 优先级调度的含义: (1)当该算法用于作业调度时,系统从后背作业队列中选择若干个优先级最高的,且系统能满足资源要求的作业装入内存运行;(2)当该算法用于进程调度时,将把处理机分配给就绪进行队列中优先级最高的进程。 2、调度算法的两种方式 非抢占式优先级算法:在这种调度方式下,系统一旦把处理机分配给就绪队列中优先级最高的进程后,该进程就能一直执行下去,直至完成;或因等待某事件的发生使该进程不得不放弃处理机时,系统才能将处理机分配给另一个优先级高的就绪队列。 抢占式优先级调度算法:在这种调度方式下,进程调度程序把处理机分配给当时优先级最高的就绪进程,使之执行。一旦出现了另一个优先级更高的就绪进程时,进程调度程序就停止正在执行的进程,将处理机分配给新出现的优先级最高的就绪进程。常用于实时要求比较严格的实时系统中,以及对实时性能要求高的分时系统。 3、优先级的类型 进程的优先级可采用静态优先级和动态优先级两种,优先级可由用户自定或由系统确定。

静态优先级调度算法 含义:静态优先级是在创建进程时确定进程的优先级,并且规定它在进程的整个运行期间保持不变。 确定优先级的依据: 1)进程的类型。 2)进程对资源的需求。 3)根据用户的要求。 优点:简单易行;系统开销小。 缺点:不太灵活,很可能出现低优先级的作业,长期得不到调度而等待的情况;静态优先级法仅适合于实时要求不太高的系统。 动态优先级调度算法 含义:动态优先级是创建进程时赋予该进程一个初始优先级,然后其优先级随着进程的执行情况的变化而改变,以便获得更好的调度性能。 优点:使相应的优先级调度算法比较灵活、科学,可防止有些进程一直得不到调度,也可防止有些进程长期垄断处理机。 缺点:需要花费相当多的执行程序时间,因而花费的系统开销比较大。 4、实时调度算法 由于在任何一个实时系统中毒存在着若干个实时进程或任务,用来反应或控制相应的外部事件,并往往具有某种程度的紧迫性,所以对实时系统中的调度算法提出了某些特殊要求。 对实时系统的要求

处理器调度之动态优先数调度算法

1 处理机调度 实验内容及要求 实验内容:按优先数调度算法实现处理器调度。 实验要求:能接受键盘输入的进程数、进程标识、进程优先数及要求运行时间,能显示每次进程调度的情况:运行进程、就绪进程和就绪进程的排列情况。 实验目的 本实验模拟在单处理器环境下的处理器调度,加深了解处理器调度工作。 实验环境 本实验的设计基于Windows7操作系统DevC++环境,用C语言实现编程。 实验思路 (1) 每个进程用一个PCB来代表。PCB的结构为: 进程名——作为进程标识。 优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。 要求运行时间——假设进程需要运行的单位时间数。 状态——假设两种状态:就绪和结束,用R表示就绪,用E表示结束。 初始状态都为就绪状态。 指针——按优先数的大小把5个进程连成队列,用指针指出下一个进程PCB的首地址。 (2) 开始运行之前,为每个进程确定它的“优先数”和“要求运行时间”。通过键盘输入这些参数。 (3) 处理器总是选择队首进程运行。采用动态改变优先数的办法,进程每运

行1次,优先数减1,要求运行时间减1。 (4) 进程运行一次后,若要求运行时间不等于0,则将它加入就绪队列,否则,将状态改为“结束”,退出就绪队列。 (5) 若就绪队列为空,结束,否则转到(3)重复。 数据结构与全局变量 typedef struct pcb{ int pname; .\n", >pname); printf("%s ends after %d slice(s).", >pname, >runTime); } else while!=NULL) { sortProcess(); printProcessInfo(); printProcessLink(); runProcess(); }

操作系统原理重点知识点

精品文档注意:大题必看否则很难及格! 操作系统是配置在计算机硬件上带第一层软件,是对硬件系统的首什么是操作系统:1、次扩充。作为计算机系统资OSOS作为用户与计算机硬件系统之间带接口、操作系统的作用:2、实现啦对计算机资源带抽象源带管理者、OS 有效性、方便性、可扩充性、开放性3、操作系统的目标:并发性虚拟性异步性)其中最重要的特征是共享性4、操作系统基本特征(并 发性 用户接口设备管理文件管理5、操作系统带主要功能:处理机管理存储器管理 完成)(I/O---阻塞---请求)---(进程调度)---执行---(I/O6、进程的三种基本状态:就绪P38页)(执行---(时间片用完)---就绪---就绪 异步性独立性并发性7、进程的特征:动态性 成批处理多道8、批处理系统带特征:脱机交互性及时性9、分时系统带特征:多路性独立性。方式、通道方式控制方式有:程序直接控制方式、中断控制方式、DMA10、常用I/O CPU 减少对设备间速度不匹配的矛盾。(2) CPU、为什么要引入缓冲区?(1)缓和与I/O11设备之间 的并行性和I/OCPU中断响应时间的限制。(3) 提高CPU的中断频率,放宽对系统由哪几部分组成?以打印机为例说明如何利用该技术实现多个进程对打SPOOLing12、印机的共享?输入进 程和输出进程输入缓冲区和输出缓冲区组成:输人井和输出井 对所有提出输出请求的用户进程,系统接受它们的请求时,并不真正把打印机分配给它们,而是由输出进程在输出井中为它申请一空闲缓冲区,并将要打印的数据卷入其中,输出进程再为用户进程申请一张空白的用户打印请求表,并将用户的打印请求填入表中,再将该表挂到打印机队列上。 这时,用户进程觉得它的打印过程已经完成,而不必等待真正的慢速的打印过程的完成。当打印机空闲时,输出进程将从请求队列队首取出一张打印请求表,根据表中的要求将要打印的数据从输出井传到内存输出缓冲区,再由打印机进行输出打印。打印完后,再处理打印队列中的一个打印请求表,实现了对打印机的共享。 13、什么是死锁?产生死锁的必要条件有哪些?处理死锁的方法? 所谓死锁是指多个进程在运行过程中因争夺资源而造成带一种僵局,当进程处于这种僵持状态时,若无外力作用,他们都将无法再向前推进。必要条件:互斥条件请求和保持条件不剥夺条件环路等待条件处理方法:预防死锁避免死锁检验死锁解除死锁 以上为简答题可能出带部分以下全为计算题做题时照猫画虎就差不多计算过程比较简单 有不懂得同学赶快在考试之前问一下懂的同学保证你考试能打60分以上。呵呵 应用题 1、调度算法(FCFS/SPF 高度优先权时间片轮转) 有5个进程P1、P2、P3、P4、P5,它们的创建时刻、运行时间和优先数见下表。规定进程的优 先数越小其优先级越高。试描述在采用下述调度算法时,各进程的运行过程,并计算平均周转时间(假设忽略进程的调度时间,时间单位为ms)。 (1)先来先服务算法。(2)剥夺式优先级调度算法。(此问可去掉。增加非剥夺式)

使用动态优先权的进程调度算法的模拟

实验四使用动态优先权的进程调度算法的模拟 1、实验目的 通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。 2、实验内容 (1)用C语言来实现对N个进程采用动态优先算法的进程调度; (2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: ●进程标识符id ●进程优先数priority,并规定优先数越大的进程,其优先权越高; ●进程已占用的CPU时间cputime ; ●进程还需占用的CPU时间alltime,当进程运行完毕时,alltime变为0; ●进程的阻塞时间startblock,表示当进程再运行startblock个时间片后, 进程将进入阻塞状态; ●进程被阻塞的时间blocktime,表示已阻塞的进程再等待blocktime个时间 片后,将转换成就绪态 ●进程状态state; ●队列指针next,用来将PCB排成队列 (3)优先数改变的原则: ●进程在就绪队列中呆一个时间片,优先数增加1 ●进程每运行一个时间片,优先数减3。 显示出来,参照的具体格式如下: RUNNING PROG: i READY_QUEUE:->id1->id2 BLOCK_QUEUE:->id3->id4 ================================== ID 0 1 2 3 4 PRIORITY P0 P1 P2 P3 P4 CPUTIME C0 C1 C2 C3 C4 ALLTIME A0 A1 A2 A3 A4 STARTBLOCK T0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4 STATE S0 S1 S2 S3 S4

相关主题
文本预览
相关文档 最新文档