- 博客(8)
- 资源 (1)
- 收藏
- 关注
原创 6s081:记录xv6中的内核态、用户态切换过程
最近又把xv6复习了一下,重新用GDB打了一下内核态切换的过程的那段代码uservec: # # trap.c sets stvec to point here, so # traps from user space start here, # in supervisor mode, but with a # user page table. # # sscratch points to where
2021-07-30 13:54:58
770
原创 C++的简易内存管理工具实现--垃圾回收
Writing a Mark-Sweep Garbage CollectorTracing vs. Direct collectors所有 GC 算法都分为tracing和direct。尽管被称为“垃圾”收集器,但跟踪收集器实际上并不识别垃圾。相反,情况恰恰相反——它们识别活着的对象,通过扩展将其他一切视为垃圾。Mark-Sweep 是一个跟踪收集器,因此我们将在我们的实现中进行跟踪阶段。由于我们选择在 C++ 中实现收集器,我们现在将讨论与它的运行时系统相关的一些细节。C++ specif
2021-07-25 10:28:46
793
1
原创 C++的简易内存管理工具实现--内存池
OverviewPool allocator其通常允许O(1)分配,当空闲块被发现马上,而无需搜索自由列表。为了实现这种快速分配,池分配器通常使用预定义大小的blocks 。这个想法类似于Segregated list,但是具有更快的blocks 确定。该方法可以极大地提高处理许多预定义形状对象的系统的性能。例如,在游戏应用程序中,我们可能需要分配数百个甚至数千个相同类型的对象。在这种情况下,碎片malloc可能是分配速度较慢的来源。这就是游戏机积极为此类对象使用内存池的原因。所以,让我们深入研究细节
2021-07-24 21:47:48
503
1
原创 C++的简易内存管理工具实现--内存分配
Mutator、Allocator和Collector垃圾收集程序由三个主要模块组成,即Mutator、Allocator和Collector。Mutator是我们的用户程序,我们在其中为自己的目的创建对象。所有其他模块都应该尊重Mutator 在对象图上的视图。例如,在任何情况下,收集器都不能回收活动对象。然而,Mutator 不会自己分配对象。相反,它将这个通用任务委托给Allocator模块——这正是我们今天主要讨论的主题。让我们深入了解实现Memory Allocator的细节。Memo
2021-07-24 18:36:25
715
1
原创 同步屏障Barrier
最近写6s081实验写到了lab7,发现了有一个barrier的概念很有意思,查了查资料总结了一下。同步屏障可以用来管理一个应用中的不同线程,在一个应用中设立一个Barrier,当有指定数目的线程到达该Barrier时,唤醒所有处于SLEEPING状态的线程,继续执行。但是如果此时没有达到指定数目,则线程进入到SLEEPING状态。以下的代码直接在linux中就能运行,用到了linux中的UNIX pthread threading library。你能够通过在命令行中输入man pthreads获取相
2021-05-14 13:12:30
365
原创 15-445#1 Relational Data Model
15-445#1 Relational Data Model为什么需要 Database?数据库是对现实世界的某些方面(例如。,在课堂或数字音乐商店中为学生建模)。人们经常混淆“数据库”和“数据库”管理系统”(例如MySQL、Oracle、MongoDB)。数据库管理系统(DBMS)是管理数据库的软件。考虑一个模拟数字音乐商店的数据库(例如Spotify)。让数据库保存信息关于艺术家以及他们发行了哪些专辑。将数据库存储为逗号分隔的值(CSV)我们自己管理的文件应用程序代码。→ 每个实体使用一个单独
2021-05-12 15:07:28
380
1
原创 brk系统调用和copy-on-write机制
操作系统内存分配中的概念模型本文不全是上课所学内容,而是本人根据上课所学所感兴趣的板块查阅相关资料总结而成的文章。Lazy page allocation看一下内存allocation,或者更具体的说brk系统调用,brk系统调用会调整一个指针,该指针指向堆的最顶端。brk()系统调用会拓展heap的上界,也就是扩大heap的容量。这意味着,当brk实际发生或者被调用的时候,内核会分配一些物理内存,并将这些内存映射到用户应用程序的地址空间,然后将内存内容初始化为0,再返回brk系统调用。这样,应
2021-05-11 12:38:57
451
原创 Lab system calls
6s081 Lab2: system calls一开始看的时候看见这两个实验都是moderate,还以为挺简单。结果因为对xv6 book不熟悉,没有弄明白整个系统调用的过程,花了很多的时间去理解xv6中系统调用的过程。含泪总结…………一定要认认真真的看xv6 book 不然实验可能真的不会写。关于实验要求,比较重要的一些点我都加了下划线。(也是我踩过的坑…………)这个实验看着简单,但是写10行代码差不多要看100行左右的源码。System call tracing (moderate)In th
2021-04-21 23:52:39
1378
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人