pintos (1) -- Alarm Clock

【UCB操作系统CS162项目】Pintos Lab1:线程调度 Threads 开始之前 如文档所述,在开始编写代码之前需要先阅读掌握 GETTING STARTED 部分和附录中 Code Guide 部分的前四节(重点是 Synchronization)、4.4BSD Scheduler 部分以及 C Standards 部分内容。 阅读详情

实现非阻塞的timer_sleep()函数。

线程调用timer_sleep()后主动block,并设置blockticks,每次时钟中断blockticks减1,待其减为0时unblock


struct thread 添加属性:

long long blockticks;    /* Ticks to be block.*/

同时在init_thread()中对其进行初始化:

t->blockticks = 0;

timer.c修改timer_sleep()函数:

/* Sleeps for approximately TICKS timer ticks.
 * Interrupts must be turned on.
 */
void
timer_sleep (int64_t ticks) 
{
    if(ticks <= 0){
        return;
    }
    enum intr_level old_level = intr_disable ();/* Disable interrupt.*/
    thread_current()->blockticks = ticks;       /* Set block ticks.*/
    thread_block();                             /* Block current thread.*/
    intr_set_level (old_level);                 /* Enable interrupt.*/

}

thread.c添加thread_dec_blockticks()函数:

/*
 * DEC a thread's block ticks
 * and awake thread if block ticks over.
 * This function must be called with interrupts off.
 */
void thread_dec_blockticks(struct thread *t, void *aux){
    if(t->status == THREAD_BLOCKED){
        if(t->blockticks == 1){
            /* It's time to unblock.
             * 0 means the thread no set block ticks.
             * So here use 1 to judge.
             */
            thread_unblock(t);
        }
        /*
         * DEC the block ticks;
         */
        if(t->blockticks != 0)
            t->blockticks--;
    }
}

同时在thread_tick()函数中使用thread_foreach()调用thread_dec_blockticks()

  /* Find if a thread need to be awake from block
   * by block ticks over.
   */
  enum intr_level old_level = intr_disable ();
  thread_foreach(thread_dec_blockticks, NULL);
  intr_set_level (old_level);

通过测试:alarm-single alarm-multiple alarm-simultaneous alarm-zero alarm-negative

Pintos操作系统 Project1_Thread Pintos操作系统 Project1_Thread Misson 1 ALARM CLOCK 实验说明 重新实现timer_sleep()。此代码已经提供了一个实现,采用的是忙等待策略,即即它在循环中检查当前时间是否已经过去ticks个时钟,并循环调用thread_yield()直到循环结束。我们要重新实现来避免它的忙等待。 实现思路 调用timer_sleep的时候直接把线程阻塞掉,然后给线程... 阅读详情

相关推荐

PINTOS——Project 1: Threads

目录 1. Task 1:Alarm Clock 1.1实验要求 1.2基础知识 1.3设计思路 1.4实验过程 1.5实验结果: 1.6收获与总结 2. Task 2:优先级调度 2.1实验要求 2.2实验过程 2.3实验结果 3. Task 3:多级反馈调度 3.1实验要求 3.2基础知识 3.3实验过程 3.4实验结果 3.5收获与...

liiiii_22的博客 4572

操作系统课程设计--pintos源码的分析与修改

Pintos是Stadford大学为操作系统课程专门开发的一个基于80x86架构的简单操作I型操作系统框架,我们的目标是编写或者改造这一OS。该课题总共分为4个project,如下图所示: Task one 今天专门来谈第一个project 的第一个问题--Alarm clock的改进。 一.源码分析 Pintos源码/device/timer.c中有一个timer_sle

lhyer的专栏 4561

OS-2019Pintos第一次实验

Pintos Project11 Alarm Clock1.1 源码分析1.2 实现思路1.3 实现代码1.4 实验结果2 Priority Scheduling2.1就绪队列为优先级队列2.2 高优先级线程优先执行2.3 优先级捐赠3 Advanced Scheduler3.1 实验准备3.2实现思路3.3实验代码 小组成员:      &nbs...

v冰糖葫芦五加皮v 2384

操作系统课程设计 Pintos 1 ALarm Clock 问题

问题描述: 实现linux中的thread.sleep()函数,其功能是让调用他的线程睡眠一段时间(ticks),然后唤醒。 pintos 本身的sleep函数 void timer_sleep(int 64_t ticks){ Int 64_t start = timer_ticks(); ASSERT(intr_get_level ==INTR_ON); while(timer_elap...

weixin_42955902的博客 3374

Pintos project 1 实验报告(代码分享)

任务一 Alarm Clock 用到的相干目录有: pintos/src/devices time.h && time.c pintos/src/threads thread.h && thread.c 预期pass希望:暂无,安装pintos之后,第一次对threads进行make check操作,可以发现以alarm--开头的前六个文件,以及mlfqs-fair-2和mlfqs-fair-20文件,一开始就测试成功pass。但是为了避免对后期的修改有影响,这里还是要

m0_53112875的博客 6869

linux服务器开发(定时器函数)alarm和slepp

参数:系统睡眠时间返回值:剩余睡眠时间作用:让进程(线程是轻量级的进程,也算进程)进入睡眠状态;

hpx12345678的博客 870

pintos project (2) Project 1 Thread -Mission 1 Explanation

一 开篇   这篇博客开始介绍pintos project的第一个任务: Project 1 Threads      操作系统这门课对我个人而言算是比较有难度很有挑战的一门课,但是我非常的喜欢,关于一些算法性质的东西,在课上的时候可能不是很了解,但是通过pintos这个实验,很多东西自然而然的就明白了。   实验一从一开始我参考了这篇博客Pintos-斯坦福大学操作系统Pr...

weixin_34082695的博客 338

alarm()闹钟函数

#include #include #include #include       int main(void) {        int ret = alarm(5);        printf("第一次调用返回值:%d\n",ret);   //返回0                      sleep(1);

shixinfeng_st的博客 925

西电Pintos操作系统课程设计 实验二

实验二:Alarm-Clock 一、实验目的 重新实现timer_sleep()函数,避免“忙等待”的发生。通过阅读Pintos部分源码,初步了解Pintos操作系统内核的关键函数和底层实现;通过重新设计并实现函数,加深对操作系统中线程、中断等理论知识的理解。 二、设计思路 三、详细实现 修改thread.h,在struct_thread结构体中添加变量block_ticks_counter,用于记录当前线程被阻塞的ticks数。 2.修改thread.c中的thread_create()函数,初始化

Polaris的博客 1万+

Pintos基础数据结构:通用链表

由于具体应用中仍然需要对存储于‘链表结点’中的数据进行访问,因此,就需要从指向‘链表元素’的指针推算出包含它的那个‘链表结点’的指针。为此,PINTOS 中引入了一个宏 list_entry,其定义和基本思想如图所示:如果已知某个‘链表元素’的指针为 p,并且该‘链表元素’以字段 elem 的形式包含在‘链表结点’结构 list_nodei 中,宏调用list_entry(p,structlist_nodei,elem)经过展开后就是指向包含该‘链表元素’的‘链表结点’的指针。那么这个指针变量怎么定义呢?

Junds0的博客 1686

Pintos安装 & Alarm-Clock 实验报告.doc

Pintos安装 & Alarm-Clock 实验报告.doc

Pintos操作系统实验二:Alarm-Clock实现与优化

本次实验通过改造Pintos的timer_sleep函数,解决原始实现中CPU空转的问题。传统忙等待方式会持续占用CPU资源,而优化后的方案通过线程阻塞和中断检查实现高效休眠。对每个阻塞线程的计数器减1,当数值归零时调用thread_unblock唤醒线程。:在thread结构体中新增block_ticks_counter变量,用于记录线程需要阻塞的时间片数量。这是整个机制能正常工作的时序保障,需要处理好与原有中断逻辑的兼容性。:在创建线程时,必须将阻塞计数器初始化为0,确保新线程默认可运行状态。

SapphireFox89的博客 649

WSL2 + Open3D点云可视化踩坑全记录:从GLFW报错到VcXsrv配置,一篇讲清所有‘坑’

本文详细解析了在WSL2环境中使用Open3D进行点云可视化时遇到的常见问题,特别是GLFW报错和VcXsrv配置问题。通过系统性的解决方案和高级配置技巧,帮助开发者彻底解决图形显示、驱动加载和库版本冲突等难题,实现高效的点云可视化。

weixin_30627341的博客 101

操作系统课程设计报告2021-2022——pintos

操作系统课程设计报告 2021-2022 目录操作系统课程设计报告 2021-2022第一章 实验项目介绍环境配置( 一 )、 Ubuntu 服务器搭建图形界面搭建( 二 )、 Pintos 系统配置( 三 )、 git环境搭建实验三 线程管理一、实验概述1.Alarm Clock算法:数据结构增加部分:需要的函数:2.Priority Scheduling算法:数据结构增加部分:需要的函数:修改部分:3.Advanced Scheduler算法:数据结构增加部分:需要的函数:修改部分:二、实验内容1.

The_Dan的博客 3738

〖进阶篇1〗YAML参数解析:从nav2_params.yaml看机器人导航调优

本文深入解析了ROS2 Nav2导航系统中关键的nav2_params.yaml文件,提供了从定位、行为树、运动控制到环境感知等核心模块的参数调优实战指南。文章通过具体场景案例,如狭窄走廊、动态仓库和高精度对接,详细阐述了如何调整AMCL粒子数、控制器权重、代价地图膨胀半径等参数,以解决机器人导航中的犹豫、碰撞和精度问题,帮助开发者实现从“能用”到“好用”的进阶。

m9n0o的博客 417

WPS文档中心和文档中台 operate 未授权访问漏洞(CVE-2025-0717)

WPS文档中心和文档中台的/open/v6/api/etcd/operate?key=/config/storage&method=get接口存在未授权访问漏洞,攻击者可通过该漏洞获取AK/SK密钥等信息,这些密钥通常用于系统内部认证和权限控制,泄露后可能导致攻击者进一步修改K8s配置、部署恶意容器或执行远程命令,最终实现对系统的完全控制。

李同學AI安全 905

php pcntl_alarm,php中pcntl_alarm为函数设置超时限制

php中pcntl_alarm为函数设置超时限制原理是在函数执行前先设定一个时钟信号,如果函数的执行超过规定时间,信号会被触发,信号处理函数(sig)会抛出一个异常,被外层代码捕获。这样就跳出了原来函数的执行,接着执行下面的代码。如果函数在规定的时间内,时钟信号不会触发,在函数结束后清除时钟信号,不会有异常抛出到php官方查看此函数说明pcntl_alarm (PHP 4 >= 4.3.0,...

weixin_42515364的博客 327

【AI智能体】Coze 数据库从使用到实战操作详解

Coze 数据库使用到实战详解

congge 5915

Linux进程之alarm()信号传送闹钟函数

最近在学习Linux系统编程遇到了一个很有意思的函数:alarm(),它是一个用来设置信号传送的闹钟函数。网上找了一些资料,结合自己的学习体会,现在Mark一下。 1 alarm()函数说明 [1] 引用头文件:#include ; [2] 函数标准式:unsigned int alarm(unsigned int seconds); [3] 功能与作用:alarm()函数的主要功

ken_lyy的专栏 7103

SAP_SD模块-销售批次策略应用记录

SAP_SD模块-销售批次策略完整案例

风沙的博客 2611

OpenCASCADE:Direct3D CSharp 示例

OpenCASCADE:Direct3D CSharp 示例OpenCASCADE:Direct3D CSharp 示例 OpenCASCADE:Direct3D CSharp 示例 此示例演示了如何在使用CSharp和Windows Presentation Foundation (WPF)编写的.Net应用程序中使用 OCCT 和 DirectX 库。 .Net、OCCT (C++) 和 DirectX 级别之间的连接由用 C++/CLI 编写的代理库OCCProxy和D3DProxy提供。代理库OCC

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1827

linux中的sleep与alarm

sleep#include <unistd.h> unsigned int sleep(unsigned int seconds);此函数使调用进程被挂起,直到满足以下条件之一 (1)已经过了seconds所指定的墙上时钟时间 (2)调用进程捕捉到一个信号并从信号处理程序返回 注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。sleep的返回值 (1)在上述第一种情形中

u011617097的博客 1162

YOLOv8轻量化模型瘦身术:深度解析与实战LAMP剪枝 YOLOv8(2021)

YOLOv8模型LAMP剪枝技术解析与实战 本文深入探讨了LAMP剪枝技术在YOLOv8目标检测模型中的应用。针对深度学习模型部署面临的资源限制问题,LAMP剪枝通过最小化L2失真和层自适应稀疏度分配,实现了高效模型压缩。相比传统幅度剪枝的"一刀切"方法,LAMP创新性地将剪枝建模为优化问题,定义LAMP分数来衡量权重重要性,自动确定各层最佳剪枝率。文章从理论基础出发,详细解析了LAMP的核心数学公式和算法流程,并提供了完整的YOLOv8移植实战指南,包括代码结构、剪枝步骤和微调策略。通

FJN110的博客 2422

【头歌-操作系统】Pintos的编译、运行和调试

100。

Keyser_的博客 1464

【OpenClaw从入门到精通】第20篇:OpenClaw实战—从零搭建教育自动化助教系统(作业批改+智能答疑+学情分析)【2026实测】

本文基于OpenClaw开源框架,聚焦教育行业“答疑重复、批改耗时、学情模糊”三大核心痛点,提供从环境部署到功能落地的全流程实操方案。通过整合QQ群交互、代码分析、数据可视化等技能,构建“智能答疑+作业批改+学情分析”的自动化助教系统。系统支持7×24小时群聊答疑、多语言作业自动评审、学情数据周报生成,经实测可使助教工作时间减少60%、作业批改效率提升5-10倍、学情问题识别提前5周。文中包含完整配置步骤、可直接运行的代码示例及避坑指南,兼顾新手入门与进阶实操,帮助教育工作者快速落地自动化工具,从重复劳动中

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1451

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

linux延时函数 sleep,Linux中的sleep和alarm在延时作用中的区别和联系

sleep函数:#include unsigned int sleep(unsigned int seconds);此函数使调用进程被挂起,直到满足以下条件之一:1)已经过了seconds所指定的墙上时钟时间2)调用进程捕捉到一个信号并从信号处理程序返回注:由于其他系统活动,实际返回时间比所要求的会迟一些,像alarm一样。sleep的返回值:1)在上述第一种情形中,返回值是02)当由于捕捉到某个...

weixin_29608291的博客 698

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 使用select进行 阻塞式/低CPU消耗 延时
下一篇: pintos (0) --前言
windroid
博客等级 码龄12年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值