操作系统ucore lab6实验报告

操作系统ucore实验第六部分涉及调度算法的实现,包括Round Robin和Stride Scheduling。在练习0中,完善了alloc_proc和trap_dispatch函数。练习1介绍了Round Robin算法,通过维护有序队列实现分时轮流执行进程。练习2实现了Stride Scheduling,依据进程的stride值选择调度进程,并动态更新stride和pass值。实验结果显示调度算法成功运行。

操作系统lab6实验报告

实验五完成了用户进程的管理,可在用户态运行多个进程。可是目前的进程调度策略是FIFO策略,而本实验则会实现Stride Scheduling调度算法。

练习0:填写已有实验

同样使用一款名为meld的软件进行对比即可,大致截图如下:

现在将需要修改的文件罗列如下:

proc.c
default_pmm.c
pmm.c
swap_fifo.c
vmm.c
trap.c

然后是一些需要简单修改的部分,根据注释的提示,主要是一下两个函数需要额外加以修改。

alloc_proc函数

这里alloc_proc还需要修改一下,完整的代码如下:

static struct proc_struct *
alloc_proc(void) {
    struct proc_struct *proc = kmalloc(sizeof(struct proc_struct));
    if (proc != NULL) {
        proc->state = PROC_UNINIT;
        proc->pid = -1;
        proc->runs = 0;
        proc->kstack = 0;
        proc->need_resched = 0;
        proc->parent = NULL;
        proc->mm = NULL;
        memset(&(proc->context), 0, sizeof(struct context));
        proc->tf = NULL;
        proc->cr3 = boot_cr3;
        proc->flags = 0;
        memset(proc->name, 0, PROC_NAME_LEN);
        proc->wait_state = 0;
        proc->cptr = proc->optr = proc->yptr = NULL;
        proc->rq = NULL;
        list_init(&(proc->run_link));
        proc->time_slice = 0;
        proc->lab6_run_pool.left = proc->lab6_run_pool.right = proc->lab6_run_pool.parent = NULL;
        proc->lab6_stride = 0;
        proc->lab6_priority = 0;
    }
    return proc;
}

相比于lab5,lab6对proc_struct结构体再次做了扩展,这里主要是多出了以下部分

    proc->rq = NULL;//初始化运行队列为空
    list_init(&(proc->run_link));//初始化运行队列的指针
    proc->time_slice = 0;//初始化时间片
    proc->lab6_run_pool.left = proc->lab6_run_pool.right proc->lab6_run_pool.parent = NULL; //初始化各类指针为空,包括父进程等待
    proc->lab6_stride = 0;//步数初始化 
    proc->lab6_priority = 0;//初始化优先级

具体的解释见注释。

trap_dispatch函数

这里在时钟产生的地方需要对定时器做初始化,修改的部分如下:

static void
trap_dispatch(struct trapframe *tf) {
    ......
    ......
    ticks ++;  
    assert(current != NULL);  
    run_timer_list(); //更新定时器,并根据参数调用调度算法  
    break;  
    ......
    ......
}

练习1 使用Round Robin调度算法

Round Robin调度算法的调度思想是让所有 runnable 态的进程分时轮流使用 CPU 时间。Round Robin 调度器维护当前 runnable进程的有序运行队列。当前进程的时间片用完之后,调度器将当前进程放置到运行队列的尾部

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值