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)第二…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...