静态优先级调度算法

更新时间:2023-05-20 14:48:00 阅读: 评论:0

__            成绩(五级制):________乱码英文
武汉科技大学城市学院
《操作系统》实验报告
院    系  武汉科技的大学城市学院
学生专业 _信科________
年级  班 _大三________
课程名称  _操作系统_
实验题目 _进程调度________
学生姓名 __宋骋_______
指导教师 __郭冀生____
2013年  11  月  4  日
实验二  进程调度
一、实验目的
进程是操作系统最重要的概念之一,进程调度又是操作系统核心的重要内容。通过该实验,要求同学们了解各进程在执行过程中的状态和参数的变化情况,以便于观察诸进程的调度过程。
二、实验内容及要求
按剥夺式优先数法对三个进程P1,p2,p3进行模拟调度,各进程的优先数静态设置,其中羽毛球的英文P1的优先数最高,P3的优先数最低。每个进程都处于执行E(execute),就绪R(ready)和等待W(wait)三种状态之一,并假定初始状态均为R.
三个进程有如下同步关系:P1因等待事件1被阻塞后由P2发现并唤醒之,P2因等待事件2被阻塞后由P3发现并唤醒之。
当系统进入运行,在完成必要的初始化工作以后便进入进程调度,首先选择优先数最高的
进程使其进入执行(分配CPU)。当执行进程因等待某个事件被阻塞或唤醒某个等待进程时,转入进程调度。
如果被唤醒的进程的优先数大于现行的执行进程,则剥夺现行进程的执行权,而将CPU分配给被唤醒的进程。当系统处于死锁或三个进程都执行完毕时系统退出运行。
系统中应用到如下数据结构:
*进程控制块PCB
*信号量m
*其它需要的数据结构。由自己设计。
三、实验原理及步骤
根据现代操作系统的特征
1.并发性(concurrence);
2.共享性(sharing);
3.虚拟性(virtual);
4.异步性(asynchronism) 。
模拟出进程在执行中的状态变化过程;
体会进程申请资源、使用资源、归还资源;
体会死锁。
步骤(参考框图)
4、    算法和流程图
可强占优先调度算法实现过程流程图(如下图):
   
               
四、程序运行
1 选择输入执行程序(如下图)
   
                   
2 可强占优先调度算法图(如下图)
               
   
五.设计总结:
通过该课程设计,加深了对系统进程调度机制的理解。在抢占方式中实践了“抢占” 必须遵循的原则:优先权原则。认识了几种进程调度算法的优缺点以及应用范围。加强C++的编
程能力,实现类的封
装。
附录:
程序及注释(用红色黑体标注自己设计的函数)
//进程PCB类和模拟cpu的进程类的声明
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>   
#include <time.h>
#include <io.h>
#include <string.h>
#define MAX_PHILOSOPHERS 3                //待测试的哲学家数
#define ZERO 48                                //数字0的ASCII码
#define DELAY rand()%25
struct PCB
{
    char p_name[20];
    int p_priority;
    int p_needTime;
    int p_runTime;
    char p_state;
announce
    char deadlock();
    struct PCB* next;
};
void HighPriority();
void deadlock();
void Information();//形参的改变映射给实参 说白了就是实参传过去不用return 返回就可以把实参改变
char Choice();
struct PCB* SortList(PCB* HL);
int main(int argc,char *argv[])
{
    Information();
    char choice = Choice();
    switch(choice)
    {
        ca '1':
            system("cls");
            HighPriority();
            break;
        ca '2':
            system("cls");
            void deadlock();
            break;
        default:
            break;
    }
    system("pau");
    return 0;
}
void Information()
{
    printf("\n\n");
    printf("              *********************************************            \n");
    printf("                            模拟进程调度算法\n");
    printf("              *********************************************            \n\n\n");   
    printf("                        静态优先级调度算法");
satisfy    printf("                            死锁问题");
    printf("                        按回车键进入演示程序");
    getchar();
    system("cls");at什么意思
    system("cls");
}
char Choice()
{
    printf("\n\n");
少儿辅导    printf("              *********************************************            \n");
小学语文教学故事    printf("                              进程调度演示\n");
    printf("              *********************************************            \n\n\n");   
    printf("                        1.演示最高优先数优先算法。\n");
    printf("                        2.演示死锁问题。\n");
    printf("                        3.退出程序。\n\n\n\n");look at me now
    printf("                            选择进程调度方法:");
    printf("lect a function(1~3):");
    char ch = getchar();
    return ch;
aeolus
    system("cls");
}
void HighPriority()
{
    struct PCB *process, *pt;
    //pt作为临时节点来创建链表
    process = pt = (struct PCB*)malloc(sizeof(struct PCB));   
    for (int i = 1; i != 4; ++i)
    {
2014高考文综        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();  //接受回车
    //process作为头结点来存储链表
    process = process->next;
    int cas = 0;
    struct PCB *psorted = process;
    while (1)
    {
        ++cas;
        pt = process;
        //对链表按照优先数排序
        //psorted用来存放排序后的链表
        psorted = SortList(psorted);
        printf("The execute number: %d\n\n", cas);
        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);

本文发布于:2023-05-20 14:48:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/115910.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进程   调度   优先   执行
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图