⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmap.h

📁 jos lab3代码
💻 H
字号:
/* See COPYRIGHT for copyright information. */#ifndef JOS_KERN_PMAP_H#define JOS_KERN_PMAP_H#ifndef JOS_KERNEL# error "This is a JOS kernel header; user programs should not #include it"#endif#include <inc/memlayout.h>#include <inc/assert.h>struct Env;/* This macro takes a kernel virtual address -- an address that points above * KERNBASE, where the machine's maximum 256MB of physical memory is mapped -- * and returns the corresponding physical address.  It panics if you pass it a * non-kernel virtual address. */#define PADDR(kva)						\({								\	physaddr_t __m_kva = (physaddr_t) (kva);		\	if (__m_kva < KERNBASE)					\		panic("PADDR called with invalid kva %08lx", __m_kva);\	__m_kva - KERNBASE;					\})/* This macro takes a physical address and returns the corresponding kernel * virtual address.  It panics if you pass an invalid physical address. */#define KADDR(pa)						\({								\	physaddr_t __m_pa = (pa);				\	uint32_t __m_ppn = PPN(__m_pa);				\	if (__m_ppn >= npage)					\		panic("KADDR called with invalid pa %08lx", __m_pa);\	(void*) (__m_pa + KERNBASE);				\})#define TRUP(_p)                         \({                                \    register typeof((_p)) __m_p = (_p);            \    (uintptr_t) __m_p > ULIM ? (typeof(_p)) ULIM : __m_p;    \})extern char bootstacktop[], bootstack[];extern struct Page *pages;extern size_t npage;extern physaddr_t boot_cr3;extern pde_t *boot_pgdir;extern struct Segdesc gdt[];extern struct Pseudodesc gdt_pd;void	i386_vm_init();void	i386_detect_memory();void	page_init(void);int	page_alloc(struct Page **pp_store);void	page_free(struct Page *pp);int	page_insert(pde_t *pgdir, struct Page *pp, void *va, int perm);void	page_remove(pde_t *pgdir, void *va);struct Page *page_lookup(pde_t *pgdir, void *va, pte_t **pte_store);void	page_decref(struct Page *pp);void	tlb_invalidate(pde_t *pgdir, void *va);int	user_mem_check(struct Env *env, const void *va, size_t len, int perm);void	user_mem_assert(struct Env *env, const void *va, size_t len, int perm);static inline ppn_tpage2ppn(struct Page *pp){	return pp - pages;}static inline physaddr_tpage2pa(struct Page *pp){	return page2ppn(pp) << PGSHIFT;}static inline struct Page*pa2page(physaddr_t pa){	if (PPN(pa) >= npage)		panic("pa2page called with invalid pa");	return &pages[PPN(pa)];}static inline void*page2kva(struct Page *pp){	return KADDR(page2pa(pp));}pte_t *pgdir_walk(pde_t *pgdir, const void *va, int create);#endif /* !JOS_KERN_PMAP_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -