xv6-simplified 0.1
简化版xv6
Loading...
Searching...
No Matches
memlayout.h
Go to the documentation of this file.
1
10/*
11 qemu -machine virt就如同这样布局
12 参考qemu的hw/riscv/virt.c文件:
13
14 0x00001000 -- 启动ROM
15 0x02000000 -- CLINT
16 0x0C000000 -- PLIC
17 0x10000000 -- uart0
18 0x10001000 -- virtio disk
19 0x80200000 -- 启动ROM后在机器模式跳到此地址,-kernel在此地址处加载内核
20 -- 在该地址后的RAM为unused
21
22 内核分布:
23 0x80200000 -- entry.S,然后是内核text和data段,然后是end
24 end -- 内核页分配的区域的开始处
25 PHYSTOP -- 内核使用RAM的尾部地址
26*/
27
28
29// 内核和用户使用的页表的开始地址
30#define KERNBASE 0x80020000L
31// 内核和用户使用的页表的结束地址
32#define PHYSTOP (KERNBASE + 16*1024*1024)
33
34// QEMU将UART寄存器放在物理内存的该地址
35#define UART0 0x10000000L
36#define UART0_IRQ 10
37
38// virtio disk接口地址
39#define VIRTIO0 0x10001000
40#define VIRTIO0_IRQ 1
41
42// 包括计时器的核本地中断器(CLINT)
43#define CLINT 0x2000000L
44// 计时器比较器,若MTIME > MTIMECMP,形成时钟中断
45#define CLINT_MTIMECMP(hartid) (CLINT + 0x4000 + 8*(hartid))
46// 中断计时器MTIME
47#define CLINT_MTIME (CLINT + 0xBFF8)
48
49// qemu将平台级中断控制器(PLIC)放置在这儿
50#define PLIC 0x0c000000L
51#define PLIC_PRIORITY (PLIC + 0x0)
52#define PLIC_PENDING (PLIC + 0X1000)
53
54// 核hart的Enable寄存器:针对该Hart启动或关闭某路中断源
55#define PLIC_MENABLE(hart) (PLIC + 0x2000 + (hart)*0x100)
56// 核hart的Enable寄存器:针对该Hart启动或关闭某路中断源
57#define PLIC_SENABLE(hart) (PLIC + 0x2080 + (hart)*0x100)
58// 核hart的Priority寄存器:配置中断源的优先级
59#define PLIC_MPRIORITY(hart) (PLIC + 0x200000 + (hart)*0x2000)
60// 核hart的Priority寄存器:配置中断源的优先级
61#define PLIC_SPRIORITY(hart) (PLIC + 0x201000 + (hart)*0x2000)
62// 核hart的Claim寄存器/Complete寄存器:获取最高优先级的中断源ID/通知PLIC中断处理结束
63#define PLIC_MCLAIM(hart) (PLIC + 0x200004 + (hart)*0x2000)
64// 核hart的Claim寄存器/Complete寄存器:获取最高优先级的中断源ID/通知PLIC中断处理结束
65#define PLIC_SCLAIM(hart) (PLIC + 0x201004 + (hart)*0x2000)
66
67// 对应trap处理代码页的地址,user和kernel地址空间对应的地址数值相同
68#define TRAMPOLINE (MAXVA - PGSIZE)
69
70// 映射trampoline下的内核栈空间
71// 每个内核栈都无效的保护页包围
72#define KSTACK(p) (TRAMPOLINE - (p + 1) * 2*PGSIZE)
73
74// 用户内存布局
75// 0地址开始:
76// 文本
77// 原始数据和bss段
78// 固定大小的栈
79// 可扩展的堆
80// ...
81// TRAPFRAME (p->trapframe,供trampoline使用的数据上下文)
82// TRAMPOLINE
83#define TRAPFRAME (TRAMPOLINE - PGSIZE)