自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

原创 oat文件映射到虚拟内存以及类方法执行的全过程

一、映射OAT文件到内存并解析头部若backend是Quick类型,那么会生成quick类型的机器指令。Quick类型的机器指令的函数依赖关系由JNI函数表描述,而不需要通过动态链接器进行重定位。通过OatFile类的静态成员函数OpenElfFile来手动加载指定的OAT文件。这种方式是按照ELF文件格式来解析要加载的OAT文件的。由ElfFile::Open()将oat文件的elf头和...

2019-12-28 19:57:59 514

原创 阅读RAZOR

意义商用软件 大量功能 for 用户流行度,但个体用户仅需小部分功能bloated code 缺点:阻碍最优执行;更多的薄弱点,更大的攻击面;浪费内存RAZOR基于users‘ specification,采用几个control-flow heuristics去推断支持用户期望的功能所需的相关代码,以此给deployed binaries进行code reduction。比较softwa...

2019-09-15 13:44:57 844

原创 MIT6.828学习之Lab6: Network Driver

Introduction这个lab是默认你可以自己做的最后一个项目。既然你有一个文件系统,OS还应该有network stack。在这个lab中,你将为网络接口卡(network interface card)写一个驱动程序。这个card是基于Intel 82540EM芯片,也被称为E1000。Getting Started然而网卡驱动程序(network card driver)并不足以...

2019-09-06 22:01:55 1107

原创 MIT6.828学习之Lab6_Part B: Receiving packets and the web server

Receiving Packets就像您在transmitting packets时所做的一样,您必须配置E1000来接收数据包,并提供receive descriptor queue and receive descriptors。第3.2节描述包接收的工作原理,包括接收队列结构和接收描述符,第14.4节详细介绍了初始化过程。Exercise 9. 阅读3.2节。您可以忽略关于 inter...

2019-09-03 17:11:01 471

原创 MIT6.828学习之Lab6_Part A: Initialization and transmitting packets

您的内核没有时间概念,所以我们需要添加它。目前有一个时钟中断,每10ms由硬件产生一次。在每个时钟中断时,我们可以增加一个变量来表示时间已经提前了10ms。这是在kern/time.c中实现的,但尚未完全集成到内核中。Exercise 1. 为kern/trap.c中的每个时钟中断添加对time_tick的调用。实现sys_time_msec并将其添加到kern/syscall.c中的sysc...

2019-08-30 21:56:59 685

原创 MIT6.828学习之homework11:xv6 log

本作业分两部分研究xv6日志。首先,您将人为地创建一个崩溃(crash),说明为什么需要日志记录(logging)。其次,您将消除xv6日志系统中的一个低效。Creating a Problemxv6日志的目的是使文件系统操作的所有磁盘更新相对于崩溃(crashes)来说都是原子性的。例如,文件创建包括向目录添加新条目和将新文件的inode标记为in-use。如果没有日志记录,则在一个崩溃之后...

2019-08-24 09:28:01 675

原创 MIT6.828学习之Lab5_实验过程

Introduction在这个实验室中,您将实现spawn,一个加载并运行磁盘上可执行文件的库调用。然后,您将充实内核和库操作系统,使其足以在控制台上运行shell。这些特性需要一个文件系统,本实验室介绍了一个简单的读/写文件系统。实验室这部分的主要新组件是位于新fs目录中的文件系统环境。浏览此目录中的所有文件,了解其中的新内容。此外,在user和lib目录中还有一些与文件系统相关的新源文件:...

2019-08-23 08:47:58 3616

原创 MIT6.828学习之Lab5:File system, Spawn and Shell

File system preliminaries(序言)您将使用的文件系统比大多数“实际”文件系统(包括xv6 UNIX)要简单得多,但是它的功能足够强大,可以提供基本特性:创建、读取、写入和删除按层次(hierarchical )目录结构组织的文件。我们(至少目前)只开发一个单用户操作系统,它提供了足够的保护来捕获bug,但不能保护多个相互怀疑的用户。因此,我们的文件系统不支持UNIX文件...

2019-08-22 22:24:43 1355

原创 MIT6.828学习之homework10:bigger files for xv6

在这个作业中,您将增加xv6文件的最大大小。目前,xv6文件被限制在140个扇区,即71,680字节。这个限制来自于一个xv6 inode包含12个“直接”块号("direct" block number)和一个“单间接”块号("singly-indirect" block number),这个块号指的是一个最多可以容纳128个块号的块,总数为12+128=140。您将更改xv6文件系统代码,使每...

2019-08-13 21:21:06 2016 1

原创 MIT6.828学习之homework9:Barriers

在本作业中,我们将探讨如何使用pthread库提供的条件变量来实现barrier。barrier是应用程序中的一个点,在这个点上,所有线程都必须等待,直到所有其他线程也到达该点。条件变量是一种序列协调技术,类似于xv6的sleep和wakeup。下载barrier.c,然后在你的手提电脑或Athena machine上编译:$ gcc -g -O2 -pthread barrier.c$ ....

2019-08-12 11:55:37 1039

原创 MIT6.828学习之homework8:User-level threads

多路复用机制为进程提供了独占处理器的假象,实现多路复用有几个难点。首先,应该如何从运行中的一个进程切换到另一个进程?xv6 采用了普通的上下文切换机制;虽然这里的思想是非常简洁明了的,但是其代码实现是操作系统中最晦涩难懂的一部分。第二,如何让上下文切换透明化?xv6 只是简单地使用时钟中断处理程序来驱动上下文切换。第三,可能出现多个 CPU 同时切换进程的情况,那么我们必须使用一个带锁的方案来避免...

2019-08-10 19:12:15 555

原创 MIT6.828学习之Lab4: Preemptive Multitasking

在这个lab中,你会在多个同时active的用户模式环境中实现preemptive multitasking(抢占多任务处理)在Part A,你会向JOS加入multiprocessor support(多处理器支持),实现round-robin scheduling(轮转调度),并且添加基础的environment management system calls(这个调用能创建和destroy...

2019-08-09 17:29:56 1024

原创 MIT6.828学习之Lab4_Part C: Preemptive Multitasking and Inter-Process communication (IPC)

在lab 4的最后一部分中,您将修改内核以抢占不合作的环境,并允许环境之间显式地传递消息。

2019-08-09 12:26:45 906

原创 MIT6.828学习之Lab4_Part B: Copy-on-Write Fork

如之前提到的,Unix提供了fork()系统调用作为其主要的进程创建原语。fork()系统调用将调用者进程(父进程)的地址空间复制到一个新创建的进程(子进程)。xv6 Unix 通过复制父进程物理页所有数据到分配给子进程的物理页。dumbfork()也是这么做的。将父地址空间复制到子地址空间是fork()操作中开销最大的部分。然而,调用fork()后几乎里面会在子进程中调用一个exec(),它...

2019-08-08 10:23:50 1112 1

原创 MIT6.828学习之Lab4_Part A: Multiprocessor Support and Cooperative Multitasking

在本实验室的第一部分中,您将首先将JOS扩展到在多处理器系统(multiprocessor system)上运行,然后实现一些新的JOS内核系统调用,以允许用户级环境创建额外的新环境。您还将实现协作循环调度(cooperative round-robin scheduling),允许内核在当前环境自愿放弃CPU(or exits)时从一个环境切换到另一个环境。在稍后的Part C中,您将实现抢占式...

2019-08-03 20:03:12 1230

原创 MIT6.828学习之homework7:xv6 locking(confused!)

在本作业中,您将探索 interrupts 和locking之间的一些交互Don’t do this确保您理解如果xv6内核执行以下代码片段会发生什么:struct spinlock lk;initlock(&lk, "test lock");acquire(&lk);acquire(&lk);(请随意使用QEMU查找. acquire 处于spinlock...

2019-07-27 11:34:21 1673

原创 MIT6.828学习之homework6:Threads and Locking

parallelism(并行性)在本作业中,您将使用a hash table(哈希表)研究threads and locks的并行编程。您应该在具有多个核心的真实计算机(不是xv6,也不是qemu)上完成这项作业。在自己的操作系统上使用下面命令$ gcc -g -O2 ph.c -pthread$ ./a.out 22指定在哈希表上执行put和get操作的线程数。结果如下:每个线程...

2019-07-26 16:51:14 2226

翻译 MIT6.828_Lecture9:Multiprocessors and locking

1.为什么要讨论locking呢?应用程序希望使用多核处理器并行加速因此内核必须处理并行系统调用从而并行访问内核数据(缓存、进程和c)    locks有助于正确地共享数据    locks可以限制并行加速2.Locking homeworkrecall: ph.c, multi-threaded has...

2019-07-25 17:20:43 264

翻译 MIT6.828_Lecture 8: Interrupts, System calls, and Exceptions in xv6

1.硬件现在需要关注(attention)! 软件必须搁置当前的工作并做出响应2.为什么hw现在需要关注?MMU无法翻译地址用户程序除0用户程序想要执行内核代码(INT)网络硬件(Network hardware)想要传递一个数据包(deliver a packet)计时器硬件希望提供一个“tick”内核cpu到cpu的通信,例如刷新(flush)TLB (IPI)3.这些 “tr...

2019-07-25 11:53:03 270

原创 MIT6.828学习之Lab3:User Environments

In this lab you will implement the basic kernel facilities required to get a protected user-mode environment (i.e., “process”) running. You will enhance the JOS kernel to set up the data structures to...

2019-07-24 19:52:30 1392

原创 MIT6.828学习之Lab3_Part B: Page Faults, Breakpoints Exceptions, and System Calls

现在由于你的内核有了基本的异常处理能力,你会继续改进它,以提供依赖于异常处理的重要操作系统原语。Handling Page FaultsThe page fault exception, interrupt vector 14(T_PGFLT), 是特别重要的一个,我们将在这个和下一个lab中大量练习它。当处理器收到一个page fault,它将导致错误的linear(或virtual) ad...

2019-07-24 11:36:46 899

原创 MIT6.828学习之Lab3_Part A: User Environments and Exception Handling

参考全局描述符GDTenv structure介绍struct Env { struct Trapframe env_tf; // Saved registers 以便恢复现场 struct Env *env_link; // Next free Env envid_t env_id; // Unique environment identifier 唯一标识 envid_t...

2019-07-23 08:58:16 2036 2

翻译 80386 Programmer's Manual: Chapter 9 Exceptions and Interrupts(Personal Translation)

Chapter 9 Exceptions and Interrupts1.interrupts are used to handle asynchronous events(异步事件) external to the processor(处理器外部的), but exceptions handle conditions detected by the processor itself in th...

2019-07-19 21:00:09 254

原创 MIT6.828学习之homework5:xv6 CPU alarm

向xv6添加一个功能,当进程使用CPU时间时,该功能会定期发出警报

2019-07-18 11:40:45 856 2

原创 MIT6.828学习之homework4:xv6 lazy page allocation

xv6应用程序使用sbrk()系统调用向内核请求堆内存。在我们给出的内核中,sbrk()分配物理内存并将其映射到进程的虚拟地址空间。有些程序分配内存,但从不使用它,例如实现大型稀疏数组。复杂的内核会延迟对每个内存页的分配,直到应用程序尝试使用该页面——这是由页面错误发出的信号。就是只修改进程大小值实际上不分配页面(让进程误以为分配了),等需要使用对应页面再来分配Part One修改sbrk(...

2019-07-17 16:36:23 2552 1

原创 MIT6.828学习之homework3:xv6 system calls

Part Oneto print the name of the system call and the return value for each system call invocation从syscall()代码中可以看出,系统调用的返回值存在curproc->tf->eax中,直接输出就行,就是这个系统调用名不太好输出,系统调用号可以知道是在num中,根据sysproc.h...

2019-07-17 10:38:28 2788 1

原创 MIT6.828学习之homework2:shell

用到的函数介绍详细介绍

2019-07-13 17:12:37 3601 2

原创 MIT6.828学习之Lab2:Memory Management

a physical memory allocator for the kernel。Your allocator will operate in units of 4096 bytes(以4M一页为单位)。record which physical pages are free and which are allocated, and how many processes are sharin...

2019-07-12 20:55:23 818

原创 MIT6.828学习之Lab2_Part3:Kernel Address Space

JOS处理器的32位线性地址空间分为两部分,内核控制ULIM分割线以上的部分,为内核保留大约256MB(0xf000000-0xffffffff)的虚拟地址空间,用户环境控制下方部分,约3.72G(0x0-0xef800000)。用户环境将没有对以上ULIM内存的任何权限,只有内核能够读写这个内存;[UTOP,ULIM],内核和用户环境都可以读取但不能写入这个地址范围,此地址范围用于向用户环境公...

2019-07-12 16:45:33 503

原创 MIT6.828学习之Lab2_Part 2: Virtual Memory

我觉得Part2最关键还是这张图,只有深刻理解了Logical Address经过分段机制转换成Linear Address再经过分页机制转换成Physical Address这个过程以及他们的逆过程,才能顺利完成该部分。当然Lab2只涉及线性地址与物理地址的相互转换。感谢__七把刀__PDE(page directory entry页目录表项)PTE(page table entry页表表...

2019-07-11 21:10:29 662

原创 MIT6.828学习之Lab2_Part 1: Physical Page Management

任务:补全这五个函数在同学的帮助下,得到了这样一张图:有这张图之后再来做这部分的练习就会轻松一些。虚拟内存主要的好处是:让每个程序都以为自己独占计算机内存空间,概念清晰,方便程序的编译和装载。通过将部分内存暂存在磁盘上,可以让程序使用比物理内存大得多的虚拟内存,突破物理内存的限制。通过对不同进程设置不同页表,可以防止进程访问其他进程的地址空间。通过在不同进程之间映射相同的物理页,...

2019-07-10 20:43:09 914

原创 MIT6.828学习之获取MIT6.828远端仓库资源

每做新Lab可能都会要新加一些文件然后把自己之前实验的lab合并进来,那么怎么把文件从MIT6.828的远端仓库里fetch下来,并与之前的合并,就需要这样做:由于之前为了把实验push到自己的远端仓库,不小心把MIT6.828那个给删了,现在得重新加上去,不过远程库的名字不能再使用origingit remote add MIT6.828 https://pdos.csail.mit.edu...

2019-07-09 16:00:25 1176

原创 MIT6.828学习之homework1:Boot xv6

因为搞不太清楚栈内的变化,所以我花了超大功夫,从0x7c00 (the boot loader 开始)一步一步观察,直到0x0010000c (内核开始),只是我没想到,这中间居然有将近5万条指令,着实让我震惊!断点设在br *0x0010000c,可以看到如下信息:通过我的实验可以知道0x7c00:8ec031fa是执行完movl $start, %esp后的结果,我认为这是栈的开始0...

2019-07-08 11:54:08 844 1

原创 MIT6.828学习之Lab1

一、补充知识汇编与反汇编汇编语言QEMU模拟器GDB二、实验内容1.2.The Boot Loader学习boot.s,main.c,boot.asm,了解在GDB中执行引导加载程序时发生了什么Exercise 3内容过程use the x/i command in GDB to disassemble sequences of instructions in the bo...

2019-07-05 20:43:04 6551 5

原创 线性表基本操作

线性表是最简单、也是最基本的一种线性数据结构。它有两种存储方法:顺序表和链表,它一般有12种基本操作,主要基本操作是插入、删除和查找等。我这里把顺序表和单链表的这12种操作按自己的理解写了一遍,两两对照着看应该要好一点。

2016-09-23 16:31:52 10917

原创 传值、传址与引用的区别

* 程序名: Swap.cpp* 功 能: 举例自定义Swap函数, 以区分传值、传址与引用的区别* 运行结果:a=4 b=3* 结 论: 指针是变量,本身占内存,储存的是实参的地址 引用是被引用者的别名,即同一个东西,并没有新占内存* 设 计 者:*** * 时 间: 2016-9-21

2016-09-23 14:35:07 2170

原创 心得之gets

说来实在是惭愧,学习acm也有将近一年了,虽说大多数时间都没干实事,但是连gets都不会用,简直不知道自己到底在干什么。。。百科定义:gets函数,可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大。gets从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转

2016-08-21 19:33:42 998 1

原创 训练第五周之只有五行的Floyd算法

http://developer.51cto.com/art/201403/433874.htm(作者:坐在马桶上看算法)个人觉得这个大神写得很好,所以放在这里参考一下Floyd算法:一、定义:Floyd算法是用于解决多源最短路径的算法,即可以求任意两个节点之间的最短路径,由Robert W. Floyd(罗伯特·弗洛伊德)于1962年发表在“Communications of the ACM”上。

2016-08-11 20:39:47 439

原创 训练第五周之最小生成树

本篇纯属鬼扯,因为不是很想看大神们写的Prim算法和Kruskal算法,所以靠自己理解写一下这两天刷的最小生成树的题目,希望以后能把本篇修正。Kruskal算法一、定义:最小生成树是指通过算法找到搜索到的边子集所构成的树中,不但包括了加权连通图里的所有顶点 (英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。二、概述:设G=(V,E)是一个加权连通图,首先定义一个结构

2016-08-10 20:48:11 316

原创 训练第五周之Dijkstra算法

Dijkstra算法:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html(作者:华山大师兄)

2016-08-10 11:23:21 518

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除