- 博客(236)
- 收藏
- 关注
原创 232.Mit6.S081-实验十-Mmap
mmap和munmap系统调用允许UNIX程序对其地址空间进行详细控制。它们可用于在进程之间共享内存,将文件映射到进程地址空间,并作为用户级页面错误方案的一部分,如本课程中讨论的垃圾收集算法。在本实验室中,您将把mmap和munmap添加到xv6中,重点关注内存映射文件(memory-mapped files)。
2024-08-05 17:19:56
1039
原创 230.信号量
信号量是一种用于多线程同步的机制,可以控制对共享资源的访问。信号量的基本概念是使用计数器来控制多个线程对共享资源的访问。信号量可以分为两类:计数信号量(Counting Semaphore)和二进制信号量(Binary Semaphore)。
2024-07-29 21:52:08
217
原创 229.MIT6.S081-实验八-Locks
在本实验中,您将获得重新设计代码以提高并行性的经验。多核机器上并行性差的一个常见症状是频繁的锁争用。提高并行性通常涉及更改数据结构和锁定策略以减少争用。您将对xv6内存分配器和块缓存执行此操作。要开始本实验,请将代码切换到lock分支。
2024-07-29 15:57:07
852
原创 227.MIT6.S081-Multithreading
本实验将使我们熟悉多线程。将在用户级线程包中实现线程之间的切换,使用多个线程来加速程序,并实现一个屏障。第一个练习让我们在用户态模拟了线程的切换,这里重要的就是进程/线程上下文的保存与恢复;第二三个练习则是让我们跳出了xv6,去熟悉pthread库和线程的同步互斥。
2024-07-24 16:01:21
763
原创 225.Mit6.S081-实验六-Copy-on-Write Fork for xv6
虚拟内存提供了一定程度的间接寻址:内核可以通过将PTE标记为无效或只读来拦截内存引用,从而导致页面错误,还可以通过修改PTE来更改地址的含义。在计算机系统中有一种说法,任何系统问题都可以用某种程度的抽象方法来解决。Lazy allocation实验中提供了一个例子。这个实验探索了另一个例子:写时复制分支(copy-on write fork)。
2024-07-21 11:25:17
683
原创 224.Makefile的使用
Makefile是一种用于管理和自动化软件编译过程的文本文件。它通常包含了一系列规则,这些规则描述了如何根据源代码文件生成可执行文件或者其他目标文件。Makefile的核心概念是规则和依赖关系,规则定义了如何生成一个或多个目标文件,而依赖关系则指定了生成目标文件所需要的源文件或其他依赖文件。下面我们通过一步一步编写Makefile来学习Makefile规则。
2024-07-18 17:43:14
683
原创 221.Mit6.S081-实验5-xv6-xv6 lazy page allocation
一、操作系统可以使用页表硬件的技巧之一是sbrk()。在我们给出的内核中,sbrk()。内核为一个大请求分配和映射内存可能需要很长时间。例如,考虑由262144个4096字节的页组成的千兆字节;即使单独一个页面的分配开销很低,但合起来如此大的分配数量将不可忽视。此外,有些程序申请分配的内存比实际使用的要多(例如,实现稀疏数组),或者为了以后的不时之需而分配内存。为了让sbrk()在这些情况下更快地完成,复杂的内核会延迟分配用户内存。也就是说,sbrk()。。您将在这个实验室中向xv6添加这个延迟分配特性。
2024-07-17 19:36:02
852
原创 220.贪心算法:根据身高重建队列(力扣)
它接受一个`vector<vector<int>>`类型的参数`people`,其中每个内部向量包含两个整数:第一个整数表示身高,第二个整数表示该人的k值。它接受两个`vector<int>`类型的参数`a`和`b`,并返回一个布尔值。这段代码定义了一个名为`Solution`的类,其中包含两个成员函数:一个静态比较函数`cmp`和一个成员函数`reconstructQueue`。- 使用`sort`函数对`people`向量进行排序,排序规则由静态比较函数`cmp`提供。
2024-07-12 17:18:02
653
原创 218.贪心算法:分发糖果(力扣)
在这个循环中,如果当前孩子的评分比他后一个孩子的评分高(`ratings[i]>ratings[i+1]`),则当前孩子的糖果数应该是他后一个孩子的糖果数加1和他当前糖果数中的较大值(`candyNum[i]=max(candyNum[i+1]+1,candyNum[i]);在这个循环中,如果当前孩子的评分比他前一个孩子的评分高(`ratings[i]>ratings[i-1]`),则当前孩子的糖果数应该比前一个孩子的糖果数多1(`candyNum[i]=candyNum[i-1]+1;
2024-07-12 15:24:07
1154
原创 216.Mit6.S081-实验四-Traps
本实验探索如何使用陷阱实现系统调用。您将首先使用栈做一个热身练习,然后实现一个用户级陷阱处理的示例。开始编码之前,请阅读xv6手册的第4章和相关源文件:要启动实验,请切换到traps。
2024-07-12 14:12:22
4627
原创 215.Mit6.S081-实验三-page tables
在本实验室中,您将探索页表并对其进行修改,以简化将数据从用户空间复制到内核空间的函数。
2024-07-11 19:16:37
1173
原创 213.贪心算法:跳跃游戏||(力扣)
该算法使用贪心策略,每次选择当前能跳跃的最远位置,并更新下一次能跳跃的最远位置。遍历过程中,每当到达当前能跳跃的最远位置时,增加跳跃次数,并更新当前跳跃能到达的最远位置。如果在更新过程中,发现能到达或超过终点,跳出循环。,表示最少需要跳跃两次。
2024-07-08 20:34:53
796
原创 212.贪心算法:跳跃游戏(力扣)
这个算法使用贪心算法的思路,通过遍历数组,每一步更新能到达的最远位置。如果能到达或超过数组的最后一个位置,则返回。
2024-07-08 20:09:10
630
原创 211.xv6——3(page tables)
UART0和UART0_IRQVirtio磁盘接口CLINT#define CLINT_MTIME (CLINT + 0xBFF8) // 启动以来的时钟周期数PLIC。
2024-07-04 19:48:08
937
原创 210.C++中max_element和min_element 的使用
和是 C++ 标准库中的函数,用于在容器(如 vector、数组等)中找到最大和最小元素的迭代器(或指针)。
2024-07-02 16:46:20
472
原创 205.Mit6.S081-实验二 system calls
在上一个实验室中,您使用系统调用编写了一些实用程序。在本实验室中,您将向xv6添加一些新的系统调用,这将帮助您了解它们是如何工作的,并使您了解xv6内核的一些内部结构。您将在以后的实验室中添加更多系统调用。
2024-06-30 19:38:48
1764
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人