MIT6.828LAB记录
文章平均质量分 90
操作系统
tongchaun1999
这个作者很懒,什么都没留下…
展开
-
LAB4 PartB 写时复制fork( )
目录用户级别错误页面处理设置页面错误处理程序用户环境中的正常和异常堆栈调用用户页面错误处理程序 用户模式页面错误入口点实现写时复制fork( )Unix 提供fork()系统调用作为其主要的进程创建原语。该fork()系统调用将调用进程的地址空间(父)创建一个新的进程(孩子)。xv6 Unix通过将父页面中的所有数据复制到为子分配的新页面来实现fork()。这基本上与dumbfork()所采用的方法相同。将父级地址空间复制到子级是...原创 2021-10-03 20:09:01 · 326 阅读 · 0 评论 -
LAB4 PartC 进程间通信IPC
。原创 2021-10-03 20:02:45 · 227 阅读 · 0 评论 -
LAB4 PartA 多处理器支持和协作多任务处理
在LAB4中,将在多个同时处于活动状态的用户模式环境中实施抢占式多任务处理。首先分析一下新文件。kern/cpu.h 多处理器支持的内核定义包括有处理器个数max,处理器状态;单个cpu信息定义:struct CpuInfo { uint8_t cpu_id; // Local APIC ID; index into cpus[] below volatile unsigned cpu_status;...原创 2021-10-03 20:10:33 · 346 阅读 · 0 评论 -
LAB2-1物理页面管理
目录 boot_alloc()page_init()page_alloc()page_free() boot_alloc()这个简单的物理内存分配器只在 JOS 启动它的虚拟内存系统时使用,page_alloc()才是真正的物理页面分配器。static void *boot_alloc(uint32_t n){ static char *nextfree; // ...原创 2021-09-21 14:46:00 · 239 阅读 · 0 评论 -
LAB3 PartA 用户环境与异常处理
在LAB3中,将实现运行受保护的用户模式环境(即“进程”)所需的基本内核工具。 您将增强 JOS 内核以设置数据结构以跟踪进程、创建单个进程、将程序映像加载到内核中并启动它运行。还将使 JOS 内核能够处理进程进行的任何系统调用并处理它引起的任何其他异常。 LAB3中新增了一些程序文件:用户环境定义:inc/env.hinc/env.h中包含了JOS对用户环境的基本定义,JOS内核使用Env来跟踪每个用户环境。struct ...原创 2021-09-17 23:28:10 · 661 阅读 · 0 评论 -
LAB3 PartB页面错误、断点异常和系统调用
分配环境数组envs 与LAB2中pages的分配一样。// Make 'envs' point to an array of size 'NENV' of 'struct Env'.envs=(struct Env*)boot_alloc(NENV*sizeof(struct Env));//1024个进程memset(envs,0,sizeof(envs));//映射到UENVS,用户只读。boot_map_region(kern_pgdir,UENVS,(size_t...原创 2021-09-17 23:24:21 · 341 阅读 · 0 评论 -
LAB2-2 虚拟内存
X86保护模式页面管理pgdir_walk()pgdir_walk()的功能:给定'pgdir',一个指向页目录的指针,返回 指向线性地址 'va' 的页表条目 (PTE) 的指针。这需要走两级页表结构。...原创 2021-09-10 22:29:54 · 545 阅读 · 0 评论 -
LAB2入门
LAB2入门前言 一、memlayout.h 二、使用步骤 1.引入库 2.读入数据 总结前言 LAB2主要实现的是JOS内存管理的功能,内存管理包括两个部分:(1)内核的物理内存分配器,以便内核可以分配物理内存以及释放,分配器的大小为1页,4K。主要功能:记录哪些页面空闲、哪些已经分配、多少个进程在共享分配的页面、以及分配与释放内存页。(2)虚拟内存:将内核与软件使用的虚拟地址映射到物理内存中的地址。X86的内存管理单元mmu在指令使用内存时执行映射。...原创 2021-09-10 22:28:20 · 1159 阅读 · 0 评论 -
LAB2-3 内核地址空间
JOS 将处理器的 32 位线性地址空间(4G)分为两部分。我们将在实验 3 中开始加载和运行的用户环境(进程)将控制更低地址的布局和内容,而内核始终保持对上部的完全控制。分隔线由 inc/memlayout.h 中的符号 ULIM 随意定义,为内核保留了大约 256MB 的虚拟地址空间。 这就解释了为什么我们需要在实验室 1 中给内核一个如此高的链接地址:否则内核的虚拟地址空间将没有足够的空间同时映射到它下面的用户环境。权限和故障隔离由于...原创 2021-09-10 22:26:18 · 197 阅读 · 0 评论 -
LAB1-3 Kernel
LAB1-3--Kernel格式化打印控制台exercise1.81.8.0 八进制格式1.8.1 printf.c与console.c接口堆栈exercise1.91.9.0格式化打印控制台exercise1.81.8.0 八进制格式在操作系统内核中,我们需要实现自己的IO。系统IO主要包括3个文件实现,kern/printf.c, lib/printfmt.c, 以及 kern/console.c。这三个文件属于递进关系,依次对后面的函数进行封装。八进制格式代码: num = getu原创 2021-09-04 17:15:13 · 117 阅读 · 0 评论 -
LAB1-1&&1-2 PC启动
LAB1-1&&1-2--PC启动1.1 一些扩展文件中的知识1.2 PC物理地址空间1.3 引导加载程序1.4 加载内核1.1 一些扩展文件中的知识CPU取指执行:它查询称为程序计数器的寄存器中的地址,读取一个 该地址的 机器指令,将程序计数器推进到指令,并执行指令。最快的数据存储由cpu的寄存器提供,寄存器是cpu内部的存储单元,其读写速度为单个cpu周期。%eax, %ebx,%ecx, %edx, %edi, %esi, %ebp, %esp,%eip 表示32位扩展寄存原创 2021-09-04 16:14:30 · 239 阅读 · 0 评论