Skip to content

weedien/learn-rCore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

rCore 学习日志

学习资料:rCore-Tutorial-Guide-2023A 文档

第一、二周

  • 由于在开课前已经完成了rustlings的练习,所以后期只补充了额外增加的几个练习题,就结束了第一阶段的学习。

第三周

本周正式开始os的学习,一个全新的挑战

10/22

提前一天看了一下第一章和第二章的内容,完成了环境的配置,并成功在wsl上运行了第一章的内容。由于我对汇编代码不太熟悉,所以在查看linker.ldTrap.S花费了不少时间,现在对其有了更好的理解。

今天最核心的内容在于特权级别的切换,由软硬件配合完成。难点在于看懂TrapContext的保存和恢复,涉及到通用寄存器和CSR的使用。

10/23

训练营正式开始,今天的主要任务是实现ch3多道程序与分时多任务。

重点在于理解系统对任务的调度过程。我们以时间片为单位对任务进行调度,每经过一个时间片,就需要切换到下一个任务运行。当任务切换时,也需要对上一个任务的上下文进行保存。为了实现多任务系统,还引入了yield和exit系统调用,对应任务未完成但需要交出时间片和任务完成退出。

今天的练习为实现sys_task_info系统调用,其主要思想是:当Task进入系统调用时,统计系统调用的类型和次数;当Task开始时记录时间,使用当前时间减去开始时间,即可获得Task的运行时间。

10/24

今天的任务是地址空间的学习,重点在于理解多级页表的实现和地址空间的概念。

初次看多级页表的实现确实有点困难,但经过一天的努力,还是小有感悟。在进行内存分配和映射时,实际上是以页号来操作的,物理页号会指向页的初始位置,即偏移量为0,拿到物理页号后,从页的初始位置读取页大小的切片,将数据拷贝到切片中实现数据的写入;在创建多级页表时,只有当首次使用的时候才会去创建页表。

地址空间中我觉得比较复杂的是内核和用户地址空间的布局,以及用户态到内核态的切换,还需要去理解相关数据结构的具体含义。理解Trampoline和TrapContext在切换地址空间的作用,以及地址空间切换和栈切换的过程比较关键,对我来说也是难点。现在也算有一个初步认识,先看看题目,明天继续深入理解。

10/25

今天结束了ch4地址空间的学习任务,实现了mmapmunmap系统调用,并且修改了sys_get_timesys_task_info的实现。

在实现sys_get_time的时候,如果使用get_time_ms去获取当前时间,似乎会有精度问题,导致无法通过测试,需要改用get_time_us() / 1000 .

实现mmapmunmap时,需要判断虚拟页号的合法性,并以循环的方式去map或者unmap页表的映射。

10/26

今天开始学习ch5进程及进程的管理。进程概念的引入,增加了Task的抽象级别,对资源管理和分配带来了更多的便利,同时也带来了更多的复杂度。

今天浅浅的看了一下forkexecwaitpid系统调用的功能与实现。

10/27

抽空看完了进程管理相关的内容,对于内核是如何创建初始化进程,以及在该进程之上创建一个个新的进程并进行管理和调度的整个过程有了一个简单的了解。父进程中创建子进程的过程还是不算太理解,后面还要深入一下。

练习作业为实现sys_spawnstride调度算法,今天初步实现了调度算法。

10/28

把ch5剩余的任务完成后,就切换到了ch6文件系统与I/O重定向的学习中了。

今天对文件系统有了一个比较浅显的了解,大概明白了一个文件系统的组成与结构,以及其中涉及的各种数据结构的作用。但整个文件系统的抽象层次较为复杂,于是从磁盘存储数据的角度,去思考了每一块内存存的到底是什么,然后思路才慢慢变得清楚。虽然也想要了解一下I/O驱动的设计,但确实太复杂了......

10/29

今天把ch6的练习完成了,但期间我遇见了比较费解的问题,也花了不少时间去找问题的解决方法。

在从ch5迁移到ch6时,运行ch6的测试用例,ch5_spawn0测例总是会抛出StorePageFault的异常,除非在系统启动后首次运行,其他情况均会报错。经过多轮排查,最终确定为是TaskControlBlockInner中的syscall_time的问题,该属性的类型为[u32; 500],如果将u32修改为usize,将不会报错;或者,如果数组的长度较小,比如8,也不会报错。具体原因未知。

10/30

10/31

今天重新梳理了一下ch5和ch6的内容,进一步的去看了源码,对大部分函数的实现过程进行了阅读,加深了对操作系统的理解。

About

记录rCore的学习过程

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published