美文网首页
Golang 写的一个动态时间片轮转进程调度算法

Golang 写的一个动态时间片轮转进程调度算法

作者: 失眠是真滴难受 | 来源:发表于2020-04-12 01:08 被阅读0次

现在还有一个问题,在最后一个进程运行完之后,还会再打印一次输出

package main
import "fmt"
type Process struct { //定义进程的数据结构
    PRIORITY int
    CPUTIME int
    ALLTIME int
    STATE string
}
func main()  {
    PR := map[int]*Process{    //初始进程
        0: &Process{
            PRIORITY: 9,
            CPUTIME:  0,
            ALLTIME:  3,
            STATE:    "ready",
        },
        1: &Process{
            PRIORITY: 38,
            CPUTIME:  0,
            ALLTIME:  2,
            STATE:    "ready",
        },
        2: &Process{
            PRIORITY: 30,
            CPUTIME:  0,
            ALLTIME:  6,
            STATE:    "ready",
        },
        3: &Process{
            PRIORITY: 29,
            CPUTIME:  0,
            ALLTIME:  3,
            STATE:    "ready",
        },
        4: &Process{
            PRIORITY: 0,
            CPUTIME:  0,
            ALLTIME:  4,
            STATE:    "ready",
        },
    }
    for ; ;  {          //无限循环
        num := GetFirst(PR)     //取出优先级最大的ID
        GetReady(PR, num)      //输出就绪队列
        flag := ProcessController(PR, num)   //进程控制,以及判断是否还有进程
        if flag == 1{
            break
        }else {
            continue
        }
    }
}
func GetReady(process map[int]*Process,num int) {
    fmt.Printf("当前正在运行的进程: %d \n",num)
    fmt.Println("当前就绪队列为:")
    for k,_ := range process{
        if k != num {
            fmt.Print(k," ")
        }else {
            continue
        }
    }
    fmt.Println()
}
func GetFirst(process map[int]*Process)(num int)  {  //找出优先级最高的进程
    max := 0
    num = 4
    for k,_ := range process{
        if process[k].PRIORITY > max{
            max = process[k].PRIORITY
            num = k
        }else {
            continue
        }
    }
    return num
}
func ProcessController(process map[int]*Process,id int) (flag int) {  //进程控制模块
        if process[id] == nil{
            fmt.Println("当前无可运行进程")
            flag = 1
        }else {
            process[id].PRIORITY -= 3
            process[id].ALLTIME -= 1
            process[id].CPUTIME += 1
            if process[id].ALLTIME == 0 {
                delete(process, id)
            }
            flag = 0
        }
        return flag
}

相关文章

  • Golang 写的一个动态时间片轮转进程调度算法

    现在还有一个问题,在最后一个进程运行完之后,还会再打印一次输出

  • 常见的嵌入式OS内存管理和进程调度方式

    调度策略 时间片轮转算法 在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则,排成一个队列,每次调度时...

  • iOS 多线程

    进程与线程 进程:一个正在执行的程序实例,是 CPU 调度的基本单位。CUP 通过时间片轮转等调度算法在多个进程之...

  • 五种进程调度算法的总结;

    1、时间片轮转调度算法(RR):给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成...

  • 并发编程技术一之了解线程

    了解线程由来 单核CPU之所以能够实现多进程,主要是依赖操作系统的进程调度算法。如时间片轮转算法,可以实现QQ、微...

  • 操作系统基础 进程调度算法

    1.先来先服务调度算法 近乎单线程/单进程 2.时间片轮转算法 周期性地进行进程切换。 改善短程序的响应时间...

  • 常见调度算法

    先来先服务(FCFS)调度算法短作业优先(SJF)调度算法优先级调度算法高响应比优先调度算法时间片轮转调度算法多级...

  • 单核CPU是如何实现多进程和多线程?

    1.单核cpu之所以能够实现多进程,主要是依靠于操作系统的进程的调度算法 如时间片轮转算法,在早期,举例说明:有5...

  • 操作系统:C++实现RR(时间片轮转算法)

    算法描述: 1.在早期的时间片轮转法中,系统将所有的就绪进程按先来先服务的原则排成一个队列, 每次调度时,把 CP...

  • python 多进程

    多任务编程 进程 什么是进程 1.程序就是没有执行的二进制代码 2.进程就是运行的程序 进程调度 时间片轮转: c...

网友评论

      本文标题:Golang 写的一个动态时间片轮转进程调度算法

      本文链接:https://www.haomeiwen.com/subject/mgummhtx.html