0%
- 在这学习的一个月里,我投入了大量时间和精力来学习Rust编程语言以及操作系统开发。我的目标是掌握这门高效、安全的语言,并借此机会深入了解操作系统的底层原理和实现。
第一阶段 Rust编程语言
- Rust语言基础:我通过阅读官方文档和相关书籍,进一步掌握了Rust的语言特性,包括内存管理、所有权系统、生命周期等。我还通过编写一些小的程序来巩固这些知识,比如实现简单的数据结构和算法。
- 在学习过程中,我也遇到了一些挑战。比如,Rust的所有权系统和生命周期机制让我感到有些困惑。通过阅读更多的文档和示例代码,逐渐好像克服了这些困难。
第二阶段 操作系统实现
- 操作系统原理:为了更好地理解操作系统开发,我深入学习了操作系统的基本原理,例如内核启动过程、地址空间、内存管理、进程管理、文件系统等。我通过阅读经典的操作系统教材(rcore book)和通过实践加深对这部分内容的理解。
- 在整个学习过程,以动手实践为主,用最简单的方式重新实践一遍,理解整个过程,细节,原理
实践1
- 按照教程动手实现最简单的系统,输出一行文字,目标是熟悉整个开发环境,编译,打包,启动环境,调试方式
实践2
- 熟悉一些rustsbi调用,riscv汇编指令,特权模式,完善一些日志输出,系统调用方式,了解内核各个段的地址,用途
实践3
- 实现系统调用处理,时钟中断处理,s->u及u->s的切换过程,栈的切换,任务的运行环境的保存及恢复,任务进程的调度切换
实践4
- 实现以sv39模式的地址空间管理,页表的管理,虚拟地址到物理地址的转换,在这个实践上花费时间比较多,特别是异常处理时入口地址,返回地址,任务空间的页表地址切换,及程序各个段的映射,按照rcore的实现trap_context是放在应用层地址空间的,基本上可以随意修改,不够安全,准备尝试把trap_context放到内核地址空间
实践5
- 实现了解进程信号的发送接收过程,在内核层触发应用层的回调函数,实际上是一次任务的切换,必须在当前进程调用系统调用后才能触发,了解各种锁通过任务调度的实现,进程间的通信,管道消息的发送接收
实践6
- 实现通过对接调用easy-fs对文件的读写,块设备驱动采用的是virtio接口,这块比较复杂,待进一步理解
实践7
- 尝试启动双核,对任务进行调度,主要涉及到公共资源的加锁,当前任务的结构指针存储到tp寄存器(x4),获取当前进程通过读取tp寄存器实现,trap_context和task_context加入对tp寄存器的保存和加载(针对系统调用和任务调度)
总结
- 回顾这个学习实践过程,我认为我对操作系统原理上的理解取得了很大的进步。但我也意识到,还需要不断的继续学习和实践。
- 我希望能够继续深入学习Rust和操作系统开发,参与更多的开源项目,提升我的技能和经验。同时,我也希望能够将我在学习过程中积累的知识和经验分享给更多的人,帮助更多的人一起进步。
- 总的来说,这个学习过程充满了挑战,但我收获了丰富的知识和技能。我对后面的学习充满了期待。
感谢老师和助教提供的帮助!!!