Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
a7061b4f
提交
a7061b4f
8月 29, 2011
创建
作者:
Austin Clements
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Style nits; indentation and tabs
上级
16f205b5
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
37 行增加
和
37 行删除
+37
-37
defs.h
defs.h
+1
-1
file.c
file.c
+1
-1
main.c
main.c
+4
-4
mmu.h
mmu.h
+30
-30
vm.c
vm.c
+1
-1
没有找到文件。
defs.h
浏览文件 @
a7061b4f
...
@@ -131,7 +131,7 @@ void release(struct spinlock*);
...
@@ -131,7 +131,7 @@ void release(struct spinlock*);
void
pushcli
(
void
);
void
pushcli
(
void
);
void
popcli
(
void
);
void
popcli
(
void
);
void
initsleeplock
(
struct
sleeplock
*
);
void
initsleeplock
(
struct
sleeplock
*
);
void
acquire_sleeplock
(
struct
sleeplock
*
,
struct
spinlock
*
);
void
acquire_sleeplock
(
struct
sleeplock
*
,
struct
spinlock
*
);
void
release_sleeplock
(
struct
sleeplock
*
);
void
release_sleeplock
(
struct
sleeplock
*
);
int
acquired_sleeplock
(
struct
sleeplock
*
);
int
acquired_sleeplock
(
struct
sleeplock
*
);
...
...
file.c
浏览文件 @
a7061b4f
...
@@ -134,7 +134,7 @@ filewrite(struct file *f, char *addr, int n)
...
@@ -134,7 +134,7 @@ filewrite(struct file *f, char *addr, int n)
begin_trans
();
begin_trans
();
ilock
(
f
->
ip
);
ilock
(
f
->
ip
);
if
((
r
=
writei
(
f
->
ip
,
addr
+
i
,
f
->
off
,
n1
))
>
0
)
if
((
r
=
writei
(
f
->
ip
,
addr
+
i
,
f
->
off
,
n1
))
>
0
)
f
->
off
+=
r
;
f
->
off
+=
r
;
iunlock
(
f
->
ip
);
iunlock
(
f
->
ip
);
commit_trans
();
commit_trans
();
...
...
main.c
浏览文件 @
a7061b4f
...
@@ -107,10 +107,10 @@ startothers(void)
...
@@ -107,10 +107,10 @@ startothers(void)
// Use PTE_PS in page directory entry to enable 4Mbyte pages.
// Use PTE_PS in page directory entry to enable 4Mbyte pages.
__attribute__
((
__aligned__
(
PGSIZE
)))
__attribute__
((
__aligned__
(
PGSIZE
)))
pde_t
enterpgdir
[
NPDENTRIES
]
=
{
pde_t
enterpgdir
[
NPDENTRIES
]
=
{
// Map VA's [0, 4MB) to PA's [0, 4MB)
// Map VA's [0, 4MB) to PA's [0, 4MB)
[
0
]
=
(
0
)
+
PTE_P
+
PTE_W
+
PTE_PS
,
[
0
]
=
(
0
)
+
PTE_P
+
PTE_W
+
PTE_PS
,
// Map VA's [KERNBASE, KERNBASE+4MB) to PA's [0, 4MB)
// Map VA's [KERNBASE, KERNBASE+4MB) to PA's [0, 4MB)
[
KERNBASE
>>
PDXSHIFT
]
=
(
0
)
+
PTE_P
+
PTE_W
+
PTE_PS
,
[
KERNBASE
>>
PDXSHIFT
]
=
(
0
)
+
PTE_P
+
PTE_W
+
PTE_PS
,
};
};
//PAGEBREAK!
//PAGEBREAK!
...
...
mmu.h
浏览文件 @
a7061b4f
...
@@ -25,19 +25,19 @@
...
@@ -25,19 +25,19 @@
#define FL_ID 0x00200000 // ID flag
#define FL_ID 0x00200000 // ID flag
// Control Register flags
// Control Register flags
#define CR0_PE
0x00000001
// Protection Enable
#define CR0_PE
0x00000001
// Protection Enable
#define CR0_MP
0x00000002
// Monitor coProcessor
#define CR0_MP
0x00000002
// Monitor coProcessor
#define CR0_EM
0x00000004
// Emulation
#define CR0_EM
0x00000004
// Emulation
#define CR0_TS
0x00000008
// Task Switched
#define CR0_TS
0x00000008
// Task Switched
#define CR0_ET
0x00000010
// Extension Type
#define CR0_ET
0x00000010
// Extension Type
#define CR0_NE
0x00000020
// Numeric Errror
#define CR0_NE
0x00000020
// Numeric Errror
#define CR0_WP
0x00010000
// Write Protect
#define CR0_WP
0x00010000
// Write Protect
#define CR0_AM
0x00040000
// Alignment Mask
#define CR0_AM
0x00040000
// Alignment Mask
#define CR0_NW
0x20000000
// Not Writethrough
#define CR0_NW
0x20000000
// Not Writethrough
#define CR0_CD
0x40000000
// Cache Disable
#define CR0_CD
0x40000000
// Cache Disable
#define CR0_PG
0x80000000
// Paging
#define CR0_PG
0x80000000
// Paging
#define CR4_PSE 0x00000010
// Page size extension
#define CR4_PSE 0x00000010
// Page size extension
#define SEG_KCODE 1 // kernel code
#define SEG_KCODE 1 // kernel code
#define SEG_KDATA 2 // kernel data+stack
#define SEG_KDATA 2 // kernel data+stack
...
@@ -109,39 +109,39 @@ struct segdesc {
...
@@ -109,39 +109,39 @@ struct segdesc {
// \--- PDX(va) --/ \--- PTX(va) --/
// \--- PDX(va) --/ \--- PTX(va) --/
// page directory index
// page directory index
#define PDX(va)
(((uint)(va) >> PDXSHIFT) & 0x3FF)
#define PDX(va)
(((uint)(va) >> PDXSHIFT) & 0x3FF)
// page table index
// page table index
#define PTX(va)
(((uint)(va) >> PTXSHIFT) & 0x3FF)
#define PTX(va)
(((uint)(va) >> PTXSHIFT) & 0x3FF)
// construct virtual address from indexes and offset
// construct virtual address from indexes and offset
#define PGADDR(d, t, o)
((uint)((d) << PDXSHIFT | (t) << PTXSHIFT | (o)))
#define PGADDR(d, t, o)
((uint)((d) << PDXSHIFT | (t) << PTXSHIFT | (o)))
// Page directory and page table constants.
// Page directory and page table constants.
#define NPDENTRIES
1024
// page directory entries per page directory
#define NPDENTRIES
1024
// page directory entries per page directory
#define NPTENTRIES
1024
// page table entries per page table
#define NPTENTRIES
1024
// page table entries per page table
#define PGSIZE 4096 // bytes mapped by a page
#define PGSIZE 4096 // bytes mapped by a page
#define PGSHIFT 12 // log2(PGSIZE)
#define PGSHIFT 12 // log2(PGSIZE)
#define PTXSHIFT
12
// offset of PTX in a linear address
#define PTXSHIFT
12
// offset of PTX in a linear address
#define PDXSHIFT
22
// offset of PDX in a linear address
#define PDXSHIFT
22
// offset of PDX in a linear address
#define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
#define PGROUNDUP(sz) (((sz)+PGSIZE-1) & ~(PGSIZE-1))
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
#define PGROUNDDOWN(a) (((a)) & ~(PGSIZE-1))
// Page table/directory entry flags.
// Page table/directory entry flags.
#define PTE_P
0x001
// Present
#define PTE_P
0x001
// Present
#define PTE_W
0x002
// Writeable
#define PTE_W
0x002
// Writeable
#define PTE_U
0x004
// User
#define PTE_U
0x004
// User
#define PTE_PWT
0x008
// Write-Through
#define PTE_PWT
0x008
// Write-Through
#define PTE_PCD
0x010
// Cache-Disable
#define PTE_PCD
0x010
// Cache-Disable
#define PTE_A
0x020
// Accessed
#define PTE_A
0x020
// Accessed
#define PTE_D
0x040
// Dirty
#define PTE_D
0x040
// Dirty
#define PTE_PS
0x080
// Page Size
#define PTE_PS
0x080
// Page Size
#define PTE_MBZ
0x180
// Bits must be zero
#define PTE_MBZ
0x180
// Bits must be zero
// Address in page table or page directory entry
// Address in page table or page directory entry
#define PTE_ADDR(pte)
((uint)(pte) & ~0xFFF)
#define PTE_ADDR(pte)
((uint)(pte) & ~0xFFF)
#ifndef __ASSEMBLER__
#ifndef __ASSEMBLER__
typedef
uint
pte_t
;
typedef
uint
pte_t
;
...
...
vm.c
浏览文件 @
a7061b4f
...
@@ -137,7 +137,7 @@ setupkvm(char* (*alloc)(void))
...
@@ -137,7 +137,7 @@ setupkvm(char* (*alloc)(void))
panic
(
"PHYSTOP too high"
);
panic
(
"PHYSTOP too high"
);
for
(
k
=
kmap
;
k
<
&
kmap
[
NELEM
(
kmap
)];
k
++
)
for
(
k
=
kmap
;
k
<
&
kmap
[
NELEM
(
kmap
)];
k
++
)
if
(
mappages
(
pgdir
,
k
->
virt
,
k
->
phys_end
-
k
->
phys_start
,
(
uint
)
k
->
phys_start
,
if
(
mappages
(
pgdir
,
k
->
virt
,
k
->
phys_end
-
k
->
phys_start
,
(
uint
)
k
->
phys_start
,
k
->
perm
,
alloc
)
<
0
)
k
->
perm
,
alloc
)
<
0
)
return
0
;
return
0
;
return
pgdir
;
return
pgdir
;
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论