Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2024秋冬季开源操作系统训练营三阶段学习总结报告-cereal #657

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions source/_posts/2024a-rcore-一阶段总结-cereal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
---
title: 2024a-rcore-一阶段总结-cereal
date: 2024-11-10 15:04:04
tags:
---

### 前言

基本上从零开始通过rustlings学习rust,rust作为一门编程语言,通过其合理的设计,保证了其内存安全和高性能,非常值得学习。

### 个人感悟

通过rustlings学习rust的基础语法、数据结构、所有权、引用等相关知识,初步了解了rust程序的编写,在通过之后rcore的学习,通过实践更加加深了对于rust编程的理解,这种学习方式还是非常高效,之后还需要更多项目的累计,不断提高rust编程能力,和对操作系统的理解。
对于rust来说,最难理解的还是所有权部分的内容,变量所有权之前的转移,引用、Copy、Clone等相关使用的分析,都需要很多代码的累计,才能写起来rust时得心应手。
15 changes: 15 additions & 0 deletions source/_posts/2024a-rcore-二阶段总结-cereal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: 2024a-rcore-二阶段总结-cereal
date: 2024-11-09 13:52:35
tags:
---

### 前言

我自己之前参加过ysyx,有一点操作系统的相关基础知识和riscv指令集基础,~~pa4后面还没做完~~,对于很多操作系统基础概念理解还是不够深刻,通过rcore的学习也是补上了这一部分。操作系统作为最和硬件联系紧密的软件,特权、异常、中断等概念的引入,让cpu具有了安全的连续不停运行各种各样程序的能力,这非常美妙😄,这也是我学习操作系统的目的。

### 个人感悟

通过近一个月的学习,对于操作系统的相关概念和rust这门编程语言有了更深入的了解,之前对于操作系统也只是停留在很基础的部分,对于操作系统的基础概念的认识也是非常模糊,也没有上过操作系统的相关课程,通过这次的学习,也是对操作系统的基础概念(进程管理,地址空间,文件系统,并发等等)有了基础的理解。
在rcore的实验课程中,最让我印象深刻的就是虚拟地址部分,由于之前接触的操作系统全部都是nommu类型,直接访问物理地址的概念非常不容易被打破,并且ch4也是一个门槛,需要非常深入的理解rcore的整体代码框架,对虚拟地址的映射,软硬件协同操作,多级页表,地址空间的概念理解了很久,在不断查找资料,不断理解的情况下,才对虚拟地址的概念有了很浅显的理解,把任务完成。
在完成任务的过程中,其实rcore的整体框架非常完善,作业的部分也就是一些扩展功能,整体还是对rcore的实现的理解,在完成任务时,也是对已有实现进行模仿,理解整体框架,之后调用已有函数或自己根据数据结构实现函数,实现功能。
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
---
title: 2024秋冬季开源操作系统训练营三阶段学习总结报告-cereal
date: 2024-12-02 18:14:03
tags:
---

### 组件化操作系统

三阶段通过使用三周的时间,初步认识了组件化操作系统arceos,和之前的宏内核rcore,存在很大区别,组件化操作系统,通过将操作系统中通用模块进行封装、抽象,将操作系统中的各个模块分离开来,针对应用场景,对不同模块进行组合,完成功能。

不同的内核实现方式,势必都有其优势和劣势,如何针对应用场景进行扬长避短,并且快速搭建不同实现方式的内核,组件化操作系统给出了答案。

### Unikernel

其思想更像是之前学习嵌入式中学习到的抽象层的概念,通过组件将通用的底层的功能进行封装,通过api接口与上层应用层进行连接,内核和应用共用地址空间,不需要特权转移,极大提高了任务运行效率。

### 宏内核

在组件化操作系统中,添加宏内核插件,此时通过系统调用为上层应用提供支持,在插件内部仍是通过调用组件的接口,完成系统调用功能。

宏内核插件也需要提供多任务调度、多地址空间等功能。

### Hypervisor

这部分还没有进行学习,更多学习宏内核starry内容。

### 感悟

通过这部分的学习,初步认识了组件化操作系统,为阶段四的实习部分打下了基础,学习异构的思想,在四阶段中,也可以使用这种思想,为组件化操作系统添加更多的组件,支持更多的功能。
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
title: 2024秋冬季开源操作系统训练营四阶段学习总结报告-cereal
date: 2024-12-21 11:40:41
tags:
---

### arceos宏内核扩展

我选择的方向是arceos宏内核扩展,主要工作是在新的宏内核扩展starry-next上,补全系统调用。我希望通过这个过程能更好的理解宏内核的内部的结构,和组件化操作系统的抽象解耦思想,也希望自己的代码能够更好的实现宏内核扩展和基座的解耦,虽然现在还是以先实现功能为前提,但是先完成后完美,之后逐步完善功能,并且抽离耦合的部分,让系统调用的实现更加优雅。

### 实现成果

目前已经完成绝大部分系统调用的实现,最花费时间的是任务clone的相关系统调用,将arceos的多任务切换(时钟中断抢占机制),地址空间(与rcore的地址空间排布不同,复制内核的地址空间)等相关的知识进行研究之后,才将clone的简单功能fork实现,之后关于任务相关的系统调用就很顺利了。

接下来,对arceos的文件系统进行研究,研究了线程间资源独立的新机制namespace,使用了一个很好的方法,实现了unikernel资源全局共享,使用宏内核扩展后,资源线程间独立或共享的机制。实现文件系统相关的api主要也就是调用axfs提供的api进行实现,需要解决的是axfs不支持open目录,但是openat这个系统调用需要打开目录,所以需要解决这个问题。

### 感悟

通过四阶段的学习,学习了组件化操作系统实现宏内核的思想和方法,经历过这三个月的学习,从不会rust和操作系统的小白,慢慢一步一步做,从学习rust,到完成rcore,再到学习arceos,逐步学习操作系统多任务、地址空间、文件系统等等,更加理解了riscv特权级结构,sv39页表结构等risv体系结构知识,总结这三个月,收获非常大,在这里也希望开源操作系统训练营可以越办越好,更多的人可以在这里学到知识,收获成长。