1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com)
我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光,看起来MIT的课程的确是很有饱满度。
这里,再整理一份课程中的作业要求。
家庭作业:xv6 CPU alarm
在本练习中,您将向xv6添加一个功能,该功能在进程使用CPU时间时定期提醒进程。这对于那些想限制占用CPU时间的计算绑定进程,或者对于那些想计算但又想采取一些周期性行动的进程来说,可能很有用。更一般地说,您将实现用户级中断/故障处理程序的原始形式;例如,您可以使用类似的方法来处理应用程序中的页面错误。
您应该添加一个新的alarm(interval, handler)系统调用。如果应用程序调用alarm(n, fn),那么在程序消耗的CPU时间的每n个“滴答”之后,内核将导致调用应用程序函数fn。当fn返回时,应用程序将从停止的位置恢复。在xv6中,tick是一个相当任意的时间单位,由硬件计时器生成中断的频率决定。
您应该将以下示例程序放在alarmtest.c中:
该程序调用alarm(10,periodic),要求内核每隔10次强制调用periodic(),然后挂起一段时间。在内核中实现alarm()系统调用后,alarmtest应该会产生如下输出:
(如果您只看到一个“alarm!”,请尝试将alarmtest.c中的迭代次数增加10倍。)
提示:您需要修改Makefile,以便将alarmtest.c编译为xv6用户程序。
提示:要放入user.h的正确声明是:
提示:您还必须更新syscall.h和usys.S,以允许alarmtest调用报警系统调用。
提示:您的sys_alarm()应该将报警间隔和指向处理程序函数的指针存储在proc结构中的新字段中;见proc.h。
提示:这里有一个可用的sys_alarm():
将其添加到syscall.c中,并将SYS_ALARM的条目添加到该文件中的syscalls数组中。
提示:您需要跟踪从上一次调用(或直到下一次调用)到进程的alarm处理程序已经传递了多少节拍;为此,您还需要在struct proc中添加一个新字段。您可以在proc.c中的allocproc()中初始化proc字段。
提示:每一次滴答声,硬件时钟都会强制中断,在trap()中按T_IRQ0+IRQ_TIMER处理;你应该在这里添加一些代码。
提示:只有当有进程在运行并且计时器中断来自用户空间时,才需要操作进程的alarm信号;你想要这样的东西
提示:在您的IRQ_TIMER代码中,当进程的alarm间隔到期时,您希望让它执行其处理程序。你是怎么做到的?
提示:你需要安排一些事情,这样当处理程序返回时,进程就会恢复执行它停止的地方。你怎么能做到这一点?
提示:您可以在alarmtest.asm中看到alarmtest程序的汇编代码。
提示:如果你告诉qemu只使用一个CPU,你可以通过运行
如果您的解决方案在调用处理程序时不保存调用方保存的用户寄存器,那就没问题了。
可选的挑战:1)保存和恢复调用方保存的用户注册到处理程序的调用。2) 防止对处理程序的重入调用——如果处理程序尚未返回,请不要再调用它。3) 假设你的代码没有检查tf->esp是否有效,那么就对内核进行安全攻击,利用你的alarm处理程序调用代码。
小结:这就是这一次的作业要求,这里面新引入了一个叫做alarm的概念。而这个概念其实在我现在使用的RTOS中也是有的,至于这个Alarm在底层的实现机制是什么样子的,之前的确是没有研究过。借着这个机会,需要对此进行一个更加透彻的学习分析。
相关文章:

1676_MIT 6.828 xv6中的CPU alarm_资料翻译整理
全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 我觉得看了几个MIT的课程之后让我觉得我的大学四年有点浪费时光,看起来MIT的课程的确是很有饱满度。 这里,再整理一份课程中的作业要求。 …...

记一次内存泄漏问题的排查
阶段一: 前段时间,突然发现服务在毫无征兆的情况下发生了重启。去看了一下容器退出的日志,发现内存利用率超过了100%,导致容器重启,进一步看了skyWalking,发现heap内存超了,当时只是简单的以为是…...

QML控件--Drawer
文章目录一、控件基本信息二、控件使用三、属性成员一、控件基本信息 Import Statement:import QtQuick.Controls 2.14 Since:Qt 5.7 Inherits:Popup 二、控件使用 Drawer:提供一个可以使用滑动手势打开和关闭的侧面板ÿ…...

PHY- PHY芯片概述
1 PHY概述 关于Internet Protocal的分层模型可以参考文章 :【Internet Protocal-OSI模型中的网络分层模型】,下面我们讲讲底层以太网控制器和收发器的知识。其主要是处理OSI模型中的物理层和链路层的事情。 在CAN/CANFD、FlexRay等总线中,有控制器Controller和收发器Transc…...
【C++】如何获取当前正在运行的函数的名称?
func、FUNCTION、__PRETTY_FUNCTION__的区别 常用获取函数名成的方法都有__func__、FUNCTION、PRETTY_FUNCTION。那么它们的区别是什么呢? 1) func、FUNCTION: 主要是获取函数的名称。 2) PRETTY_FUNCTION: 不仅能获取函数的名称&am…...

42.原型对象 prototype
目录 1 面向对象与面向过程 2 原型对象 prototype 3 在内置对象中添加方法 4 constructor 属性 5 实例对象原型 __proto__ 6 原型继承 7 原型链与instanceof 7.1 原型链 7.2 instanceof 8 案例-模态框 1 面向对象与面向过程 编程思想有 面向过程 与 面向…...

python 读写txt方法
1. Python支持在程序中读写 txt文件。这里有两种方式: 方式一:使用 python内置函数,该函数将一个字符串的长度转换为与这个字符串长度相关的值。 例如:" readme"("r)。 prin…...

香橙派pi5下,debian,docker19.03.9版本runc容器逃逸
在香橙派pi5下,debian,docker19.03.9版本下,安装系统后,启动docker,显示一切正常。 当加入k8s集群以后,可以正常连接到集群,node状态显示为ready。看起来一切正常。不过过一会之后,香橙派节点内存飙升,然后挂掉。重连失败,需要重启后才能重连。且swapoff -a命令执行…...
Thinkphp6.0中间件.上
本节课我们来学习一下中间件的用法,定义一下中间件。 一.定义中间件 1. 中间件的主要用于拦截和过滤 HTTP 请求,并进行相应处理; 2. 这些请求的功能可以是 URL 重定向、权限验证等等; 3. 为了进一步了解中间件的用法&…...
十进制到八进制的转换
目录 十进制到八进制的转换 程序设计 程序分析 十进制到八进制的转换 【问题描述】对于输入的任意一个非负十进制整数n(0=<n<100000),打印输出与其等值的八进制数 【输入形式】非负十进制整数 【输出形式】相应十进制整数转换后的八进制正整数,若输入不符合要求,…...

【从零开始学Skynet】基础篇(四):网络模块常用API
游戏服务端要处理客户端请求,作为服务端引擎,网络编程也是Skynet的核心功能。1、学习网络模块 skynet.socket模块提供了网络编程的API,常用的API如下表所示:Lua API说明socket.listen(address ,port)监听一个端口,返回…...

怎么免费制作logo?logo免费设计在线生成,从此设计不求人
你有没有因为Logo制作而烦恼过?对于很多人来说,logo制作是一项比较大的工程,需要专门的设计师才能完成。但是请人设计费用高还很费时间,还需多次沟通修改。其实,我们可以自己免费制作logo,下面,…...

【目标检测】目标检测遇上知识图谱:Object detection meets knowledge graphs论文解读与复现
前言 常规的目标检测往往是根据图像的特征来捕捉出目标信息,那么是否有办法加入一些先验信息来提升目标检测的精准度? 一种可行的思路是在目标检测的输出加入目标之间的关联信息,从而对目标进行干涉。 2017年8月,新加波管理大学…...

IDEA重复下载SNAPSHOT包问题
问题现象 reimport 之后 状态栏显示resolving dependencies… 遇到某个比较大的快照包(33M),同一天的第2个版本时 1.0-xxx-SNAPSHOT.时间戳-2 idea importer 会先分片下载 x.jar.part文件中,然后复制为x.jar吧 如图中所示,其实已经下载完了&…...

【Unity入门】12.MonoBehaviour事件函数
【Unity入门】MonoBehaviour事件函数 大家好,我是Lampard~~ 欢迎来到Unity入门系列博客,所学知识来自B站阿发老师~感谢 (一)常用的事件函数 (1)start和update方法 之前我们写的脚本,会默认帮助…...
1.3 Docker Compose-详细介绍
Docker Compose是一个用于定义和运行多个Docker容器的工具。它可以让用户轻松地定义和管理多个容器的配置,并且可以通过简单的命令来启动、停止和重启这些容器。在本文中,我们将详细介绍Docker Compose的使用和功能。 一、Docker Compose的安装 Docker…...

数据分析:麦当劳食品营养数据探索并可视化
系列文章目录 作者:i阿极 作者简介:Python领域新星作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒关注…...
ES6标准
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准 前端es6是模块化开发;es6模块化规范就是浏览器端与服务器端通用的模块化开发规范,其中定义了每一个JavaScript文件都是一个独立的模块,导入其他模块成员…...

ASP一个物流商品运输系统的设计与实现
物流运输行业的今天正朝着追求高效、低成本、稳定可靠的方向发展。本文详细介绍了网上物流管理系统,涉及到客户端运输线路设计、过程跟踪等功能模块以及管理员端的相应模块的具体实现,分析了整个系统的架构、工作原理、实现功能等。系统采用ASPMS SQL以B…...
肖 sir_就业课__009ui自动化讲解
ui自动化讲解 1、你做过自动化测试吗?做过 ui自动化测试、接口自动化、app自动化 2、你讲下你做的ui接口自动化? (1)第一种:按照线性流程讲解 :pythonselenium 库做ui自动化 (2)第二…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...