最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

天津理工大学操作系统实验报告实验一

来源:动视网 责编:小OO 时间:2025-09-24 12:41:54
文档

天津理工大学操作系统实验报告实验一

实验报告学院(系)名称:计算机与通信工程学院姓名nasta学号nasta专业计算机科学与技术班级2010级2班实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间2012年12月3日第3、4节实验地点软件实验室7-216批改意见成绩"教师签字:实验内容:1.设定系统中有五个进程,每一个进程用一个进程控制块表示。2.输入每个进程的“优先数”和“要求运行时间”。3.为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接
推荐度:
导读实验报告学院(系)名称:计算机与通信工程学院姓名nasta学号nasta专业计算机科学与技术班级2010级2班实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间2012年12月3日第3、4节实验地点软件实验室7-216批改意见成绩"教师签字:实验内容:1.设定系统中有五个进程,每一个进程用一个进程控制块表示。2.输入每个进程的“优先数”和“要求运行时间”。3.为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接
实验报告

学院(系)名称:计算机与通信工程学院

姓名nasta

学号nasta专业计算机科学与技术
班级2010级2班

实验项目实验一:处理机调度算法的实现

课程名称操作系统课程代码0668036

实验时间2012 年12月3日  第3、4节

实验地点软件实验室7-216
批改意见成绩
"

教师签字:                 

实验内容:

1.设定系统中有五个进程,每一个进程用一个进程控制块表示。

2.输入每个进程的“优先数”和“要求运行时间”。

3.为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。

4.处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。

5.若某进程运行时间为零,则将其状态置为“结束”,且退出队列。

6.运行所设计程序,显示或打印逐次被选中进程的进程名,以及进程控制块的动态变化过程。

实验要求:

1.详细描述实验设计思想、程序结构及各模块设计思路;

2.详细描述程序所用数据结构及算法;

3.明确给出测试用例和实验结果;

4.为增加程序可读性,在程序中进行适当注释说明;

5.认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;

6.实验报告撰写要求结构清晰、描述准确逻辑性强;

7.实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】

设计思想:

1.模拟单CPU系统时间片切换、进程切换。

2.使用优先队列,让优先级高的进程位于队列顶端。

在每次时钟周期时,从优先队列队首取出优先级最高的进程,并使其运行一个时钟周期,然后将其优先级减1,已运行时间加1。然后判断程序是否完成,如果未完成,则重新加入优先队列,参与时钟周期。

数据结构:

使用优先队列,以获得优先级最高程序。

源代码:

#include 

#include 

using namespace std;

//  进程控制块PCB

struct PCB {

    unsigned int pid;            //进程id

    unsigned int priority;        //进程优先级

    unsigned int claimTime;        //需要运行时间

    unsigned int runTime;        //已经运行时间

    

    //构造函数

    PCB(unsigned int id, unsigned int p, unsigned int ct) {

        pid=id;

        priority=p;

        claimTime=ct;

        runTime=0;

    }

    //运行当前进程一个时钟周期,并使进程优先级减1,已运行时间加1

    void run() {

        runTime++;

        if(priority>0)priority--;

    }

    //判断进程是否完成

    bool isFinished() {

        if(claimTime==runTime)

            return true;

        else return false;

    }

    //重载<运算符,以使用STL中的priority_queue

    bool operator <(const PCB& p)const {

        if(priority!=

            return priority<;        //比较优先级

        else

            //优先级相同的话快完成的任务先执行

            return claimTime-runTime<        

    }

};

int main(int argc, char **argv) {

    int clock=0;

    priority_queue q;        //优先队列

    for(int i=0; i<5; i++) {

        int p, t;

        printf("请输入pid=%u的进程的优先级(非负数):\\n", i);

        scanf("%u", &p);

        printf("请输入pid=%u的进程的要求运行时间(非负数):\\n", i);

        scanf("%u", &t);

        printf("pid = %u, 优先级 = %u, 要求运行时间 = %u\\n\\n", i, p, t);

        (PCB(i, p, t));

    }

    while(!()) {        //模拟单CPU

        printf("当前时钟%2d\", clock++);

        PCB t = ();

        ();

        printf("pid = %u进程运行, 优先级 = %u, 已运行时间 = %u\\n", , , ;

        ();

        printf("执行过后:\pid = %u, 优先级 = %u, 已运行时间 = %u\\n", , , ;

        if(!())

            (t);

        else

            printf("pid=%d进程结束\\n", ;

    }

    printf("程序结束\\n");

    return 0;

}

    测试用例:

进程pid优先级需要运行时间

043
114
254
336
422
执行结果:

实验问题:

1.在进程优先级相同时,调度结果不确定。

原因:在优先级相同时,未进行相关处理。

解决:添加优先级相同时判断逻辑,快结束的进程先调度

2.程序陷入死循环。

原因:当忘记判断进程是否结束就加入队列。

解决:判断进程是否结束,如果未结束,则继续参与调度,否则不参与。

实验总结:

要根据调度算法,选择合适的数据结构,以实现相应的调度程序。在调度时,应明确:哪个程序被调度,调度后优先级有什么变化,该进程是否还参与调度等问题。

文档

天津理工大学操作系统实验报告实验一

实验报告学院(系)名称:计算机与通信工程学院姓名nasta学号nasta专业计算机科学与技术班级2010级2班实验项目实验一:处理机调度算法的实现课程名称操作系统课程代码0668036实验时间2012年12月3日第3、4节实验地点软件实验室7-216批改意见成绩"教师签字:实验内容:1.设定系统中有五个进程,每一个进程用一个进程控制块表示。2.输入每个进程的“优先数”和“要求运行时间”。3.为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top