当前位置: 首页 > news >正文

MIT6.828 Lab3-3 Detect which pages have been accessed (hard)

实验内容

  • 实现 pgaccess(),这是一个报告哪些页面已经被访问的系统调用。
  • 函数的参数:(内核态从陷阱帧trapframe中获取)
    • 用户页面的起始虚拟地址
    • 页数量
    • 1个用于存储结果的用户态地址的buffer(存储了每页的mask)

已有内容

  • sys_pgaccess()的系统调用已给出,只需补充函数内容即可
    修改内容
  • kernel/sysproc.c中补充函数内容
int
sys_pgaccess(void)
{
  // lab pgtbl: your code here.
  // 获取用户态参数
  uint64 start_va;
  int num_pages;
  uint64 user_bitmask;
  argaddr(0,&start_va);
  argint(1, &num_pages);
  argaddr(2, &user_bitmask);

  // 检查num_pages有效性(64位掩码最大支持64个pages)
  if( num_pages <= 0 || num_pages > 64 ){
    return -1;
  }

  struct proc* p = myproc(); // 获取当前进程信息
  uint64 bitmask = 0;
  pte_t* pte;

  // 检查每个页面
  for( int i = 0; i < num_pages; i++){
      uint64 va = start_va + i*PGSIZE; 
      pte = walk(p->pagetable, va, 0); // 获取虚拟地址对应的PTE
      if( pte && (*pte & PTE_A )){
          bitmask |= (1<<i); // 记录结果
          *pte &= ~PTE_A;  // 清除标志位以便下次访问
      }
  }

  // 数据拷贝到用户空间
  if( copyout(p->pagetable, user_bitmask, (char*)&bitmask, sizeof(bitmask)) < 0 ){
    return -1;
  }
  return 0;
}
  • kernel/riscv.h中添加提取标志位的宏
#define PTE_A (1L << 6) // lab3-3
  • 关于PTE的标志位
| 63-54 | 53-28 | 27-10 | 9-8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 保留  | PPN   | 保留   | RSW | D | A | G | U | X | W | R | V |
  • 硬件置位:PTE_A PTE_D 由 CPU 自动管理,反映真实访问行为。
  • 软件置位:其他标志位(如 PTE_V/PTE_R)需操作系统维护。
http://www.dtcms.com/a/111646.html

相关文章:

  • MCP有哪些比较好的资源?
  • 数据一键导出为 Excel 文件
  • 每日一个小病毒(C++)EnumChildWindows+shellcode
  • 添加购物车功能
  • LeetCode热题100记录-【链表】
  • Linux内核物理内存组织结构
  • 【GPT入门】第33课 从应用场景出发,区分 TavilyAnswer 和 TavilySearchResults,代码实战
  • [每周一更]-(第138期):MySQL 子查询详解:原理、应用及优化方案
  • 爬虫工程师的社会现状
  • ISIS多区域配置
  • 基于CATIA参数化块体建模的自动化插件开发实践——NX建模之块命令的参考与移植
  • 4.3-2 jenkins
  • Cortex-M​ 中断的压栈与出栈操作
  • 【51单片机】2-3【I/O口】震动传感器控制LED灯
  • 【记录】kali制作绕过火绒检测的木马(仅通过MSF的方式)
  • shared_ptr和weak_ptr原理
  • TortoiseGit多账号切换配置
  • Ubuntu服务器 无法正常启动redis
  • cmake(12):在 CMake 的 CMakeLists.txt 中也可以进行流程控制,也就是说可以像写 shell 脚本那样进行条件判断和循环。
  • ubantu22.04中搭建地图开发环境(qt5.15.2 + osg3.7.0 + osgearth3.7.1 + osgqt)
  • 自然科学基金项目答辩ppt设计制作美化案例模板下载
  • 机器学习学习笔记
  • Promise 详细说明、常用方法
  • 【备考高项】模拟预测题(一)综合知识及答案详解
  • C++_模板初阶
  • transform
  • VirtualBox安装FnOS
  • pat学习笔记
  • JavaScript学习19-事件类型之鼠标事件
  • 【2019】【论文笔记】混合石墨烯等离子体光栅在THz下增强非线——