美文网首页
模拟分页存储算法

模拟分页存储算法

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

    这是一次操作系统的实验,写的很垃圾,留在这等以后回过头来看自己的垃圾代码

    package main
    import (
        "container/list"
        "fmt"
    )
    type page struct {
        pg int
        flag int 
        pgnum int
        modify int
        loc int
    }
    var   (
        ProMemory int = 4
        PG            = 0
        ORDER         = 0
        OFFSET        = 0
        countOld      = 1
    )
    func main() {
        useList := list.New()
        for i := 0; i <= 4; i++{
            fifo(useList)
        }
    }
    func initPage() map[int]page {
        pages := map[int]page{
            1 : {
                pg:     0,
                flag:   1,
                pgnum:  5,
                modify: 0,
                loc:    11,
            },
            2: {
                pg:     1,
                flag:   1,
                pgnum:  8,
                modify: 0,
                loc:    12,
            },
            3: {
                pg:     2,
                flag:   1,
                pgnum:  9,
                modify: 0,
                loc:    13,
            },
            4: {
                pg:     3,
                flag:   0,
                pgnum:  1,
                modify: 0,
                loc:    21,
            },
        }
        return pages
    }
    func searchPage(userlist *list.List,pg int) bool  {
        for item := userlist.Front(); nil != item ;item = item.Next()  {
            if item.Value == pg{
                return true
            }
        }
        return false
    }
    func setMod(s map[int]page,pg int)  {
        for _,v := range s{
            if v.pg == pg{}
            v.modify = 1
        }
    }
    func fifo(uselist *list.List)  {
        pages := initPage()
        uselist.PushBack(0)
        uselist.PushBack(1)
        uselist.PushBack(2)
        uselist.PushBack(3)
        fmt.Println("请输入要访问的页号:")
        _, _ = fmt.Scanln(&PG)
        fmt.Println("请输入地址偏移量:")
        _, _ = fmt.Scanln(&OFFSET)
        fmt.Println("请输入要执行的操作:1 存指令 2 非存指令")
        _, _ = fmt.Scanln(&ORDER)
        if searchPage(uselist,PG) == true{
            countOld = countOld % ProMemory
            fmt.Printf("页号%d已在内存中 \n",PG)
            fmt.Printf("%d \n",pages[countOld].pgnum*1024+pages[countOld].loc)
            if ORDER == 1 {
                setMod(pages,countOld)
            }
            countOld++;
        }else {
            fmt.Printf("*%d \n",PG)
            uselist.PushBack(PG)
        }
    }
    

    相关文章

      网友评论

          本文标题:模拟分页存储算法

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