-
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 #103 from Axsl666/master
Create axsl666-2023秋第二阶段总结.md
- Loading branch information
Showing
1 changed file
with
119 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,119 @@ | ||
# Axsl666-2023秋季OS训练营第二阶段总结 | ||
|
||
首先感谢learningOS社区的所有贡献者。前几次训练营因为错过报名时间而未能参加,终于在2023秋季参与到了本次训练营活动。 | ||
|
||
## 实验一内容总结 | ||
|
||
多任务系统的简单实现 | ||
|
||
- 扩展 `TaskControlBlock`: | ||
- `start_time` | ||
- `started` | ||
- `syscall_times` | ||
- 设计 `TaskManager` 的公共接口 | ||
- `add_syscall_times` | ||
- `get_current_task_info` | ||
- 在相应函数中更新 TCB 数据, 记录开始时间: | ||
- `run_first_task` | ||
- `run_next_task` | ||
- 在系统调用处理函数中调用 `add_syscall_times` 更新 TCB 中的记录 | ||
- 完成 `sys_task_info` 系统调用 | ||
- 主要是调用 `get_current_task_info` 并返回 `TaskInfo`。 | ||
|
||
## 实验二内容总结 | ||
|
||
系统开启虚拟地址空间 | ||
|
||
### 重写 sys_get_time 和 sys_task_info | ||
|
||
- 在内存管理中增加 translated_mut_ptr 函数,实现进程用户地址空间中的指针到可变引用的转换 | ||
- 其余类似 ch3 中的操作 | ||
|
||
### mmap 和 munmap 匿名映射 | ||
|
||
- 内存管理接口 | ||
- delete_frame_area | ||
- 任务管理接口 | ||
- mmap:调用insert_framed_area增加映射区域 | ||
- munmap:调用delete_frame_area删除映射区域 | ||
- 系统调用的实现 | ||
- 合法性检验 | ||
- 调用任务管理接口 mmap 和 munmap | ||
|
||
|
||
## 实验三内容总结 | ||
|
||
实现进程管理相关系统调用 | ||
|
||
### 实现系统调用 spawn | ||
|
||
- 扩展 Task 公共接口 | ||
- spawn | ||
- MemorySet::from_elf 新建地址空间,用户栈,程序入口点 | ||
- 分配 pid 与内核栈 | ||
- 建立 TCB | ||
- 加入父进程的子进程链表 | ||
- 准备 TrapContext | ||
- 返回新子进程的TCB | ||
- 完成系统调用功能 | ||
- sys_spawn | ||
|
||
### 实现 stride 调度算法 | ||
|
||
- 扩展 TCB | ||
- stride | ||
- priority | ||
- 扩展 Task 公共接口 | ||
- set_priority | ||
- 修改 TaskManager 调度算法 | ||
- fetch 修改为 stride 调度算法 | ||
- 完成系统调用功能 | ||
- sys_set_priority 调用 set_priority | ||
|
||
## 实验四内容总结 | ||
|
||
实现几个文件系统相关系统调用 | ||
|
||
### sys_linkat | ||
|
||
- 给 File trait 增加 fstat 接口 | ||
- 扩展 efs 中 DiskInode 接口 | ||
- get_inode_id: get_disk_inode_pos的逆过程 | ||
- 在 vfs 中 Inode 增加接口 | ||
- create_link | ||
- 新建目录项,(new_name, old_inode_id) | ||
- 完成系统调用 sys_linkat | ||
|
||
### sys_unlinkat | ||
|
||
- 给 File trait 增加 fstat 接口 | ||
- 扩展 efs 中 DiskInode 接口 | ||
- get_inode_id: get_disk_inode_pos的逆过程 | ||
- 在 vfs 中 Inode 增加接口 | ||
- delete_link | ||
- 遍历目录下所有目录项,找到与对应文件名相同的inode | ||
- 删除(清空)对应目录项 | ||
- 完成系统调用 sys_unlinkat | ||
|
||
### sys_stat | ||
|
||
- 给 File trait 增加 fstat 接口 | ||
- 扩展 efs 中 DiskInode 接口 | ||
- get_inode_id: get_disk_inode_pos的逆过程 | ||
- 在 vfs 中 Inode 增加接口 | ||
- inode_id: 实现获取自身 inode id | ||
- isdir:判读是 inode 否为目录 | ||
- linknum: 获取 root inode 下的某一个 inode id 对应的硬链接数量 | ||
- 完成系统调用 sys_stat | ||
|
||
## 实验五内容总结 | ||
|
||
本节主要几种同步原语与及其内核实现。 | ||
|
||
- 加入死锁检测机制,实现银行家算法。 | ||
- 扩展 PCB 和 TCB | ||
- 可利用资源向量 分配矩阵 需求矩阵 | ||
- 数据更新 | ||
- 相关系统调用时进行更新数据 | ||
- 检测算法 | ||
- 获取资源前进行死锁检测 |