Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
431d5f17
提交
431d5f17
3月 25, 2012
创建
作者:
Silas Boyd-Wickizer
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Random proc.cc clean up..
上级
d3427f08
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
34 行增加
和
21 行删除
+34
-21
kernel.hh
include/kernel.hh
+0
-1
proc.hh
include/proc.hh
+15
-7
proc.cc
kernel/proc.cc
+18
-12
sysproc.cc
kernel/sysproc.cc
+1
-1
没有找到文件。
include/kernel.hh
浏览文件 @
431d5f17
...
...
@@ -173,7 +173,6 @@ void finishproc(struct proc*);
void
exit
(
void
);
int
fork
(
int
);
int
growproc
(
int
);
int
kill
(
int
);
void
pinit
(
void
);
void
procdumpall
(
void
);
void
scheduler
(
void
)
__noret__
;
...
...
include/proc.hh
浏览文件 @
431d5f17
...
...
@@ -41,7 +41,13 @@ struct mtrace_stacks {
};
#endif
enum
procstate
{
EMBRYO
,
SLEEPING
,
RUNNABLE
,
RUNNING
,
ZOMBIE
};
typedef
enum
procstate
{
EMBRYO
,
SLEEPING
,
RUNNABLE
,
RUNNING
,
ZOMBIE
}
procstate_t
;;
// Per-process state
struct
proc
:
public
rcu_freed
{
...
...
@@ -80,12 +86,14 @@ struct proc : public rcu_freed {
LIST_ENTRY
(
proc
)
cv_sleep
;
// Linked list of processes sleeping on a cv
u64
user_fs_
;
virtual
void
do_gc
(
void
)
{
delete
this
;
}
void
set_state
(
enum
procstate
s
);
enum
procstate
get_state
(
void
)
const
{
return
state_
;
}
int
set_cpu_pin
(
int
cpu
);
static
proc
*
alloc
();
void
set_state
(
procstate_t
s
);
procstate_t
get_state
(
void
)
const
{
return
state_
;
}
int
set_cpu_pin
(
int
cpu
);
static
int
kill
(
int
pid
);
int
kill
();
virtual
void
do_gc
(
void
)
{
delete
this
;
}
private
:
proc
(
int
npid
);
...
...
@@ -94,5 +102,5 @@ private:
proc
(
const
proc
&
x
);
NEW_DELETE_OPS
(
proc
);
enum
procstate
state_
;
// Process state
procstate_t
state_
;
// Process state
};
kernel/proc.cc
浏览文件 @
431d5f17
...
...
@@ -264,18 +264,11 @@ initproc(void)
// Process won't exit until it returns
// to user space (see trap in trap.c).
int
kill
(
int
p
id
)
proc
::
kill
(
vo
id
)
{
struct
proc
*
p
;
p
=
xnspid
->
lookup
(
pid
);
if
(
p
==
0
)
{
panic
(
"kill"
);
return
-
1
;
}
acquire
(
&
p
->
lock
);
p
->
killed
=
1
;
if
(
p
->
get_state
()
==
SLEEPING
){
acquire
(
&
lock
);
killed
=
1
;
if
(
get_state
()
==
SLEEPING
)
{
// XXX
// we need to wake p up if it is cv_sleep()ing.
// can't change p from SLEEPING to RUNNABLE since that
...
...
@@ -287,10 +280,23 @@ kill(int pid)
// cv might be deallocated while we're using it
// (pipes dynamically allocate condvars).
}
release
(
&
p
->
lock
);
release
(
&
lock
);
return
0
;
}
int
proc
::
kill
(
int
pid
)
{
struct
proc
*
p
;
p
=
xnspid
->
lookup
(
pid
);
if
(
p
==
0
)
{
panic
(
"kill"
);
return
-
1
;
}
return
p
->
kill
();
}
// Print a process listing to console. For debugging.
// Runs when user types ^P on console.
// No lock to avoid wedging a stuck machine further.
...
...
kernel/sysproc.cc
浏览文件 @
431d5f17
...
...
@@ -33,7 +33,7 @@ sys_wait(void)
long
sys_kill
(
int
pid
)
{
return
kill
(
pid
);
return
proc
::
kill
(
pid
);
}
long
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论