MOS Lab3 进程调度实战:从 PCB 初始化到时间片轮转的 5 个关键步骤
📅 2026/7/12 15:09:19
👁️ 次浏览
MOS Lab3 进程调度实战从 PCB 初始化到时间片轮转的 5 个关键步骤在操作系统的核心机制中进程调度是实现多任务并发的基石。本文将深入剖析北航操作系统课程Lab3的实验要点通过五个关键步骤带您完成从进程控制块初始化到完整时间片轮转调度的全流程实战。1. 进程控制块PCB的初始化艺术进程控制块是操作系统管理进程的核心数据结构在MOS中表现为struct Env。初始化过程始于env_init()函数这个阶段需要完成三项核心工作// 关键初始化代码示例 void env_init(void) { // 初始化空闲进程链表 LIST_INIT(env_free_list); // 初始化调度队列 TAILQ_INIT(env_sched_list); // 反向初始化所有Env结构体 for (int i NENV-1; i 0; i--) { LIST_INSERT_HEAD(env_free_list, envs[i], env_link); envs[i].env_status ENV_FREE; } // 创建模板页目录 struct Page *p; panic_on(page_alloc(p)); p-pp_ref; base_pgdir (Pde *)page2kva(p); // 设置用户空间映射 map_segment(base_pgdir, 0, PADDR(pages), UPAGES, ROUND(npage*sizeof(struct Page), BY2PG), PTE_G); map_segment(base_pgdir, 0, PADDR(envs), UENVS, ROUND(NENV*sizeof(struct Env), BY2PG), PTE_G); }关键点解析双链表初始化使用LIST_INIT和TAILQ_INIT分别初始化空闲链表和调度队列反向插入技巧通过从后向前遍历确保第一个分配的PCB是envs[0]模板页目录创建所有进程共享的基础映射结构包含内核关键数据注意模板页目录的自映射机制UVPT设置是理解用户空间访问页表的关键通过e-env_pgdir[PDX(UVPT)] PADDR(e-env_pgdir) | PTE_V实现页目录自引用。2. 进程创建的完整链路进程创建的核心函数env_create()实际上封装了三个关键操作环境分配从空闲链表获取PCB优先级设置初始化调度参数二进制加载通过ELF加载器装入程序ELF加载的详细流程步骤函数功能描述1elf_from()验证ELF文件头有效性2elf_load_seg()遍历程序头表处理每个PT_LOAD段3load_icode_mapper()实际执行页分配和内容拷贝// ELF加载关键代码 static void load_icode(struct Env *e, const void *binary, size_t size) { const Elf32_Ehdr *ehdr elf_from(binary, size); e-env_tf.cp0_epc ehdr-e_entry; // 设置入口点 ELF_FOREACH_PHDR_OFF (ph_off, ehdr) { Elf32_Phdr *ph (Elf32_Phdr *)(binary ph_off); if (ph-p_type PT_LOAD) { panic_on(elf_load_seg(ph, binary ph-p_offset, load_icode_mapper, e)); } } }三种典型内存映射情况起始地址未对齐处理首个页面的偏移部分完整页拷贝循环处理中间完整页面零填充段当p_memsz p_filesz时补充零页3. 时钟中断的初始化与触发时钟中断是驱动调度的核心机制其初始化涉及两个关键函数# kclock.S 中的时钟初始化 LEAF(kclock_init) li t0, 200 # 设置200Hz中断频率 sw t0, (KSEG1|DEV_RTC_ADDRESS|DEV_RTC_HZ) jr ra END(kclock_init) # env_asm.S 中的中断使能 LEAF(enable_irq) li t0, (STATUS_CU0|STATUS_IM4|STATUS_IEc) mtc0 t0, CP0_STATUS jr ra END(enable_irq)中断触发流程时钟硬件每1/200秒产生中断信号CPU跳转到0x80000180异常入口经过SAVE_ALL保存上下文后进入handle_int确认是4号中断后进入timer_irq处理关键细节中断响应后必须写DEV_RTC_INTERRUPT_ACK寄存器清零中断状态4. 异常处理的完整路径MOS的异常处理采用统一入口分发机制异常发生 ↓ exc_gen_entry (保存上下文) ↓ 根据CP0_CAUSE[6:2]查exception_handlers表 ↓ 跳转到对应处理函数handle_int/handle_tlb等 ↓ 执行具体处理逻辑 ↓ ret_from_exception (恢复上下文) ↓ eret返回关键数据结构void (*exception_handlers[32])(void) { [0 ... 31] handle_reserved, [0] handle_int, // 中断 [2 ... 3] handle_tlb,// TLB异常 [1] handle_mod, // 写只读页 [8] handle_sys // 系统调用 };5. 时间片轮转调度算法实现调度器的核心逻辑体现在schedule()函数中void schedule(int yield) { static int count 0; struct Env *e curenv; if (yield || count 0 || e NULL || e-env_status ! ENV_RUNNABLE) { if (e ! NULL) { TAILQ_REMOVE(env_sched_list, e, env_sched_link); if (e-env_status ENV_RUNNABLE) { TAILQ_INSERT_TAIL(env_sched_list, e, env_sched_link); } } if (TAILQ_EMPTY(env_sched_list)) { panic(schedule: no runnable envs); } e TAILQ_FIRST(env_sched_list); count e-env_pri; // 优先级即时间片长度 } count--; env_run(e); }四种触发调度的条件主动让出CPUyield1时间片耗尽count0当前进程不可运行首次调度curenvNULL进程切换三步骤保存当前上下文到PCB更新curenv和cur_pgdir通过env_pop_tf恢复新进程上下文LEAF(env_pop_tf) sll a1, a1, 6 # 将ASID左移到EntryHi正确位置 mtc0 a1, CP0_ENTRYHI move sp, a0 # 切换到新进程的栈帧 j ret_from_exception # 通过异常返回路径恢复 END(env_pop_tf)通过这五个关键步骤的配合MOS操作系统实现了完整的进程管理机制。从PCB初始化到ELF加载再到时钟中断驱动的轮转调度每个环节都体现了操作系统设计的精妙之处。
libgdbm-rust最佳实践总结:20个提升数据库性能的技巧与建议 【免费下载链接】libgdbm-rust rewrite gdbm tool by using Rust 项目地址: https://gitcode.com/openeuler/libgdbm-rust
前往项目官网免费下载:https://ar.openeuler.org/ar/
libgdb…
📅 2026/7/12 15:09:19
1. 项目背景与核心器件选型在工业自动化和小型机电设备领域,直流电机控制一直是基础且关键的技术环节。这次我们选用东芝的TB6593FNG驱动芯片搭配Microchip的PIC18LF45K22微控制器,构建了一套高性价比的直流电机控制系统。这个组合特别适合需要精确控制的…
📅 2026/7/12 15:09:19
DELL R720xd 第三方网卡引发的风扇狂转:精准诊断与智能调控方案当你在DELL R720xd服务器上安装了一块高性能的第三方万兆网卡后,原本安静的机房突然变成了"喷气发动机测试现场",这可能是每个运维人员都经历过的噩梦。不同于官方认证…
📅 2026/7/12 15:09:19
Git 合并与变基实战:3种场景下的命令选择与冲突解决策略在团队协作开发中,Git 分支管理是每个开发者必须掌握的核心技能。当多个开发者并行工作在同一个代码库时,如何优雅地整合不同分支的代码变更,成为影响开发效率和代码质量的关…
📅 2026/7/12 16:05:41
一键解决Windows软件兼容性问题:VisualCppRedist AIO终极指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist
你是否曾经在安装新游戏或专业软件时&a…
📅 2026/7/12 16:05:41
图吧工具箱TubaWinUi3:82款硬件检测工具的终极解决方案 【免费下载链接】tubatools 图吧工具箱 winUI3 版 项目地址: https://gitcode.com/gh_mirrors/tu/tubatools
你是否曾为电脑硬件问题烦恼?想要检测CPU温度、测试硬盘速度、查看显卡信息&…
📅 2026/7/12 16:05:41
英雄联盟玩家的智能管家:用本地自动化工具重塑你的游戏体验 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit
你是否曾在排位赛英雄选…
📅 2026/7/12 16:05:41
League Akari终极指南:一键解锁英雄联盟客户端20实用功能 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit
League Akari是一款基于L…
📅 2026/7/12 16:05:41
1. 项目概述与核心价值最近在带几个刚入门Python的朋友做项目,发现他们学完基础语法后,最迷茫的就是不知道如何把零散的知识点串联起来,做出一个看得见、摸得着的成果。这时候,一个经典的“飞机大战”游戏项目就成了绝佳的练手选择…
📅 2026/7/12 16:04:41
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
豆包openclaw最近圈子里都在聊豆包openclaw,我也没忍住,掏腰包入手了一套。说实话,刚拿到手的时候,心里是打鼓的。毕竟市面上类似的智能硬件太多了,有的吹得天花乱坠,用起来却是一堆bug。为了不让大家的钱打水漂,我连续用了半个月。从开箱到日常高频使用,甚至故意测试它…
📅 2026/7/12 0:00:04
SQLyog 13.3.1 社区版在Windows 10/11上的完整安装与连接指南 对于刚接触MySQL数据库管理的开发者和学生来说,选择一个直观易用的图形化管理工具至关重要。SQLyog作为一款轻量级但功能强大的MySQL GUI工具,能够显著提升数据库操作的效率和体验。本文将详…
📅 2026/7/12 0:00:28
SPEC CPU 2006 跨平台基准测试深度实战:ARM/X86/MIPS 架构配置优化与结果分析方法论在当今多元化的计算架构时代,如何客观评估不同处理器平台的真实性能成为系统工程师和性能优化专家的核心挑战。SPEC CPU 2006 作为业界公认的计算密集型基准测试套件&am…
📅 2026/7/12 0:00:28
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/12 0:15:59
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/12 15:39:57
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/12 8:07:36