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

Lab 3 Page Table

题目链接

我的问题:

1 每个进程的kernel stack是干啥的来着?在何时初始化的?

题目2:A kernel page table per process (hard)

1 一些题目要求

Your first job is to modify the kernel so that every process uses its own copy of the kernel page table when executing in the kernel. Modify struct proc to maintain a kernel page table for each process, and modify the scheduler to switch kernel page tables when switching processes.

思路:
1 首先得修改每个proc的结构体,在里面新添加一份page table,还得找地方给这个page table初始化。

2 Make sure that each process’s kernel page table has a mapping for that process’s kernel stack.
XV6原来代码中 procinit函数中把每个process的kernel stack初始化映射到kernel page table中

// initialize the proc table at boot time.
void
procinit(void)
{
  struct proc *p;
  
  initlock(&pid_lock, "nextpid");
  for(p = proc; p < &proc[NPROC]; p++) {
      initlock(&p->lock, "proc");

      // Allocate a page for the process's kernel stack.
      // Map it high in memory, followed by an invalid
      // guard page.
      char *pa = kalloc();
      if(pa == 0)
        panic("kalloc");
      uint64 va = KSTACK((int) (p - proc));
      kvmmap(va, (uint64)pa, PGSIZE, PTE_R | PTE_W);
      p->kstack = va;
      p->kstack_pa = pa;
  }
  kvminithart();
}
// Switch h/w page table register to the kernel's page table,
// and enable paging.
void
kvminithart()
{
  w_satp(MAKE_SATP(kernel_pagetable));
  sfence_vma();
}

在XV6操作系统中,kalloc 和 kfree 是内核中用于物理内存页管理的核心函数。它们负责分配和释放物理内存页(每个页的大小为4KB),为内核其他模块(如进程创建、文件系统、页表等)提供动态内存支持。

http://www.dtcms.com/a/54051.html

相关文章:

  • Linux系统基于ARM平台的LVGL移植
  • 深度学习语义分割数据集全景解析
  • 物理机、虚拟机、容器化怎么选择?
  • JT1078和GB28181差别在哪里?
  • C++(初阶)(二)——类和对象
  • 文件 IO
  • 豆包大模型 MarsCode AI 刷题专栏 001
  • Kotlin协程(六)Flow流
  • 掌握高效大模型任务流搭建术(二):链式流程如何赋能 AI 处理能力提升
  • Chapter 1 Introduction
  • qt open3dAlpha重建
  • proto3语法
  • 修改git fetch后引用没更新
  • 1493. 删掉一个元素以后全为 1 的最长子数组
  • Redis - 核心原理深度解析:线程模型、持久化与高可用性
  • TensorFlow深度学习实战(10)——迁移学习详解
  • Swagger UI界面的使用
  • 系统架构设计师教材:数据库设计基础知识
  • 从零开始的 Kafka 学习(二)| 集群启动
  • 深入解析 Umi-OCR:高效的免费开源 OCR 文字识别工具
  • OpenCV计算摄影学(15)无缝克隆(Seamless Cloning)调整图像颜色的函数colorChange()
  • Spring实战spring-ai运行
  • fastapi+mysql实现问卷调查系统
  • DeepSeek+知识库+鸿蒙,助力鸿蒙高效开发
  • Java集合面试题(持续更新)
  • 动态规划01背包问题系列一>最后一块石头的重量II
  • Spring Boot使用JDBC /JPA访问达梦数据库
  • 安卓免费多功能工具:一站式解决 PDF 阅读、编辑、转换等需求
  • 基础算法总结
  • vue3:七、拦截器实现