-
Notifications
You must be signed in to change notification settings - Fork 452
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #174 from guevaraya/master
提交 2023操作系统训练营一二阶段学习总结
- Loading branch information
Showing
1 changed file
with
31 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
--- | ||
title: 2022开源33秋冬开源操作系统训练营总结报告-杨凯 | ||
date: 2023-11-05 16:59:41 | ||
categories: | ||
- report | ||
tags: | ||
- author:guevaraya | ||
- repo:https://github.com/LearningOS/2023a-rcore-guevaraya | ||
--- | ||
|
||
# 初次接触 | ||
作为一个工作党,第一次接触OS训练营课程是通过西安邮电大学的陈丽君教授推荐的,当时看到训练营很兴奋,虽然已经作为工作党已经10多年,那会上大学没有这么好的平台和开源课程,隐约记得06年左右的时候只了解过陈渝教授的网上公开课,但是对实际做的事情并没有深入了解和学习。 | ||
这次是通过训练营可以深入学习了。陈老师的课程也越来越丰富,之前的就课程也恶补了一些,这次的训练营是以Rust为主要语言基础,循序渐进一步一部的学习OS的开发过程,主要分成三个阶段,第一阶段以rustling为基础的和第二阶段的Rust语言编程,第二阶段的Rcore的OS实践学习,第三阶段的不通选题的实现,比如ArceOS等。 | ||
对于我个人已经参加了三期。之前第一期,仅完成了rustling,第二期,尝试完成了rustling和ucore,因为对rust语言编程还是一头雾水,这次,经过坚持完成到了第二次的rcore,但是还有core 的5个大实验只完成了3个实验,虽然可以过关,还是想冲一波完成实验4,但看了两天文档,仅仅有点思路了,但是没时间完成了,先提交博客过关,只能后面找时间完成了!下面是过程中的一些即简要总结。 | ||
|
||
# 第一阶段总结 | ||
这个阶段前40题都是一些基本语法,有编程经验的稍微琢磨下都可以完成。等到了泛型,闭包和trait就看似一头雾水了。个人总结做题可以参考官方的手册,但是深入学习语言建议可以参照https://course.rs/basic/base-type/numbers.html,rust语言圣经比较通俗的,比较翻译的和原汁原味的编程书是不一样的,或者直接对照看英文也是可以的。 | ||
rustling在做题过程中一定要多看 lint和注释里,因为题目的目的都是里面,同时看来处理对应的参数连接,会快一点。 | ||
比如:iterators5.rs实验中,需要多查看手册,我开始移植准备用比较for循环的笨办法去实验,么有理解题目的目标的意思,花费了很多时间,即使完成了实验,但是学迭代的fold用法没有理解和掌握,目前没有达到还是浪费了很多时间,因为rust里面的迭代用的很多,需要慢慢体会,同时还是学会使用手册,只要查看下fold手册,或者浏览下迭代器的用法,就一目了然。 | ||
https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.fold | ||
还有就是rust手册还是需要整体先过一遍,再去做题会事半功倍,及时不全完成,但是至少目录要过一遍。 | ||
|
||
# 第二阶段总结 | ||
第二阶段做的还是比较吃力,一共5个大实验,我仅完成了3个,后面两个只能等后面时间完成。 | ||
实验1,整体难度不大,目标是通过syscall实现获取系统时钟和taskinfo的信息,这个时候的rcore还是比较原始,没有MMU,没有进程只有作业的状态,因此实现起来没有内存和进程的限制,只要理解代码和流程和实验的环境就可以完成。 | ||
实验2,由于增加了用户空间和内核空间去区分,因此系统之间的调用的数据交换要使用特定的机制完成,这里主要考察了translated_byte_buffer的用法,核心是memoery_set的进制如何使用和对其理解。这里为了代码简洁也查了很多资料,最后使用copy_from_slice,也对切片的使用更深的认识,但是最后看了老师的参考代码,还是有不一样的。 | ||
实验3,群里有人说比较难,但个人认为实验难度的不能很难,因为spawn基本上相当于fork+exec,还是考察进程中memory_set,program_brk,task_cx,user_sp,等拷贝和处理 | ||
第二阶段如果有一些操作系统的基础会好很多,推荐大家阅读陈海波教授的《现代操作系统:原理与实现》通俗易懂。 | ||
|
||
# 总结 | ||
通过本课程,除了敲开了对rust编程语言和OS开发的大门,更多的是认识了这么多老师和同学,更加认识了自己。非常感谢清华的老师和同学能提供这样一个开发的平台,晚上各位老师的讲解和答疑,是我们一个指引,也是对我们这些初学者是一个道路的指引,相信这样的训练营将会给我们的国家带来软件的繁荣,再次感谢无私风险的老师和同学们!!! |