cachetrace.tcl

来自「一个用在mips体系结构中的操作系统」· TCL 代码 · 共 113 行

TCL
113
字号
## Copyright (C) 1996-1998 by the Board of Trustees#    of Leland Stanford Junior University.# # This file is part of the SimOS distribution. # See LICENSE file for terms of the license. ####### cache_trace.tcl######### Cache_trace routines (First cut will change in the future)### Set the variable cacheTraceFileName before sourcing the file### if you want a name other than the default ./cachetrace###### Cache trace format###### | 32 bit physical address |### | 20 bit virtual address  | 1 bit kernel/user | 2 bit type of cache miss | 9 lower bits of pid |### Note!!! currently the user/kernel mode and pid are correct only for the uniprocessor case######set cachetracePageMask 0xfffff000set cachetracePidMask  0x000001ffset cachetraceImiss    0x000set cachetraceRmiss    0x200set cachetraceWmiss    0x400set cachetraceUmiss    0x600set cachetraceIsKernel 0x800set cachetraceTick     0xffffffffif {![info exists cacheTraceFileName]} {    set cacheTraceFileName ./cachetrace}set cachetraceFd [binary open $cacheTraceFileName "w"]annotation set scache instr -tag cachetrace {    if {($PROCESS($ScacheCPU) == "idle") || ($PROCESS($ScacheCPU) == "runq")} {        set tmpPid 0    } else {        set tmpPid $PID($ScacheCPU)    }    set cachetraceVaddr [expr ($ScacheVaddr & $cachetracePageMask) | ($tmpPid & $cachetracePidMask) | $cachetraceImiss]    if {![inUserMode]} {        set cachetraceVaddr [expr $cachetraceVaddr | $cachetraceIsKernel]    }    binary write $cachetraceFd $ScachePaddr $cachetraceVaddr}annotation set scache read -tag cachetrace {    if {($PROCESS($ScacheCPU) == "idle") || ($PROCESS($ScacheCPU) == "runq")} {        set tmpPid 0    } else {        set tmpPid $PID($ScacheCPU)    }    set cachetraceVaddr [expr ($ScacheVaddr & $cachetracePageMask) | ($tmpPid & $cachetracePidMask) | $cachetraceRmiss]    if {![inUserMode]} {        set cachetraceVaddr [expr $cachetraceVaddr | $cachetraceIsKernel]    }    binary write $cachetraceFd $ScachePaddr $cachetraceVaddr}annotation set scache write -tag cachetrace {    if {($PROCESS($ScacheCPU) == "idle") || ($PROCESS($ScacheCPU) == "runq")} {        set tmpPid 0    } else {        set tmpPid $PID($ScacheCPU)    }    set cachetraceVaddr [expr ($ScacheVaddr & $cachetracePageMask) | ($tmpPid & $cachetracePidMask) | $cachetraceWmiss]    if {![inUserMode]} {        set cachetraceVaddr [expr $cachetraceVaddr | $cachetraceIsKernel]    }    binary write $cachetraceFd $ScachePaddr $cachetraceVaddr}annotation set scache upg -tag cachetrace {    if {($PROCESS($ScacheCPU) == "idle") || ($PROCESS($ScacheCPU) == "runq")} {        set tmpPid 0    } else {        set tmpPid $PID($ScacheCPU)    }    set cachetraceVaddr [expr ($ScacheVaddr & $cachetracePageMask) | ($tmpPid & $cachetracePidMask) | $cachetraceUmiss]    if {![inUserMode]} {        set cachetraceVaddr [expr $cachetraceVaddr | $cachetraceIsKernel]    }    binary write $cachetraceFd $ScachePaddr $cachetraceVaddr}annotation set scache sc_upg -tag cachetrace {    if {($PROCESS($ScacheCPU) == "idle") || ($PROCESS($ScacheCPU) == "runq")} {        set tmpPid 0    } else {        set tmpPid $PID($ScacheCPU)    }    set cachetraceVaddr [expr ($ScacheVaddr & $cachetracePageMask) | ($tmpPid & $cachetracePidMask) | $cachetraceUmiss]    if {![inUserMode]} {        set cachetraceVaddr [expr $cachetraceVaddr | $cachetraceIsKernel]    }    binary write $cachetraceFd $ScachePaddr $cachetraceVaddr}annotation set pc [symbol read kernel::clock:START] -tag cachetrace {    if {$ScacheCPU == 0} {        binary write $cachetraceFd $cachetraceTick $cachetraceTick    }}annotation set simos exit -tag cachetrace {    binary close $cachetraceFd}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?