XV6 0x5
lab521年后的lab删除了该lab 内存分配 急分配:当进程请求内存时,操作系统立即为其分配内存。 懒分配:当进程请求内存时,操作系统不会立即为其分配内存,而是等待内存被释放后再为其分配。 COPY-ON-WRITE(COW) —FORK 牛叉:当一个进程创建另一个进程的副本时,新进程会开始时共享父进程的内存页。只有在这些页被写入时,才会复制这些页。 Demand page:当进程请求一个不存在的页面时,操作系统会将其加载到内存中。 least-recently-used(LRU):LRU是一种页面替换算法,它根据页面最近被访问的时间来决定哪个页面应该被替换。 PTE_A 的作用:可用于时钟算法 memory-mapped-file:mmap系统调用 Eliminate allocation from sbrk() (easy)老师已经在lecture上讲了,所以完成的比较轻松。 首先我们修改sys_sbrk()函数,只修改sz大小,将内存分配交给中断! 1234567891011uint64sys_sbrk(void){ int...
XV6 0x4
lab4trap步骤(跳转到trampoline):交换 a0 和 sscratch: 使用 csrrw a0, sscratch, a0 指令交换 a0 和 sscratch 的值。这样,a0 现在指向 TRAPFRAME,这是用户空间的 trapframe 地址,而 sscratch 保存了原来的 a0 值(即用户态传递的参数)。 保存用户态寄存器: 将所有用户态寄存器的值保存到 a0 指向的 trapframe 中,以便在处理完陷阱后可以恢复这些寄存器的值。 保存用户态的 a0: 将 sscratch(即原来的 a0)保存到 trapframe 中,以便在返回用户态时可以恢复 a0 的值。 恢复内核态上下文: 从 trapframe 中恢复内核栈指针(sp)、当前 hart 的 id(tp)、usertrap 函数的地址(t0),以及内核页表(satp)。 跳转到 usertrap: 使用 jr t0 跳转到 usertrap()...
XV6 0x3
lab3地址空间 trampoline被映射两次用以跳转和跳出内核。 每个cpu拥有各自的kernel...
XV6 0x2
lab2TOPIC: ISOLATION:将资源抽象为服务。我们需要控制应用权限,防止应用程序间的相互影响,定期让应用程序让出cpu… KERNEL/USER MODE:隔离操作系统内核和用户应用程序。 SYSTEM CALL:从用户态转到内核态。通过ECALL指令并传入系统调用号实现。 RISCV模式:用户模式,监督者模式,机器模式。 硬件对隔离的支持 硬件可以通过寄存器的一个位判断当前模式,以允许执行特权指令。 硬件通过虚拟内存限制进程可以访问的内存空间。 宏内核与微内核: 宏内核:将所有操作系统服务都运行在内核模式中。 优点:较好的性能,如应用程序与文件系统交互,只需进入一次内核。 缺点:易产生BUG,且一旦产生bug极可能导致内核崩溃。 微内核:内核模式只提供基础支持,将文件系统等功能作为普通应用程序运行 优点:较少的BUG,某功能崩溃可尝试重启。 缺点:性能欠佳,如应用程序与文件系统交互,应用程序需要先跳转进内核,再从内核跳转进文件系统用户程序。 gdb配置首先将gdb配置输出到~/.gdbinit。 12echo...
XV6 0x1
lab1xv6地址:6.S081 / Fall 2020 (mit.edu) 环境配置:Mit6.s081环境配置踩坑之旅WSL2+VScode_mit6s081-CSDN博客 视频链接:MIT 6.S081 2020 操作系统 [中英文字幕]_哔哩哔哩_bilibili 译文:mit-public-courses-cn-translatio.gitbook.io 参考:课程介绍 · 6.S081 All-In-One (dgs.zone) xv6做的比较快,主要是较难lab参考了dalao得。(PS:主要是自己能力就这,能完成中低难度的lab已经是万幸了) Design is sort of high level structure, and implementation is really about what the code looks like. 设计是一种高层次的结构,而实现则是关于代码真正的样子 OS Purpose: ABSTRACT MULTIPLEX ISOLATION SHARING SECURITY PERFORMANCE RANGE OF...
malloclab
0x1 介绍可以从手册得知,我们需要修改mm.c里面的三个函数mm_malloc、mm_free、mm_realloc来实现堆的相关功能。教师们为我们编写了如此庞大的测试环境,那么我们也要认真完成它。 由于lab自带的版本是每次请求时都执行sbrk系统调用。我们知道,系统调用会是陷入内核,花费大量时间,那么接下来我们要做的就是减少系统调用的次数。 下图为自带版本的测试,可以看到内存利用率并不高 ,并且有部分测试并未通过。 0x2 隐式空闲列表我们进行第一次修改,为其实现一个简单的分配器。 注意事项: 这里的块指针bp指向第一个有效载荷 可以利用宏定义将复杂操作定义为类似函数操作的方法(PS:在预处理期间替换,而函数内联等操作则在编译期替换) sbrk返回值 返回值 描述 (void...
JavaScript学习记录0x2
4.1 对象构造对象的方法 12let user = new Object(); // “构造函数” 的语法let user = {}; // “字面量” 的语法 文本和属性123456789101112131415let user = { name: "Randolfluo", "Nian lin": 20};alert(user.name);user.country = "China" // 添加属性alert(user.country);delete user.country; // 删除属性alert(user.country); //undefineduser["Nian lin"] = 18; //有空格或者数字开头的属性,需要用中括号 //这里的Nian lin可以由程序运行时计算得出 方括号12345678//因此我们实现返回用户需要的属性值let...
JavaScript学习记录0x1
JavaScript[toc] ECMAScript是 JavaScript 的标准规范。 主要记录下学习记录和javascript相较于C和cpp的差异和特性 跟着现代 JavaScript 教程一起学! 2.1 HelloWorld我们可以直接在html里面嵌入js脚本,也可以引用相对路径的js文件: 1234567891011121314<!DOCTYPE HTML> <!-- HTML5 Document Type --><html> <!-- html文件根元素 --><body> <!-- 直接在html界面嵌入js脚本 --> <script> alert("Randolfluo"); </script> <!-- 引入js脚本 --> <script src =...
栈溢出攻击原理与防范
栈溢出攻击原理与防范栈溢出(又名stack overflow),指的是程序向栈中某个变量中写入的字节数超过了这个变量本身所申请的字节数,因而导致与其相邻的栈中的变量的值被改变。这种问题是一种特定的缓冲区溢出漏洞,类似的还有堆溢出,bss 段溢出等溢出方式。栈溢出漏洞轻则可以使程序崩溃,重则可以使攻击者控制程序执行流程。 [toc] 为什么栈溢出如此知名 莫里斯蠕虫 莫里斯蠕虫病毒利用了栈溢出漏洞 莫里斯蠕虫(Morris Worm)是在1988年11月2日由罗伯特·泰潘·莫里斯(Robert Tappan Morris)编写的一个计算机蠕虫。导致数千台计算机瘫痪,造成了大量的时间和金钱损失。他也是第一个因计算机犯罪而被判有罪的人。 stack overflow 论坛logo:全球知名的程序员论坛 漏洞发现至今已有35年,缓冲区溢出漏洞仍占比最多: demo什么是栈溢出,请看如下demo: 12345678910#include<stdio.h>int main(){ char s[10]; gets(s); ...
python数据分析0x1
为科学计算和数据科学设计的Python发行版:Canopy和Anaconda Anaconda 包管理:Conda类似于pip spyder:交互式Python语言开发环境 IPython是一个用于交互式计算的Python工具 a?获得a的信息 %魔术命令(Magic Commands)是特殊的命令,如%run demo.py执行当前目录下的demo.py。 NumPy库入门NumPy是一个开源的Python科学计算基础库,包含: 一个强大的N维数组对象ndarray 广播功能函数 整合C/C++/Fortran代码的工具 线性代数...