Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
3fd50978
提交
3fd50978
8月 08, 2007
创建
作者:
rsc
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
spacing
上级
5d0fe344
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
17 行增加
和
20 行删除
+17
-20
BUGS
BUGS
+0
-3
mmu.h
mmu.h
+17
-17
没有找到文件。
BUGS
浏览文件 @
3fd50978
index:
index:
SEG_NULL, SEG_ASM not in the index
SEG_NULL, SEG_ASM not in the index
mmu.h:
funny \ alignment in mmu.h
proc.c:
proc.c:
as a consequence of the implementation of proc_kill,
as a consequence of the implementation of proc_kill,
any loop calling sleep should check for p->killed
any loop calling sleep should check for p->killed
...
...
mmu.h
浏览文件 @
3fd50978
...
@@ -47,12 +47,12 @@ struct segdesc {
...
@@ -47,12 +47,12 @@ struct segdesc {
// Normal segment
// Normal segment
#define SEG(type, base, lim, dpl) (struct segdesc) \
#define SEG(type, base, lim, dpl) (struct segdesc) \
{ ((lim) >> 12) & 0xffff, (base) & 0xffff, ((base) >> 16) & 0xff, \
{ ((lim) >> 12) & 0xffff, (base) & 0xffff, ((base) >> 16) & 0xff, \
type, 1, dpl, 1, (uint) (lim) >> 28, 0, 0, 1, 1, \
type, 1, dpl, 1, (uint) (lim) >> 28, 0, 0, 1, 1,
\
(uint) (base) >> 24 }
(uint) (base) >> 24 }
#define SEG16(type, base, lim, dpl) (struct segdesc) \
#define SEG16(type, base, lim, dpl) (struct segdesc) \
{ (lim) & 0xffff, (base) & 0xffff, ((base) >> 16) & 0xff, \
{ (lim) & 0xffff, (base) & 0xffff, ((base) >> 16) & 0xff, \
type, 1, dpl, 1, (uint) (lim) >> 16, 0, 0, 1, 0, \
type, 1, dpl, 1, (uint) (lim) >> 16, 0, 0, 1, 0,
\
(uint) (base) >> 24 }
(uint) (base) >> 24 }
#define DPL_USER 0x3 // User DPL
#define DPL_USER 0x3 // User DPL
...
@@ -81,9 +81,9 @@ struct segdesc {
...
@@ -81,9 +81,9 @@ struct segdesc {
// Task state segment format
// Task state segment format
struct
taskstate
{
struct
taskstate
{
uint
link
;
// Old ts selector
uint
link
;
// Old ts selector
uint
esp0
;
// Stack pointers and segment selectors
uint
esp0
;
// Stack pointers and segment selectors
ushort
ss0
;
// after an increase in privilege level
ushort
ss0
;
// after an increase in privilege level
ushort
padding1
;
ushort
padding1
;
uint
*
esp1
;
uint
*
esp1
;
ushort
ss1
;
ushort
ss1
;
...
@@ -91,10 +91,10 @@ struct taskstate {
...
@@ -91,10 +91,10 @@ struct taskstate {
uint
*
esp2
;
uint
*
esp2
;
ushort
ss2
;
ushort
ss2
;
ushort
padding3
;
ushort
padding3
;
void
*
cr3
;
// Page directory base
void
*
cr3
;
// Page directory base
uint
*
eip
;
// Saved state from last task switch
uint
*
eip
;
// Saved state from last task switch
uint
eflags
;
uint
eflags
;
uint
eax
;
// More saved state (registers)
uint
eax
;
// More saved state (registers)
uint
ecx
;
uint
ecx
;
uint
edx
;
uint
edx
;
uint
ebx
;
uint
ebx
;
...
@@ -102,7 +102,7 @@ struct taskstate {
...
@@ -102,7 +102,7 @@ struct taskstate {
uint
*
ebp
;
uint
*
ebp
;
uint
esi
;
uint
esi
;
uint
edi
;
uint
edi
;
ushort
es
;
// Even more saved state (segment selectors)
ushort
es
;
// Even more saved state (segment selectors)
ushort
padding4
;
ushort
padding4
;
ushort
cs
;
ushort
cs
;
ushort
padding5
;
ushort
padding5
;
...
@@ -116,8 +116,8 @@ struct taskstate {
...
@@ -116,8 +116,8 @@ struct taskstate {
ushort
padding9
;
ushort
padding9
;
ushort
ldt
;
ushort
ldt
;
ushort
padding10
;
ushort
padding10
;
ushort
t
;
// Trap on task switch
ushort
t
;
// Trap on task switch
ushort
iomb
;
// I/O map base address
ushort
iomb
;
// I/O map base address
};
};
// Gate descriptors for interrupts and traps
// Gate descriptors for interrupts and traps
...
@@ -141,16 +141,16 @@ struct gatedesc {
...
@@ -141,16 +141,16 @@ struct gatedesc {
// - dpl: Descriptor Privilege Level -
// - dpl: Descriptor Privilege Level -
// the privilege level required for software to invoke
// the privilege level required for software to invoke
// this interrupt/trap gate explicitly using an int instruction.
// this interrupt/trap gate explicitly using an int instruction.
#define SETGATE(gate, istrap, sel, off, d)
\
#define SETGATE(gate, istrap, sel, off, d) \
{
\
{ \
(gate).off_15_0 = (uint) (off) & 0xffff; \
(gate).off_15_0 = (uint) (off) & 0xffff; \
(gate).ss = (sel); \
(gate).ss = (sel); \
(gate).args = 0; \
(gate).args = 0; \
(gate).rsv1 = 0; \
(gate).rsv1 = 0; \
(gate).type = (istrap) ? STS_TG32 : STS_IG32; \
(gate).type = (istrap) ? STS_TG32 : STS_IG32;
\
(gate).s = 0; \
(gate).s = 0;
\
(gate).dpl = (d); \
(gate).dpl = (d); \
(gate).p = 1; \
(gate).p = 1;
\
(gate).off_31_16 = (uint) (off) >> 16; \
(gate).off_31_16 = (uint) (off) >> 16;
\
}
}
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论