-
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 #120 from weedien/master
提交报告 - weedien
- Loading branch information
Showing
1 changed file
with
25 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,25 @@ | ||
--- | ||
title: 2023开源操作系统训练营第二阶段总结报告-weedien | ||
date: 2023-11-02 19:12:30 | ||
categories: | ||
- report | ||
tags: | ||
- author:weedien | ||
- repo:github.com/LearningOS/2023a-rcore-weedien | ||
--- | ||
|
||
本次训练营对我最大的帮助在于,让我深入了解了操作系统底层的工作原理,通过教程的辅助和源码的阅读,我了解到了操作系统在进程线程管理、任务调度、内存分配、文件系统管理等方面的知识,对其实现的机制有了初步的认识。 | ||
|
||
从操作系统环境的搭建开始,我不断的给系统增加功能,引入进程、页表、地址空间、文件系统、同步机制,让操作系统能够运行一个个进程与线程,处理并发场景的任务,这是一场具有挑战却又精彩的旅程。 | ||
|
||
从进程或线程的创建和调度角度来说,我了解到了操作系统如何把一个elf格式的文件转换为一个进程,为它分配地址空间、栈空间等,以及如何在进程中执行任务,以及创建新的线程。 | ||
|
||
elf文件中定义了程序的内存布局,而操作系统将为它创建地址空间,给它分配进程号并将各个逻辑段存放在合适的位置,之后将进程添加到调度队列中,由CPU执行。其中很重要的数据结构为TrapContext,它记录了进程或者线程的上下文信息,在切换任务时发挥着巨大的作用。而其中又涉及到了内存的分配,当进程需要分配内存时,由页表完成从虚拟地址到物理地址的映射,整个映射的过程也是我学习过程的一个重难点,从分配物理页号到创建多级页表进行映射,以及如何使用虚拟地址向物理内存中写入数据,通过思考、绘图去展示整个过程,我慢慢的理解了其中的所以然,感受到了虚拟内存系统的精妙的哲思。 | ||
|
||
文件系统部分,我学习到了一个简易文件系统的实现,对于文件系统如何管理磁盘文件、以及如何在内核中使用文件有了一个新的认识。首先最令我费解的是描述文件的一系列数据结构,难点在于DiskINode和INode的关系和作用。经过一遍遍理解和梳理,我认识磁盘上的第一个分块将会用于存储整个磁盘的元信息,包括各类块的数量,之后的块分别记录索引位图、索引、数据位图和数据。索引中记录了一个文件的类型、大小以及在磁盘上的块号,通过索引可以找到文件所在的位置,对文件进行读写,这个索引即是DiskINode,而INode用于记录DiskINode的位置,该数据结构将暴露给内核,方便在内核中对文件进行操作。 | ||
|
||
在并发的学习过程中,我对锁的实现机制有了更多的了解。当某个线程去访问被上锁的临界区时,线程将会从任务调度队列中移入到等待队列,由此陷入等待(休眠),在锁释放的时候再从等待队列中唤醒线程,以达到同步的效果,从而避免数据不一致问题。也试着去实现了一个简单的死锁检测机制,但对该机制的原理理解的还不够,无法证明为何该算法能够实现死锁检测。 | ||
|
||
教程和练习引导着我的学习与进步,让我对操作系统有了更多的理解,但它们无法为我解释所有的问题,也无法让我看懂所有的代码。当前的学习虽说已告一段落,但整个项目中还有很多细节值得我去细细品味。那些我未阅读或未理解的源码,以及关于os的设计原理--为什么要这样设计,是否有更加合适的设计方式,这对于我来说都是未完成的任务,也是将来需要探索的。 | ||
|
||
最后,我想感谢训练营,能提供这么好的机会和资料来帮助我学习os,今后我也希望能有更多的机会去深入理解系统级别的设计与开发,加油! |