尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

xv6 进程调度

xv6 进程调度
📅 发布时间:2026/6/18 20:37:28

进程调度

1、概念

对于xv6操作系统,他是一个8核cpu,一个核心严格意义上在一个时间点上只能执行一个进程,一个8核的cpu严格意义上可以同时执行8个进程。那么为什么会有一个单核cpu同时执行多个进程的说法呢?实际上是cpu的进程调度机制,cpu规定一个进程不能一直执行下去,某个进程执行一段时间之后,会被暂停被迫让出cpu供其他进程运行,等到其他进程也执行相应的时间后该进程才有机会再次被执行。正是这种轮询的进程调度机制,给人一种单核cpu能同时运行多个进程的感觉。

2、进程调度分析

  • 整体流程:

    ①、每个cpu核心在mian.c完成初始化后都会进入scheduler函数进行进程调度,scheduler()函数是一个死循环会一直寻找处于就绪态的进程来执行。

    ②、当有一个新进程被调度的时候,scheduler中的swtch会先把scheduler的上下文存放到当前cpu的结构体contest中,然后切换上下文去调度新进程。

    ③、进程开始执行一段时间,cpu的时间片到了,触发定时器中断,进程进入trap执行yield,保存当前进程的上下文**并切换上下文去执行mian.c里的scheduler,scheduler再次调度新的进程。**实现进程的循环调度。

    ④、当一个进程到达生命周期后,会执行exec这个系统调用,它最终也会切回scheduler。

注意:cpu的时间片到达之后,cpu会默认切换回mian.c里面的scheduler,接下来要调度哪个进程都是由scheduler决定的!

  • 实现细节分析:

(1)、每一个cpu都有一个结构体用来存储cpu状态信息

// Per-CPU state.structcpu{structproc*proc;// The process running on this cpu, or null.structcontextcontext;// swtch() here to enter scheduler().intnoff;// Depth of push_off() nesting.intintena;// 记录中断被关闭之前,中断的状态};

struct proc *proc:表示当前cpu核所运行的进程

struct context context:当前cpu的上下文,这个属性是固定不变的,上下文信息其实就是scheduler()函数的上下文

(2)、swtch(struct context*, struct context*)分析:

主要是用来保存进程执行上下文的,并用于进程切换。用scheduler()里面调用的函数swtch(&c->context, &p->context);为例

它在每次调度之前都会把scheduler的上下文保存到cpu结构体的contest里去

# Context switch # # void swtch(struct context *old, struct context *new); # # Save current registers in old. Load from new. #swtch(&c->context, &p->context); .globl swtch swtch: sd ra, 0(a0) #将ra寄存器保存到a0,a0存储的是switch的第一个参数c->context sd sp, 8(a0) sd s0, 16(a0) sd s1, 24(a0) sd s2, 32(a0) sd s3, 40(a0) sd s4, 48(a0) sd s5, 56(a0) sd s6, 64(a0) sd s7, 72(a0) sd s8, 80(a0) sd s9, 88(a0) sd s10, 96(a0) sd s11, 104(a0) #到这一步就是将scheduler的现场保存到了c->context !!! #将要执行的进程的上下文写入寄存器 ld ra, 0(a1) #ra里写了新进程p的返回地址 ld sp, 8(a1) ld s0, 16(a1) ld s1, 24(a1) ld s2, 32(a1) ld s3, 40(a1) ld s4, 48(a1) ld s5, 56(a1) ld s6, 64(a1) ld s7, 72(a1) ld s8, 80(a1) ld s9, 88(a1) ld s10, 96(a1)

相关新闻

  • 全面沦陷:所有 LLM 与 AI 绘画、视频模型已被攻破——红队实战全景报告(2026 修订版)
  • YOLOFuse train_dual.py高级用法:调整学习率与batch size
  • 时钟分频电路设计详解:vhdl课程设计大作业系统学习

最新新闻

  • 2026 地下水自动化监测仪品牌推荐,生产厂家排行榜 - 王工聊地下水监测
  • 2026年 江苏包装机/全自动包装机/定量包装机,铜精粉吨袋上袋机/包装称/高位码垛机器人,源头实力厂家榜单推荐 - 品牌发掘
  • 机器学习模型上线:从沙盒到生产系统的工程契约
  • AI伦理工程化:开发者可落地的五项技术实践
  • 2026年TikTok Shop多站点政策盘点:从佣金、保证金到物流与补贴的新变化 - 信息热点
  • 用 MLflow 系统化评估大语言模型:新手入门与工程实践

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号