当前位置: 首页 > news >正文

网站权重0免费好用的ip代理

网站权重0,免费好用的ip代理,网站建设页头的设计,免费net网站空间【MIT6.S081-2020Fall】Lab: locks 【MIT6.S081-2020Fall】Lab: locks内存分配实验内存分配实验准备实验目的1. 举一个例子说明修改前的**kernel/kalloc.c**中如果没有锁会导致哪些进程间竞争(races)问题2. 说明修改前的kernel/kalloc.c中锁竞争contention问题及其后果3. 解释a… 【MIT6.S081-2020Fall】Lab: locks 【MIT6.S081-2020Fall】Lab: locks内存分配实验内存分配实验准备实验目的1. 举一个例子说明修改前的**kernel/kalloc.c**中如果没有锁会导致哪些进程间竞争(races)问题2. 说明修改前的kernel/kalloc.c中锁竞争contention问题及其后果3. 解释acquire和release中push_off/pop_off的作用4. 对上页实验内容的实现思路、代码设计、测试结果实验思路代码设计测试结果 同步互斥实验目标Q1关系分析请写出题目中存在的互斥和同步的关系Q2上述关系可以抽象为几个进程? 写出伪代码描述和实现思路伪代码展示 【MIT6.S081-2020Fall】Lab: locks 内存分配实验 内存分配实验准备 环境配置 commit lab0的代码 git commit -am lab0 切换到lock分支 git fetch git checkout lock make clean make; make qemu并执行kalloctest观察锁竞争情况 实验目的 1. 为每个CPU维护一个空闲页面链表每个链表都有自己的锁** ​ → 不同CPU上的分配和释放可以并行执行 2. 当某个CPU的空闲页面用尽时需要借用另一CPU的空闲页面** ​ → 虽然“借用”时可能引入锁竞争但这种情况较少发生 ​ 完成实验后需通过kalloctest的3个测试 (测试时间可能较长) 1. 举一个例子说明修改前的kernel/kalloc.c中如果没有锁会导致哪些进程间竞争(races)问题 答 Double Free问题如果没有锁来保护释放内存的操作多个进程可能会同时尝试释放同一块内存。这可能导致内存被释放多次破坏内存管理的一致性。当后续的内存分配请求发生时可能会分配到之前已经被释放但未及时回收的内存块从而导致不可预测的错误和安全问题。内存泄漏问题如果没有锁来保护内存分配的操作多个进程可能会同时尝试分配内存。这可能导致内存分配失败因为内存池可能在分配之前已经被其他进程用尽。此时一些进程可能无法获得所需的内存导致内存泄漏。数据不一致性问题如果多个进程同时修改内存池的数据结构没有适当的锁来同步这些操作就可能导致数据结构的损坏从而破坏了内存管理的一致性。性能问题没有适当的锁来管理内存池可能导致竞争条件降低了系统的性能。竞争条件会导致进程等待或频繁地重试内存分配/释放操作从而增加了系统的负载和延迟。 2. 说明修改前的kernel/kalloc.c中锁竞争contention问题及其后果 答 1、修改前的kalloc.c代码中只有一个内核内存分配器kmem这会导致在很多线程想要获取锁想要CPU 调度分配内存的时候造成拥塞情况导致大量的线程获取锁失败使得程序运行效率降低。 3. 解释acquire和release中push_off/pop_off的作用 答“acquire” 和 “release” 中的 “push_off” 和 “pop_off” 是通常用于实现中断禁用中断屏蔽的操作。这些操作通常在多任务操作系统中用于确保获取锁或释放锁的相关代码的原子性执行以防止并发执行的任务相互干扰。 4. 对上页实验内容的实现思路、代码设计、测试结果 实验思路 1、为每个CPU维护一个空闲页面链表我们可以通过修改kalloc.c代码中的kmem结构体修改为长度为NCPU的结构体数组再init函数中初始化8个结构体中的锁进行free操作的时候注意获取当前CPU的id然后对对应id的CPU进行释放 实现的核心代码 struct {struct spinlock lock;struct run *freelist; } kmem[NCPU];2、当其它CPU空闲的时候我们怎样借用其它CPU来完成任务呢我们可以进行一个简单的for循环遍历当发现这个CPU是空闲的那么我们就可以借用这个CPU 实现的核心代码 if (!r){for (int j 0; j NCPU; j){if (i ! j){// 尝试获取锁acquire(kmem[j].lock);if (kmem[j].freelist){// 如果获取到了那么就分配,并退出r kmem[j].freelist;kmem[j].freelist r-next;release(kmem[j].lock);break;}release(kmem[j].lock);}}}代码设计 // Physical memory allocator, for user processes, // kernel stacks, page-table pages, // and pipe buffers. Allocates whole 4096-byte pages.#include types.h #include param.h #include memlayout.h #include spinlock.h #include riscv.h #include defs.hvoid freerange(void *pa_start, void *pa_end);extern char end[]; // first address after kernel.// defined by kernel.ld.struct run {struct run *next; };struct {struct spinlock lock;struct run *freelist; } kmem[NCPU];void kinit() {for (int i 0; i 8; i)initlock(kmem[i].lock, kmem);freerange(end, (void *)PHYSTOP); }void freerange(void *pa_start, void *pa_end) {char *p;p (char *)PGROUNDUP((uint64)pa_start);for (; p PGSIZE (char *)pa_end; p PGSIZE)kfree(p); }// Free the page of physical memory pointed at by pa, // which normally should have been returned by a // call to kalloc(). (The exception is when // initializing the allocator; see kinit above.) void kfree(void *pa) {struct run *r;if (((uint64)pa % PGSIZE) ! 0 || (char *)pa end || (uint64)pa PHYSTOP)panic(kfree);// Fill with junk to catch dangling refs.memset(pa, 1, PGSIZE);r (struct run *)pa;int i r_tp();push_off();acquire(kmem[i].lock);r-next kmem[i].freelist;kmem[i].freelist r;release(kmem[i].lock);pop_off(); }// Allocate one 4096-byte page of physical memory. // Returns a pointer that the kernel can use. // Returns 0 if the memory cannot be allocated. void * kalloc(void) {struct run *r;push_off();int i r_tp();acquire(kmem[i].lock);r kmem[i].freelist;if (r)kmem[i].freelist r-next;release(kmem[i].lock);if (!r){for (int j 0; j NCPU; j){if (i ! j){// 尝试获取锁acquire(kmem[j].lock);if (kmem[j].freelist){// 如果获取到了那么就分配,并退出r kmem[j].freelist;kmem[j].freelist r-next;release(kmem[j].lock);break;}release(kmem[j].lock);}}}pop_off();if (r)memset((char *)r, 5, PGSIZE); // fill with junkreturn (void *)r; } 测试结果 同步互斥实验目标 Q1关系分析请写出题目中存在的互斥和同步的关系 答同步关系包含互斥关系 1、店面的窗口属于临界区资源且煎饼果子占用了该窗口后即将该临界区资源上锁鸡蛋灌饼不能再占用该临界区资源反之亦然此过程既体现了同步关系又体现了互斥关系 2、同学们排队购买早餐并且根据自己的需求站成了两队体现出来同步关系不至于让整个队伍乱掉有序地进行去获取窗口上的资源符合FIFO思想、同学们位于同步阻塞态但是当8点后没买到的同学到其它窗口去了又体现出来非阻塞态 Q2上述关系可以抽象为几个进程? 写出伪代码描述和实现思路 答上述几个关系可以抽象为4个进程 实现思路 1、可以先定义四个wait函数分别表示煎饼果子等待篮子为空鸡蛋灌饼等待篮子为空第一支队伍等待鸡蛋灌饼被添上第二支队伍等待煎饼果子被添上然后在主函数中fork四个线程宏观并行跑这四个函数知道到达早上8点收摊位置 2、因为题目说每天都会出现从一开始就排队直到 8 点结束,所以我们可以默认两边排队的人数都足够多当然实际中我们还可以为队伍人物增加设置一个人数信号量 伪代码展示
http://www.pierceye.com/news/248261/

相关文章:

  • 旅游网站开发分析报告网站建设教程搭建芽嘱湖南岚鸿信赖
  • 网站的配色方案高校网站建设意义
  • 滇中引水工程建设管理局网站网站开发怎样验收
  • ps制作网站logo阿里云网站备案拍照
  • 网站建设合同】wordpress翻书
  • 电商网站建设制作隆化县建设局网站
  • 宁波网站建设rswl网页美工设计教案
  • 贵州省住房城乡建设部网站json网站开发
  • 桥头网站仿做百度里面的站长工具怎么取消
  • 博物馆网站页面设计说明山东高端网站定制
  • python网站开发效率jsp做网站下载图片
  • 营销式网站建设免费注册个人网站官网
  • 高职高专 网站建设与维护开发一个网站平台多少钱
  • 网站后缀有哪些宜昌建设网站
  • iis做网站的流程wordpress有中文版没
  • 一般的美工可以做网站吗网站做相册
  • 扁平化网站psd招聘类网站怎么做
  • 想当淘客自己的网站怎么做服装网页设计网站
  • 网站怎么做数据接口wordpress主题知更
  • 注册网站登录企业网站建设论文模板
  • 营销型网站模板免费下载常用wordpress搭建环境
  • 浦东新区手机网站建设wordpress 视频页面
  • 做课件最好的素材网站网站背景动图怎么做
  • 做网站时已做好了ps怎么倒入深圳燃气公司地址
  • 做类似淘宝的网站要多少钱亚马逊网站建设进度计划书
  • 够完美网站建设怎么把视频弄成超链接
  • 苏州网站建设哪家更好四川省建设工程信息网官网二建注册
  • 潍坊网站关键词推广湖南餐饮网站建设
  • 珠海网站建设优化推广win2008 iis7发布网站
  • 平安网站建设发挥了积极的作用wordpress 的数据库路径