本文来自:https://mp.weixin.qq.com/s/5KAaP4_-NX6W7dzh-AuyMQ

xv6系统运行在qemu虚拟机中,使用qemu启动xv6时,qemu将xv6内核加载到内存的0x8000000开始的存储空间中,然后,在RISC-V机器模式下,从 _entry开始执行指令(kernel/entry.S:12)。xv6启动时RISC-V的页设备是禁用的,虚拟内存直接映射到物理内存。

一、entry.S

// kernel/entry.S源程序清单

_entry开始的指令设置了一个栈(17-21),栈空间大小为4KB=(1024*4),mhartid是运行当前程序的CPU核的ID,其值范围是0~MaxCore-1,因为xv6运行在多核的RISC-V处理器上,系统需要为每个核设置一个堆栈。栈区是从高地址开始向低地址扩展,以16B对齐。17-21行用类语言描述如下:

sp = &stack0  # 将stack0的地址存入sp中

a0 = 1024*4   # 4KB

a1 = CPU_ID + 1

a0 = a0 * a1

sp = sp + a0 ; #栈顶

此时堆栈设置完毕,如下图所示核0的堆栈区。sp是堆栈指针寄存器。

堆栈设置好后,程序调用start函数,start是一个C程序函数。一般调用start后程序不会回来,即25-26行不会执行到,若从调用start返回,说明操作系统有问题,系统转入死循环。

二、start.c

RISC-V的架构有机器模式(Machine Mode,M模式)、监督模式(Supervisor Mode,S模式)和用户模式(User Mode,U模式),并且规定机器模式是必须具备的模式,其他模式均是可选而非必选的模式。entry.S和start( )函数都是在机器模式下执行。start对环境进行必要的配置后通过mret 指令切换到监督模式,并执行main函数。

kernel/start.c程序段

start 24行:读mstatus寄存器的值保存在x中,25-26行将对应的MPP位设置为01,即前模式为监督模式。27行将修改后的x写回mstatus寄存器,当执行mret指令时,会从机器模式变换为监督模式。

31行:将main的地址看作机器模式下发生异常时指令的地址并保存在寄存器mepc,当执行mret指令时,程序从发生异常的指令处恢复执行。

34行:将0写入页表寄存器satp来禁用虚拟地址转换。

37-38行:将所有中断和异常委托给监督模式。

41行:对时钟芯片编程以产生计时器中断。

44行:读取核的ID。

45行:将ID保存到tp寄存器中。

48行:执行mret指令,系统由机器模式改变为监督模式,并从main()开始运行。

三、main.c

kernel/main.c程序段

17行:判断是否是第0个核,如果是执行18-37行,否则执行39-45行。

18行:初始化终端。

19行:初始化输出互斥锁

20-22行:显示提示信息:“xv6 kernel is booting\n”

23行:初始化物理内存页

24行:创建内核页表

25行:将h/w页表寄存器切换到内核的页表,并启用分页。

26行:初始化进程表

27行:设置trap向量

28行:安装内核向量

29行:设置中断控制器

30行:对S模式的hart设置uart启用位,及优先级阈值为0。注:hart指硬件线程。

31行:缓冲区初始化

32行:inode缓冲区初始化

33行:文件表初始化

34行:初始化虚拟磁盘。

35行:创建第一个用户进程。第一个进程执行一个小程序initcode.S(user/initcode.S:1),该程序通过调用exec系统调用重新进入内核。

36行:同步

37行:started=1

以上是核0执行的代码,对于其他核执行39-45行。

39-40行:等待核0初始化完成。

41行:同步

42行:输出核ID信息。

43-45行:初始化多个设备和子系统。

参考文献:

[1] Cox R, Kaashoek M F, Morris R. Xv6, a simple Unix-like teaching operating system. 2019-10-27]. https://pdos.csail.mit.edu/6.828/2019/xv6/book-riscv-rev0.pdf, 2019.

xv6实验课程:xv6启动过程分析相关推荐

  1. XV6实验环境的搭建

    XV6实验环境的搭建   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客,B站昵称为:亓官劼,地址为亓官劼的B站 本 ...

  2. XV6实验(2020)

    XV6实验记录(2020) 环境搭建 参考连接 Lab guidance (mit.edu) 6.S081 / Fall 2020 (mit.edu) xv6 book中文版 Lab1:Xv6 and ...

  3. springboot实验课程辅助管理系统 毕业设计-附源码191113

    实验课程辅助管理系统的设计与实现 摘 要 科技进步的飞速发展引起人们日常生活的巨大变化,电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用.信息时代的到来已成为不可阻挡的时尚潮流 ...

  4. 计算机基础课程结课论文,3000字计算机实验课程总结论文.docx

    3000字计算机实验课程总结论文 3000字计算机实验课程总结论文 篇一:大学生计算机实验报告(完整版) <大学计算机基础>实验3.1 文件和文件夹的管理 实验报告 专业班级: 经贸110 ...

  5. sscanf函数 linux 物理cpu信息,计算机操作系统实验课程教案2016.doc

    教师备课教案本 (实验课程) 教学单位:计算机学院 课程名称:计算机操作系统 课程组成员:李文生 周艳明 邹昆 马慧 段琢华 版本号:2016 电子科技大学中山学院 实 验 课 程 授 课 计 划 总 ...

  6. 嵌入式linux启动过程分析,嵌入式Linux裸机开发(二)——S5PV210启动过程分析

    嵌入式Linux裸机开发(二)--S5PV210启动过程分析 一.iROM启动方式简介 友善之臂Smart210开发板的SoC为三星S5PV210,S5PV210采用iROM启动方式进行启动,通过查阅 ...

  7. 用计算机做科学实验评课,科学小实验课程听课心得

    010在线为您甄选多篇描写科学小实验课程听课心得,科学小实验课程听课心得精选,科学小实验课程听课心得大全,有议论,叙事 ,想象等形式.文章字数有400字.600字.800字....缓存时间: 2021 ...

  8. OpenWrt启动过程分析+添加自启动脚本【转】

    一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...

  9. 计算机网络实验仿真系统设计,计算机网络实验课程仿真系统平台的研究与设计...

    摘要: 随着计算机技术和网络技术不断发展,<计算机网络>课程成为高校许多工科专业的骨干必修课程.课程涉及到的知识内容主要以理论教学为基础,以实验实践为辅助教学.由于受实验室建设资金.网络环 ...

最新文章

  1. 抖音日活用户破 6 亿,推荐系统到底有何魔力?
  2. MySQL在登陆时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误...
  3. EasyUI入门教程整理与示例代码下载
  4. [阅读笔记] Java 7 新特性
  5. 引入阿里云GA,商米加速IoT产品和解决方案全球化布局
  6. 拥抱变化——从Atlas到ASP.NET AJAX(4):大大简化的了的Extender扩展器控件
  7. 二年级小学生四则运算30道题目编写
  8. html下拉框传递参数,HTML通过事件传递参数到js详解及实例
  9. t-sql的执行顺序
  10. 190728-flink官方文档阅读和实战记录
  11. LBS (基于位置服务)-- Location Based Service
  12. Linux文件系统及常用命令
  13. AutoCAD打印样式中缺少.ctb只有.stb怎么办?
  14. xml的三种解析方法
  15. 达人评测 酷睿i7 1195g7和i7 1260p对比选哪个
  16. 如何从TI官网下载芯片并生成库到Altium Designer
  17. 2019-5-25-win10-uwp-win2d-入门-看这一篇就够了
  18. 【定时任务】Springboot定时任务
  19. ubuntu进入python怎么退出_ubuntu11.04 如何退出命令行
  20. 数据处理过程的潜在风险和应对逻辑

热门文章

  1. 他人求职经验(美团百度趋势)
  2. APE (Monkey's Audio) 音频编码插件for Nero Burning ROM
  3. 微信商城游戏被宝塔防CC攻击拦截
  4. NOI OJ 1.3 14:大象喝水 C语言
  5. 华为mate10用的android版本,华为Mate10搭载安卓8.0系统 详细参数配置曝光
  6. 国家精品在线开放课程 | 数据科学与大数据技术专业领域
  7. mx570、3050和2050选哪个 mx570、RTX3050和RTX2050差距
  8. Python 之 Qt Designer工具相关安装配置
  9. 装表接电工实训装置QY-DQS09
  10. 场效应管质量的好坏简易判断选择