没有合适的资源?快使用搜索试试~ 我知道了~
KThread和TCB的构造顺序分析
5星 · 超过95%的资源 需积分: 10 8 下载量 53 浏览量
2011-08-18
17:12:37
上传
评论
收藏 618KB PPT 举报
温馨提示
试读
23页
资源中是KThread和TCB的构造顺序分析PPT文件
资源详情
资源评论
资源推荐
What’s wrong?
public int listen() {
lock.acquire();
if (!present) // 如果没有留言
empty.sleep(); // 则睡眠
// 取得留言
int word = bu#er;
present = false;
// 唤醒正在等待发言的人
full.wake();
lock.release();
return word;
}
public void speak(int word) {
lock.acquire();
if (present) // 如果已有留言
full.sleep(); // 则睡眠
// 留言
bu#er = word;
present = true;
// 唤醒正在等待接受留言的人
empty.wake();
lock.release();
}
Wrong or Not?
public class KThread {
...
/* Unique identifer for this thread. Used to deterministically
compare threads. */
private int id = numCreated++;
/* Number of times the KThread constructor was called. */
private static int numCreated = 0;
...
}
How to Read code?
Case Study: KThread 和 TCB 的构造顺序分
析
一个 KThread 必然有一个 TCB 吗?
每个 TCB 必然在运行一个 KThread 吗?
先有第一个 TCB ,还有先有第一个 KThread ?
KThread 和 TCB 的构造顺序分析
——先有鸡还是先有蛋?
首先被构造出的是 TCB ,在 Machine.main 完成各种环境初始化后,最后一
句写的是:
new TCB().start(new Runnable() {
public void run() {
autoGrader.start(privilege); }});
其实, autoGrader.start 会构造一个 Kernel 的实例 ( 根据 Nachos.co# 的设
置,目前就是 ThreadKernel) ,并且调用 Kernel.initialize 令其自我初始
化
转入 ThreadKernel.initialize , ThreadKernel 首先装入自己需要的
Scheduler 和 FileSystem, 然后鬼使神差般地写了一句:
new KThread(null);
这就是最早的 KThread 的实例。(我们称它叫“ new KThread No1” )
剩余22页未读,继续阅读
nebuace
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1