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

MIT6.828 Lab3-1 Speed up system calls (easy)

实验内容

  • 这个实验的目标是优化 xv6 中的某些系统调用(如 getpid()),通过共享内存的方式减少用户态和内核态之间的切换开销。
  • 其中,物理地址在kernel/memlayout.h中定义
#define USYSCALL (TRAPFRAME - PGSIZE)
struct usyscall {
  int pid;  // Process ID
};

修改内容

  • kernel/proc.h中添加定义
struct proc {
  // ... 原有字段
  struct usyscall *usyscall;  // 共享内存区域
};
  • kernel/proc.c 中分配共享页面(分配物理页)
static struct proc*
allocproc(void)
{
  // ... 原有代码
  // Allocate a usyscall page
  if((p->usyscall = (struct usyscall *)kalloc()) == 0){
    freeproc(p);
    release(&p->lock);
    return 0;
  }
  p->usyscall->pid = p->pid;  // 初始化共享数据
  // ... 原有代码
}
  • kernel/proc.c 中释放共享页面(回收物理页)
static void
freeproc(struct proc *p)
{
  // ... 原有代码
  
  if(p->usyscall)
    kfree((void*)p->usyscall);
  p->usyscall = 0;
  
  // ... 原有代码
}
  • kernel/proc.c 中添加映射(映射虚拟地址和物理页)
pagetable_t
proc_pagetable(struct proc *p)
{
  // ... 原有代码
  
  // map the USYSCALL page
  if(mappages(pagetable, USYSCALL, PGSIZE,
              (uint64)(p->usyscall), PTE_R | PTE_U) < 0){
    uvmunmap(pagetable, TRAMPOLINE, 1, 0);
    uvmunmap(pagetable, TRAPFRAME, 1, 0);
    uvmfree(pagetable, 0);
    return 0;
  }
  
  return pagetable;
}
  • kernel/proc.c 中释放映射
void
proc_freepagetable(pagetable_t pagetable, uint64 sz)
{
  uvmunmap(pagetable, TRAMPOLINE, 1, 0);
  uvmunmap(pagetable, TRAPFRAME, 1, 0);
  uvmunmap(pagetable, USYSCALL, 1, 0);  // 取消映射共享页面
  uvmfree(pagetable, sz);
}
http://www.dtcms.com/a/110093.html

相关文章:

  • c#使用wpf实现helloworld和login登录
  • sql工具怎么选?
  • 【从零实现Json-Rpc框架】- 项目实现 - 服务端主题实现及整体封装
  • 2.pycharm保姆级安装教程
  • 灵霄破茧:仙途启幕 - 灵霄门新篇-(3)
  • Vue3 中判断接口返回的是文件流还是 JSON 提示信息
  • UltraScale+系列FPGA实现 IMX214 MIPI 视频解码转HDMI2.0输出,提供2套工程源码和技术支持
  • 加固计算机厂家 | 工业加固笔记本电脑厂家
  • mybatis 自带的几个插入接口的区别
  • 激光加工中平面倾斜度的矫正
  • AI图片设计常用提示词分类表
  • Redis 主要能够用来做什么
  • 企业级日志分析平台: ELK 集群搭建指南
  • TypeScript工程集成
  • 【数据结构】邻接矩阵完全指南:原理、实现与稠密图优化技巧​
  • 位运算题目:数字范围按位与
  • 【系统分析师-第二篇】
  • SQL语句(二)—— DML
  • (DreamerV3)Mastering Diverse Domains through World Models
  • 《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
  • 3499 幸运数字
  • LeetCode 2140.解决智力问题:记忆化搜索(DFS) / 动态规划(DP)
  • 使用 React 和 Konva 实现一个在线画板组件
  • 前端对接下载文件接口、对接dart app
  • 【解决】VsCode中code runner无法使用cin 输入
  • 大学生机器人比赛实战(一)综述篇
  • 用树莓派和ads1115采样模拟量 保姆级教程
  • 基于CYT4BB MCAL完成对DS_SA47321功能开发
  • python match case语法
  • 2025年中级社会工作者考试模拟题