pintos project (2) Project 1 Thread -Mission 1 Code
发布日期:2025-05-05 09:25:33
浏览次数:2
分类:精选文章
本文共 1801 字,大约阅读时间需要 6 分钟。
使线程结构体支持时间统计的实现
在Mission 1的基础上,我们正式对线程结构体进行了扩展和优化。以下是实现过程的详细步骤说明。
1. 添加ticks_blocked成员
首先,我们在thread.h文件中增加了ticks_blocked成员变量。这个变量用于记录线程被阻塞的时间戳。
/* 记录线程被阻塞的时间戳 */int64_t ticks_blocked;
2. 初始化ticks_blocked
在创建线程时,ticks_blocked应被初始化为0。在thread_create()函数中添加如下代码:
/* 设置默认 ticks_blocked 为 0 */t->ticks_blocked = 0;
3. 修改timer_sleep函数
接下来,我们对timer_sleep()函数进行了修改,确保其能够正确唤醒线程。函数逻辑如下:
/* 使当前线程等待指定的时间戳 */void timer_sleep(int64_t ticks) { if (ticks <= 0) { return; } ASSERT(intr_get_level() == INTR_ON); enum intr_level old_level = intr_disable(); struct thread *current_thread = thread_current(); current_thread->ticks_blocked = ticks; thread_block(); intr_set_level(old_level);} 4. 优化thread_block函数
为了支持上述功能,我们对thread_block()函数进行了修改:
/* 让当前线程进入阻塞状态 */void thread_block(void) { ASSERT(!intr_context()); ASSERT(intr_get_level() == INTR_OFF); thread_current()->status = THREAD_BLOCKED; schedule();} 5. 修改timer中断处理
在timer_interrupt()函数中,我们添加了线程阻塞检查的逻辑:
thread_foreach(blocked_thread_check, NULL);
6. 实现blocked_thread_check函数
为了检查每个线程的阻塞状态,我们添加了blocked_thread_check函数:
/* 检查线程的阻塞状态 */void blocked_thread_check(struct thread *t, void *UNUSED) { if (t->status == THREAD_BLOCKED && t->ticks_blocked > 0) { t->ticks_blocked--; if (t->ticks_blocked == 0) { thread_unblock(t); } }} 7. 优化thread_unblock函数
最后,我们对thread_unblock()函数进行了优化:
/* 解除线程阻塞 */void thread_unblock(struct thread *t) { enum intr_level old_level; ASSERT(is_thread(t)); old_level = intr_disable(); ASSERT(t->status == THREAD_BLOCKED); list_push_back(&ready_list, t->elem); t->status = THREAD_READY; intr_set_level(old_level);} 项目推进与问题修复
在上述实现过程中,我们遇到了几个需要修复的小错误,最终使代码能够顺利运行。通过对上述修改的逐步应用,我们实现了线程调度与中断处理的正确机制,确保了系统的稳定性与可靠性。
如需了解更多细节或查看完整代码,请访问我的GitHub仓库。
发表评论
最新留言
不错!
[***.144.177.141]2026年06月12日 17时54分28秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
PHP 使用 $_SERVER['PHP_SELF'] 获取当前页面地址及其安全性问题
2023-02-27
php 反射
2023-02-27
PHP 实现N阶矩阵相乘
2023-02-28
php 延迟静态绑定static关键字
2023-02-28
Redis入门
2023-02-28
PHP 截取字符串乱码的解决方案
2023-02-28
php 接口类与抽象类的实际作用
2023-02-28
PHP 插入排序 -- 折半查找
2023-02-28
PHP 支持8种基本的数据类型
2023-02-28
php 放大镜,放大镜放大图片效果
2023-02-28
PHP 数据库连接池实现
2023-02-28
php 数组 区别,PHP中数组的区别
2023-02-28
PHP 数组怎么添加一个元素
2023-02-28
PHP 文件操作
2023-02-28
php 文字弹幕效果代码,HTML5文字弹幕效果
2023-02-28
php 时间日期函数,获取今天开始时间,结束时间
2023-02-28
php 标准规范
2023-02-28
PHP 浮点型精度运算相关问题
2023-02-28
php 浮点型计算精度问题
2023-02-28
php 特定时间段统计,jpgraph某个时间段的数据统计
2023-02-28