Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
31066c21
提交
31066c21
5月 23, 2011
创建
作者:
Frans Kaashoek
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
no more proctable
still need to fix kill
上级
95e3785c
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
12 行增加
和
42 行删除
+12
-42
proc.c
proc.c
+12
-41
proc.h
proc.h
+0
-1
没有找到文件。
proc.c
浏览文件 @
31066c21
...
...
@@ -21,7 +21,6 @@ void
pinit
(
void
)
{
int
c
;
int
i
;
for
(
c
=
0
;
c
<
NCPU
;
c
++
)
{
...
...
@@ -31,12 +30,6 @@ pinit(void)
ptables
[
c
].
name
[
0
]
=
(
char
)
(
c
+
'0'
);
safestrcpy
(
ptables
[
c
].
name
+
1
,
"ptable"
,
MAXNAME
-
1
);
initlock
(
&
ptables
[
c
].
lock
,
ptables
[
c
].
name
);
for
(
i
=
0
;
i
<
NPROC
;
i
++
)
{
initlock
(
&
ptables
[
c
].
proc
[
i
].
lock
,
ptables
[
c
].
proc
[
i
].
name
);
initcondvar
(
&
ptables
[
c
].
proc
[
i
].
cv
,
ptables
[
c
].
proc
[
i
].
name
);
}
runqs
[
c
].
name
[
0
]
=
(
char
)
(
c
+
'0'
);
safestrcpy
(
runqs
[
c
].
name
+
1
,
"runq"
,
MAXNAME
-
1
);
initlock
(
&
runqs
[
c
].
lock
,
runqs
[
c
].
name
);
...
...
@@ -55,29 +48,17 @@ allocproc(void)
struct
proc
*
p
;
char
*
sp
;
#if 0
acquire(&ptable->lock);
for(p = ptable->proc; p < &ptable->proc[NPROC]; p++)
if(p->state == UNUSED)
goto found;
release(&ptable->lock);
return 0;
found:
p->state = EMBRYO;
release(&ptable->lock);
#else
p
=
kmalloc
(
sizeof
(
struct
proc
));
if
(
p
==
0
)
return
0
;
memset
(
p
,
0
,
sizeof
(
*
p
));
p
->
state
=
EMBRYO
;
initlock
(
&
p
->
lock
,
"proc"
);
initcondvar
(
&
p
->
cv
,
"proc"
);
#endif
p
->
state
=
EMBRYO
;
p
->
pid
=
ptable
->
nextpid
++
;
p
->
cpuid
=
cpu
->
id
;
// Allocate kernel stack if possible.
if
((
p
->
kstack
=
kalloc
())
==
0
){
p
->
state
=
UNUSED
;
...
...
@@ -157,7 +138,6 @@ userinit(void)
extern
char
_binary_initcode_start
[],
_binary_initcode_size
[];
p
=
allocproc
();
cprintf
(
"allocproc -> 0x%x
\n
"
,
p
);
initproc
=
p
;
if
((
p
->
vmap
=
vmap_alloc
())
==
0
)
panic
(
"userinit: out of vmaps?"
);
...
...
@@ -593,11 +573,12 @@ forkret(void)
int
kill
(
int
pid
)
{
struct
proc
*
p
;
//
struct proc *p;
int
c
;
for
(
c
=
0
;
c
<
NCPU
;
c
++
)
{
acquire
(
&
ptables
[
c
].
lock
);
#if 0
for(p = ptables[c].proc; p < &ptables[c].proc[NPROC]; p++){
acquire(&p->lock);
if(p->pid == pid){
...
...
@@ -620,6 +601,7 @@ kill(int pid)
}
release(&p->lock);
}
#endif
release
(
&
ptables
[
c
].
lock
);
}
return
-
1
;
...
...
@@ -640,28 +622,17 @@ procdump(int c)
[
RUNNING
]
"run "
,
[
ZOMBIE
]
"zombie"
};
int
i
;
struct
proc
*
p
;
struct
proc
*
q
;
char
*
state
;
#if 0
uint pc[10];
cprintf
(
"proc table cpu %d
\n
"
,
c
);
for
(
p
=
ptables
[
c
].
proc
;
p
<
&
ptables
[
c
].
proc
[
NPROC
];
p
++
){
if
(
p
->
state
==
UNUSED
)
continue
;
if
(
p
->
state
>=
0
&&
p
->
state
<
NELEM
(
states
)
&&
states
[
p
->
state
])
state
=
states
[
p
->
state
];
else
state
=
"???"
;
cprintf
(
"%d %s %s"
,
p
->
pid
,
state
,
p
->
name
);
if
(
p
->
state
==
SLEEPING
){
getcallerpcs
((
uint
*
)
p
->
context
->
ebp
+
2
,
pc
);
for
(
i
=
0
;
i
<
10
&&
pc
[
i
]
!=
0
;
i
++
)
cprintf
(
" %p"
,
pc
[
i
]);
}
cprintf
(
"
\n
"
);
if(p->state == SLEEPING){
getcallerpcs((uint*)p->context->ebp+2, pc);
for(i=0; i<10 && pc[i] != 0; i++)
cprintf(" %p", pc[i]);
}
#endif
struct
proc
*
q
;
cprintf
(
"runq: "
);
STAILQ_FOREACH
(
q
,
&
runqs
[
c
].
runq
,
run_next
)
{
if
(
q
->
state
>=
0
&&
q
->
state
<
NELEM
(
states
)
&&
states
[
q
->
state
])
...
...
proc.h
浏览文件 @
31066c21
...
...
@@ -124,7 +124,6 @@ struct runq {
struct
ptable
{
char
name
[
MAXNAME
];
struct
spinlock
lock
;
struct
proc
proc
[
NPROC
];
struct
proc
*
runq
;
int
nextpid
;
};
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论