Skip to content

Commit

Permalink
Merge pull request #103 from Axsl666/master
Browse files Browse the repository at this point in the history
Create axsl666-2023秋第二阶段总结.md
  • Loading branch information
xyongcn authored Nov 1, 2023
2 parents d963e7a + a9b87c3 commit eb643e7
Showing 1 changed file with 119 additions and 0 deletions.
119 changes: 119 additions & 0 deletions source/_posts/axsl666-2023秋第二阶段总结.md
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
- 可利用资源向量 分配矩阵 需求矩阵
- 数据更新
- 相关系统调用时进行更新数据
- 检测算法
- 获取资源前进行死锁检测

0 comments on commit eb643e7

Please sign in to comment.