Skip to content

Commit

Permalink
2024秋冬季开源操作系统训练营三阶段学习总结报告-颜熙炆
Browse files Browse the repository at this point in the history
  • Loading branch information
ZIYAN137 authored and ZIYAN137 committed Nov 30, 2024
1 parent d678ab9 commit d4ac212
Showing 1 changed file with 84 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
---
title: 2024秋冬季开源操作系统训练营三阶段学习总结报告-颜熙炆
date: 2024-11-30 13:15:00
categories:
- report
tags:
- author: ZIYAN137
---

# 组件化操作系统

## 为什么需要组件化操作系统
操作系统的组件化,可以面向不同的应用场景构建不同的操作系统。组件化内核项目相当于“工厂”,组件相当于“零件”。我们只需要按需组装即可。

## 组件化操作系统相较于传统构建方式的优势

### 1. 使开发和维护更加简单
因为操作系统的功能被良好地封装到各个组件组件中,只需要提供和调用接口即可。并且组件之间耦合度更低,维护起来更为方便
### 2. 便于协作
由于操作系统的功能被良好地封装到各个组件组件中,不同的团队只需要专注于自己所负责的组件,最后再集成即可,便于协作式地开发

# Unikernel

## Unikernel的特点
1. 应用与内核处于同一特权级(均为内核态),共享地址空间。Unikernel既是内核又是应用,二者合为一体
2. 优点: 应用与内核之间没有隔离和切换,简单高效
3. 缺点: 同样因为没有隔离和切换,所以安全性较低

## 课后练习1: 支持带颜色的打印输出

使用ANSI颜色控制即可

## 课后练习2:支持HashMap类型

直接从crate上引入hashbrown(本来不是很想重复造轮子,于是想着先引入,以后有空了再自己搓,但是截止至本篇blog写下后都还没去搓)

## 课后练习3: 为内存分配器实现新的内存算法bump

根据所提供的注释,我们为EarlyAllocator\<const PAGE_SIZE: usize\>添加了
start, end, b_pos, p_pos, count等属性

查看 https://github.com/arceos-org/allocator 所提供的trait,为EarlyAllocator\<const PAGE_SIZE: usize\>实现了BaseAllocator, ByteAllocator 和 PageAllocator等trait即可

## 课后练习4: 增加对rename和mv的支持

参数的基础检查在此不赘述

rename直接调用API fs::rename 就行了。

mv的话。我们判断第二个参数dst是否是一个目录。如果是的话,
根据UNIX哲学,我们直接把文件src读进buf,然后在对应的路径下写下去,删除原来的文件就行了(简单粗暴)。

# 宏内核

## 宏内核的特点

相对于Unikernel,宏内核的特点:
1. 增加一个权限较低的用户特权级来运行应用。
2. 为应用创建独立的用户地址空间,与内核隔离。
3. 内核运行时可以随时加载应用Image投入运行。
4. 应用与内核界限分明。


## 课后练习5: 处理缺页异常

得到当前task的ext,将其aspace上锁后,调用aspace的handle_page_fault即可。

## 课后练习6: 为宏内核支持sys_mmap系统调用,实现对文件的映射

从当前task的aspace中调用find_free_area, 得到长度为length的addr_src, 然后进行4k对齐,同时,对length进行对齐得到size。

prot和flags 通过调用 MmapProt::from_bits_truncate(prot), MmapFlags::from_bits_truncate(flags)得到,
需要的mappingFlags就from(prot)即可。

调用aspace的map_alloc方法。

之后我们处理一下MmapFlags::MAP_ANONYMOUS。如果我们的flags中含有这个flag,那么我们就直接返回

如果没有MmapFlags::MAP_ANONYMOUS。则通过get_file_like得到我们所需的文件,并将其读取进入buf,然后写入aspace。

(由于之前配环境的时候没将所需的编译器export到bash中,所以build payload的时候出了点问题: 错误消息表明 riscv64-linux-musl-gcc 编译器未找到。)

# Hypervisor
// TODO: 由于学业繁忙,第三阶段的最后一周的课都没跟,Hypervisor先放放

0 comments on commit d4ac212

Please sign in to comment.