lab3】的更多相关文章

摘要: 源代码参见我的github:https://github.com/YaoZengzeng/MIT-6.824 Lab3: Paxos-based Key/Value Service Introduction 在Lab2中我们依靠单个的master view server来获取primary.如果view server不可用(崩溃了或者有网络问题),那么key/value service就不工作了,即使primary和backup都是可用的.而且它在处理server(primary或者ba…
[感受] 这次操作系统实验感觉还是比较难的,除了因为助教老师笔误引发的2个错误外,还有一些关键性的理解的地方感觉还没有很到位,这些天一直在不断地消化.理解Lab3里的内容,到现在感觉比Lab2里面所蕴含的内容丰富很多,也算是有所收获,和大家分享一下我个人的一些看法与思路,如果有错误的话请指正. [关键函数理解] 首先第一部分我觉得比较关键的是对于一些非常关键的函数的理解与把握,这些函数是我们本次实验的精华所在,虽然好几个实验都不需要我们自己实现,但是这些函数真的是非常厉害!有多厉害,呆会就知道了…
OS Lab3 踩坑记 Lab3在之前Lab2的基础上,增加了进程建立.调度和中断异常处理.其中测试包括进程建立以及进程调度部分. 由于是第一次做bug记录,而且是调试完bug后再做的记录,所以导致记录不完全.但是为之后bug记录的习惯打下基础. 进程建立测试(env_check) 注意 env_setup_vm() 中的pgdir地址赋值. 在 envid2env() 中当有 checkperm 时,检查失败也要给 *penv 赋值 0 (容易忘记). 这里最好检查一下 curenv 是否存在…
//yuec2 Yue Cheng package lab3; public class Fraction { int numerator; int denominator; //obeject with 1 Fraction() { numerator = 1; denominator = 1; } //object with passing value Fraction(int numerator, int denominator) { this.numerator=numerator; t…
CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom 栈结构镇楼 这里先给出getbuf的反汇编代码和栈结构,方便下面的使用. 栈结构: 第2关:bang 构造攻击字符串作为目标程序输入,造成缓冲区溢出,使目标程序能够执行bang函数:并且要篡改全局变量global_value为cookie值,使其判断成功.但我们知道全局变量放置在bss节或data节,并不存放在栈中,前…
前言 完成这个实验大概花费一天半的时间,看了很多大佬的博客,也踩了很多的坑,于是打算写一篇博客重新梳理一下思路和过程,大概会有两篇博客吧. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom lab3要我们做这样一件事情,修改一个正在运行程序的stack以达到预期的目的.具体的修改方式是这样的:程序定义了一个局部C风格字符串变量,注意局部变量是放在stack上面的,所以…
资源 ucore在线实验指导书 我的ucore实验代码 练习1:给未被映射的地址映射上物理页 题目 完成do_pgfault(mm/vmm.c)函数,给未被映射的地址映射上物理页.设置访问权限的时候需要参考页面所在 VMA 的权限,同时需要注意映射物理页时需要操作内存控制结构所指定的页表,而不是内核的页表.注意:在LAB3 EXERCISE 1处填写代码.执行make qemu后,如果通过check_pgfault函数的测试后,会有"check_pgfault() succeeded!"…
jos系统调用函数链 记录自己对jos系统调用实现的理解. 用户程序访问系统服务的方法 用户使用系统服务的方式大概分为如下几种: (1)用户程序---->库函数----->系统调用----->内核 用户调用库函数,库函数中完成对实际系统调用的封装,并完成例如检测用户参数的工作,最终通过int指令进入内核 (2)用户程序---->系统调用----->内核 在用户程序中直接通过int 指令,进入内核. (1).(2)本质上是同一种,最终都是执行int指令进入内核.实际开发中,推荐…
在这里记录一下关于软件构造课程Lab3中关于正则表达式的应用. 在实验内容中,要求用正则表达式来匹配读入文件的内容,从而取得构建图需要的相关信息. 举个例子,读入的文件(GraphPoetTestFile.txt)内容如下: 先说一下文件内容中的数据格式: ①一定有一行,第一个单词为"GraphType",后面是一个空格.一个'='.一个空格,加上一个"类型名" ②一定有一行,第一个单词为"GraphName",后面是一个空格.一个'='.一个空…
1. ucore lab3介绍 虚拟内存介绍 在目前的硬件体系结构中,程序要想在计算机中运行,必须先加载至物理主存中.在支持多道程序运行的系统上,我们想要让包括操作系统内核在内的各种程序能并发的执行,而物理主存的总量通常是极为有限的,这限制了并发程序的发展.受制于成本问题,拥有足够大容量主存的个人计算机是普通人承受不起的.因此计算机科学家们另辟蹊径,想到了利用局部性原理来解决既要能并发运行大量程序又要使计算机足够低成本这一矛盾问题. 局部性原理告诉我们,大多数程序通常都在执行循环逻辑,访问数据时…
BUAA_OS lab3 难点梳理 实验难点 进程创建 对于初始化部分,首先需要在pmap.c中修改mips_vm_init()函数,为envs开空间,并map到UENVS空间. 其次,模仿page_init()的做法,将空闲进程控制块串成env_free_list. 至此没有什么理解上的难度. 进程部分的难点,主要在于进程创建流程的理解.进程创建的流程为: 从env_free_list中获取一个空的PCB 初始化进程控制块 为进程分配资源 从空闲链表中移出,开始执行 STEP1&2 env_a…
Lab3 这个实验分成了两个大部分. 1. PartA User Environments and Exception Handling kernel使用Env这个数据结构来trace每一个user enviroment,你需要设计JOS来支持多environments. kernel维护三个主要的全局变量来完成上面的内容 struct Env *envs = NULL; // All environments struct Env *curenv = NULL; // The current…
本文为上海交大 ipads 研究所陈海波老师等人所著的<现代操作系统:原理与实现>的课程实验(LAB)的学习笔记的第三篇:用户进程与异常处理.所有章节的笔记可在此处查看:chcore | 康宇PL's Blog 实现用户进程 进程结构 ChCore 中每个进程都对应一个 process 结构体.slot_table 是一个进程占有的内核对象数组和元信息组成的结构体.thread_list 是连接该进程所有线程的链表.如何通过 list_head 的得到对应的对象我们在 Lab 2 里已经学习过…
(防扒小助手) 本人CSDN博客: https://blog.csdn.net/m0_61753302 本人博客园博客(同步CSDN): 何以牵尘 - 博客园 (cnblogs.com)https://www.cnblogs.com/kalesky/ 如果对你有用的话欢迎点赞关注哟! ​​​​​​​ 目录 1.实验目标概述 2.实验环境配置 2.1 实验环境 2.2 GitHub Lab3仓库的URL地址 3.实验过程 3.1 待开发的三个应用场景 3.1.1 应用场景 3.1.2 共性需求 3…
lamp: 在阿里云linux(Ubuntu)上安装Apache mysql php : apt-get install mysql_server mysql_client php5 php_mysql apache2 系统会提示正确的包的名称 安装ECShop 在本地命令行 scp ecshop.zip root@xxx.xxx.xx.xxx:/var/www/ 把压缩文件拷贝到服务器 然后unzip ecshop.zip解压文件 在/etc/apache2/sites-available/下…
这个实验主要是熟悉栈,和了解数据缓存区溢出的问题. 数据缓存区溢出:程序每次调用函数时,会把当前的eip指针保存在栈里面,作为被调用函数返回时的程序指针.在被调用程序里面,栈是向下增长的.所有局部变量都存储在栈里面(静态局部变量除外).假设有一个字符串变量str,在str读取数据时,如果缓存区没有进行一定的保护,会造成缓存区的溢出.由于栈是向下增长的,但是对于一个变量,如str,他的数据存储顺序是向上增长的.所以当缓存区溢出时,可能对eip的返回指产生影响,可以通过输入,来改变eip指针的值,从…
概述 本lab将实现一个锁管理器,事务通过锁管理器获取锁,事务管理器根据情况决定是否授予锁,或是阻塞等待其它事务释放该锁. 背景 事务属性 众所周知,事务具有如下属性: 原子性:事务要么执行完成,要么就没有执行. 一致性:事务执行完毕后,不会出现不一致的情况. 隔离性:多个事务并发执行不会相互影响. 持久性:事务执行成功后,所以状态将被持久化. 一些定义 将对数据对象Q的操作进行抽象,read(Q):取数据对象Q,write(Q)写数据对象Q. schedule 考虑事务T1,T1从账户A向账户…
前言 虚拟内存是计算机系统内存管理的一种技术.它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换. 覆盖和技术 覆盖 依据程序逻辑结构,将程序划分为若干功能相对独立的模块:将不会同时执行的模块共享同一块内存区域 但是由于需要程序员来划分功能模块和确定模块之间的覆盖关系,所以增加了编程难度,并且也增加了执行时间 交换 交换技术和覆盖技术讨论的不一样的是,交换技术讨论的是当前内存足够…
Factory设计模式基本就是通过传入指定的参数/或者不传入参数,通过Factory的某个方法(为了避免实例化Factory对象,一般方法为静态static),来获取一个对象.这个是Factory用的比较多的地方.对于Vertex和Edge的Factory来说,通过传入一些构建对象所需的信息来自动创建一个对象,这样也就避免了重复调用Vertex/Edge自身的方法来为Vertex/Edge对象添加信息/属性. 对于图来说,实例化一个图只需要一个String标签(根据你设计的Graph的构造器来决…
做个总结,这节说是讲虚拟内存管理,大部分的时间都在搞SWAP机制和服务于此机制的一些个算法.难度又降了一截. 不过现在我的电脑都16G内存了,能用完一半的情景都极少见了,可能到用到退休都不见得用的上SWAP机制了.在这种情况下SWAP分区也就象征性的分个几百兆了. vmm.c&.h vma:描述了一块连续的虚拟内存空间,保证start<=end struct vma_struct { struct mm_struct *vm_mm; // the set of vma using the s…
Introduction 在这个实验中,我们将实现操作系统的一些基本功能,来实现用户环境下的进程的正常运行.你将会加强JOS内核的功能,为它增添一些重要的数据结构,用来记录用户进程环境的一些信息:创建一个单一的用户环境,并且加载一个程序运行它.你也可以让JOS内核能够完成用户环境所作出的任何系统调用,以及处理用户环境产生的各种异常. Part A: User Environments and Exception Handling 新包含的文件inc/env.h里面包含了JOS内核的有关用户环境(…
徐礼超  原创作品转载请注明出处:http://www.cnblogs.com/xulichao <软件工程(C编码实践篇)>MOOC课程http://mooc.study.163.com/course/USTC-1000002006 一.实验一:写一个Hello word小程序 主要是熟悉实验楼环境,初步了解代码规范,熟悉linux基本命令,包括cd.ls.mkdir等命令,vim基本命令,包括vi使用,一般模式.编辑模式.命令模式等模式切换,markdown的书写,包括标题.插入链接.插入…
转载自:https://book.douban.com/review/6093947/ 如果你觉得这本书过于厚重担心看不下来的话,不妨跟着coursera的Hardware/Software Interface这门课程去听一听.这本书虽然是这门课的超集,但是其中的关键与精华都在课程中有讲到.其实更关键的是,coursera的课将原书中最为精彩的lab移植了过来,在做这些作业时很难感到枯燥.下面把这门课的lab列出来,以及一些提示: Lab1:位运算,我觉得这是最无聊也是最有趣的一个Lab,看你怎…
实验数据: 实验文件: ? 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059…
前言 Swift 全面支持 Unicode 符号. Swift 中的定义和实现是在同一个单元中的,通常一个 Swift 源代码单文件是以 ".Swift" 结尾的. Swift 不需要单独编写一个 main 函数作为入口,在 Swift 语言中函数是一等成员,编译器会自动将遇到的第一个函数作为入口. Swift 允许我们不用在行尾加分号 ";".但如果在同一行有两个甚至多个表达式,需要在每个表达式后面加上分号. Playground 是一种编写代码时可以即时预览代码…
0. 前言 我相信在开始第 2 天的学习时,你已经顺利地完成了第 1 天的课程. 我们回顾一下第 1 天的主要关注点: 为什么选择 ASP.NET MVC ? ASP.NET Webforms 和 ASP.NET MVC 的对比 理解 ASP.NET MVC 的 Controller 以及 Views 提醒:如果你还没有完成第 1 天的学习,最好先确保完成它.我们的目标是在最后一天用最佳实践和最新技术方法来创建一个小的 MVC 项目.每一天的 Lab 训练中,我们都会比之前一天增加一些实用性的功…
C++实现数字媒体三维图像变换 必备环境 glut.h 头文件 glut32.lib 对象文件库 glut32.dll 动态连接库 程序说明 C++实现了用glut画物体对象的功能.并附带放大缩小,旋转,平移和在不同视角观察的功能. 操作说明 重要说明 define MAX_MODEL 20 程序最多支持创建20个对象,如需要创建更多的对象,请调高这个参数 define MAX_MODEL_NUM 4000 程序最多支持对象拥有4000个点和4000个面,如需要读入更复杂的对象,请调高这个参数…
1.去掉重复的数组元素.2.获取一个数组中的重复项.3.求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节.4.判断一个字符串中出现次数最多的字符,统计这个次数.5.数组排序. 6.快排. 7.删除/添加数组项. 8.数组随机顺序输出. 9.数组求和.最大值. 10.判断是否为数组. 11.有一个int型数组,里面有若干数字.要求统计出一共有多少种不同的数字?每种数字出现的频率从少到多排列,频率相同则从小到大排列. 12.冒泡排序. 1.去掉重复的数组元素. Array.…
CPU 矩阵乘法 能相乘的两个矩阵,必须满足一个矩阵的行数和第二个矩阵的列数相同. A(N*P) * B(P*M) = C(N*M). 其中P是行数,N是列数, 从宽高的角度来说,即 A的宽度和B的高度是相同的.C矩阵 = ha * wb. 其中C(i,j) = A矩阵中的i行和B矩阵中的j列进行点乘得到该点的值. //C = A*B void MatrixMulCPU(float* _C,const float *_A,const float *_B,int _wa,int _ha,int _…