URN Logo
UNIX Resources » Linux » China Linux Forum » CPU 与 编译器 » 5 » 问一个MIPS结构的LINUX的TLB异常处理程序问题,急急急!!!
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
问一个MIPS结构的LINUX的TLB异常处理程序问题,急急急!!!
Author: lijunyong    Posted: 2006-03-07 13:21    Length: 2,325 byte(s)
[Original] [Print] [Top]
bnn兄,你好,久仰大名,想问你一些问题:
我看了MIPS的TLB异常处理程序,
看懂了一些,但还有一些没有看懂,想请教你一些问题:
linux初始化时,把页目录表项都初始化成invalid_pte_table,
当访问一个32位的虚拟地址时,出现TLB refill 异常,
进入异常处理程序except_vec0_r4000处理,把invalid_pte_table
加进TLB表里,因为invalid_pte_table的值是0,所以再次访问这个
虚拟地址时,会产生tlbinvalid异常,进入异常处理程序handle_tlbl
处理,handle_tlbl处理程序如下:
NESTED(handle_tlbl, PT_SIZE, sp)
.set noat
invalid_tlbl:
#ifdef TLB_OPTIMIZE
/* Test present bit in entry. */
LOAD_PTE(k0, k1) //根据出现异常的虚拟地址得到页表项的内容
R5K_HAZARD
tlbp
PTE_PRESENT(k0, k1, nopage_tlbl)//判断该页表项是否为空,也就是说虚拟地址和物理地址对应关系是否建立,
//如果为空,就是说虚拟地址和物理地址对应关系没有建立,就跳到nopage_tlbl,
//调用do_page_fault()分配物理内存并建立对应关系
PTE_MAKEVALID_HIGH(k0, k1)
PTE_MAKEVALID(k0, k1)//如果该页表项不为空,就修改页表项的一些标记位
PTE_RELOAD(k1, k0)//把页表项的内容加入TLB表
nop
b 1f
tlbwi
1:
nop
.set mips3
eret
.set mips0
#endif

nopage_tlbl:
DO_FAULT(0)
END(handle_tlbl)

我想问的问题是:
1。既然是tlbinvalid异常,执行PTE_PRESENT(k0, k1, nopage_tlbl)判断该页表项是否为空,肯定为空,
所以会跳到nopage_tlbl,执行DO_FAULT(0),进而调用do_page_fault()分配物理内存并建立对应关系,
那什么时候执行下面的两句PTE_MAKEVALID(k0, k1),PTE_RELOAD(k1, k0)啊??
2。是不是出现TLB refill异常,就一定执行异常处理程序except_vec0_r4000,
出现TLB invalid异常,就执行异常处理程序NESTED(handle_tlbl, PT_SIZE, sp)呢?而且只有
TLB invalid异常,才会执行异常处理程序NESTED(handle_tlbl, PT_SIZE, sp)呢?

我记得MIPS可以出现嵌套异常,是不是出现嵌套的TLB refill异常时,也执行NESTED(handle_tlbl, PT_SIZE, sp)
异常处理程序呢??
既然页目录表项里的内容是KSEG0的虚拟地址,那应该不会出现嵌套异常啊??什么时候出现嵌套异常的呢??

谢谢!!!!
[Original] [Print] [Top]
« Previous thread
编译器能自动对齐么?
CPU 与 编译器
5
Next thread »
这里有人作逻辑框架或者逻辑编程的吗?
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:47:17, cost 0.054791927337646 ms.