xv6的设计trick(不断更新)

1、每个进程通过时钟中断出发trap.c中的

if(proc && proc->state == RUNNING && tf->trapno == T_IRQ0+IRQ_TIMER)
yield();来强制把这个进程置为Runnable状态,yield的实现如下:

acquire(&ptable.lock); //DOC: yieldlock
proc->state = RUNNABLE;
sched();
release(&ptable.lock);

在sched中

swtch(&proc->context, cpu->scheduler); 实现从当前进程的kernel Stack 切换到 CPU中专门负责程序调度的 scheduler Stack,

(gdb) p /x *cpus[0]->scheduler 
$7 = {edi = 0x0, esi = 0x80104ea4, ebx = 0x8, ebp = 0x8010c608, 
eip = 0x80104ab2}

此时,我们在 sched设置断点

(gdb)b proc.c:314

(gdb)s  进入汇编代码

在swtch的汇编代码中,我们将当前进程的esp所指向的内存地址+8 作为新的上下文的esp,然后保存老寄存值,popl加载新的寄存器的值

swtch:

movl

时间: 2024-12-19 18:47:52

xv6的设计trick(不断更新)的相关文章

【 js 基础 】【 源码学习 】源码设计 (持续更新)

学习源码,除了学习对一些方法的更加聪明的代码实现,同时也要学习源码的设计,把握整体的架构.(推荐对源码有一定熟悉了之后,再看这篇文章) 目录结构:第一部分:zepto 设计分析第二部分:underscore 设计分析 第一部分: zepto 设计分析zepto 是一个轻量级的 Javascript 库.相对于 jquery 来说在 size 上更加小,主要是定位于移动设备.它是非常好的学习源码的入门级 javascript 库.这里重点说一下,这个库的设计,而对于详细的源码学习大家可以 star

美图秀秀美化图片之【边框】界面设计【重大更新】

在进行写边框前,需要通知大家一声,整个美化图片的界面开发已经完全重写,请大家先下载最新的项目[点击下载] 效果图 在前面的开发方法中由于没有考虑许多因素,造成viewcontroller代码混乱,所以重新开发了界面,所有美化图片的独立功能都具有一个独立的viewController,这样不易混乱.另外学习到了,使用 imageNamed方法时,如果图片的格式是PNG的可以不加.png,但是其他比如jpg的图片必须加.jpg后缀. 一.链接 else if ([text isEqualToStri

客户端热更新框架之UI热更框架设计(下)

上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计与构建过程表述如下,最后附带源码工程的下载链接,供广大学员参考研究.如果大家有什么不明白的地方,欢迎大家在评论区进行讨论.   1:首先基于笔者以前设计的SUIFW 框架,做进一步功能完善.   完善UI框架对于复杂窗体的直接转向功能.为了小伙伴们能够更好的理解本技术,文章末尾特提供了下载链接供大家

数字化设计界面设计趋势

数字化设计,尤其是界面设计,新趋势之一就是简单.其实微软早在2007年可能已经开始进行对简单界面的追求了,当时他们推出的Zune播放器拥有优美的排版界面.尽管该产品的有些失败,但其UI进行了改进并且应用到Windows Phone和Windows 8界面设计里.另一方面iOS上在大量逼真的纹理和深度的基础上,加上渐变.光泽的风格效果和阴影效果,但是我们开始看到越来越多适用于所有平台的北京UI设计应用程序采用了更简约的方式. 在这篇文章中,我们配合一些漂亮的设计说明这一趋势.这些照片来自Dribb

为 DirectAccess 设计 DNS 基础结构

TechNet 库Windows ServerWindows Server 2008 R2 und Windows Server 2008浏览 Windows Server 技术NetworkingDirectAccess适用于 Windows Server 2008 R2 的 DirectAccessDirectAccess 设计指南DirectAccess 部署策略规划DirectAccess 客户端的可用资源选择 Intranet IPv6 连接设计为仅限 IPv4 的 Intranet

iphoneX设计

以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具.   iPhone X(也读作:iPhone 10)正式发布了,并定于11月3日开卖.它内置震撼的超级Retina屏幕,其分辨率为1125×2436像素. 在其屏幕顶部还有一个切口(俗称"刘海"),你可以通过它来体验未来感十足的脸部解锁功能. 这款美丽的机器将给设计师带来一些新的挑战,也将带来一些新的机会.在竖屏模式下,设备的宽度与 iPhone 6.7 和 8 相同,但比它们的屏幕足足高

MySQL触发器喝更新操作

一.触发器概念 触发器(trigger):监视某种情况,并触发某种操作,它是提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,例如当对一个表进行操作( insert,delete, update)时就会激活它执行. 触发器经常用于加强数据的完整性约束和业务规则等. 触发器创建语法四要素:1.监视地点(table)2.监视事件(insert/update/delete)3.触发时间(after/befor

JAVA面向对象编程课程设计——网络版单机斗地主

一.团队介绍 成员姓名 任务分配 成员课程设计博客链接 兰泽祥(组长) 数据库,斗地主规则的实现,人机自动出牌的算法,实体类的设计 吴修恩 JSP界面的设计,前后端数据的交互,servlet设计,动态更新界面 二.项目GIT地址 fight_against_landlords 三.项目git提交记录截图 四.项目功能架构图.主要功能流程图 五.面向对象设计类图 1.CardGames类图 2.CardGame类图 3.Card类图 4.UserUserInformation类图 5.User类图

如何使用redis设计关系数据库

目录 redis设计关系数据库 前言 设计用户信息表结构 hash存储记录 set存储id 图示 索引/查询: 1.select 查询所有记录 : 类似sql的select from table_name 2.根据主键查询记录 3.其他列索引 c++ 实现 小结 redis设计关系数据库 前言 最近需要一张用户信息表,因为数据量并不大,想先放在内存中,等需求变更了,再移到磁盘上,或者往mysql塞,那么问题来了,怎么用redis的数据类型设计一个关系数据库呢. redis只有key-value这