运行xv6】的更多相关文章

我们使用Qemu在Ubuntu下运行 1. 安装Qemu sudo apt-get install qemu 执行 qemu-system-i386 ,如果弹出Qemu界面说明安装成功了 2. 编译xv6 下载代码(一定要使用git下载,不要自己手动去下载,否则可能下载的版本不对,编译不过) git clone git://github.com/mit-pdos/xv6-public.git 编译 make 3. 运行 make qemu…
最近想找个简单的类Unix系统学习下, xv6不错的, 所有代码加起来不到一万行,首先把代码跑起来还是很重要的. # 下载xv6源码并编译 git clone git://pdos.csail.mit.edu/xv6/xv6.git cd xv6/ make # 安装虚拟环境 sudo apt-get install qemu-system-i386 # 启动 qemu-system-i386 -serial mon:stdio -hdb fs.img xv6.img -smp 1 -m 512…
转自:https://blog.csdn.net/yinglang19941010/article/details/49310111 如果想要离线看教程,可以下载该 文档 一.使用工具说明 1.       xv6 源代码文件(以下三选一) 1)http://download.csdn.net/detail/yinglang19941010/9201421 (我使用的是这个,怕出错的同学可以下这个) 2)https://github.com/yinglang/Xv6  或 3)http://zo…
操作系统:Ubuntu 16.04 32位 虚拟机:VMware 模拟器:QEMU 之前有一台centos 64位虚拟机,使用源码安装配置环境,出了一些列问题,最终环境都已经配好了,也能够在qemu上运行Xv6,但是想跟着lab做实验的时候,各种编译器内部错误,实在懒得折腾这些了,于是决定新安装一台ubuntu 32位虚拟机: 以下为步骤记录: 1. 安装qemu,为了方便,直接使用apt-get安装:安装过程也比较慢,不过比自己编译省力太多: sudo apt-get install qemu…
Lab 1: Booting a PC Part 1: PC Bootstrap 介绍这一部分知识的目的就是让你能够更加熟悉x86汇编语言,以及PC启动的整个过程,而且也会首次学习使用QEMU软件来仿真xv6操作系统,并且配合GDB对操作系统的运行进行调试. 开始学习X86汇编语言 由于x86汇编语言在我们这节实验中扮演了非常重要的角色,所以MIT官方为我们提供了一个关于汇编语言的参考资料"004. pcasm-book"(资料文件名,在resources目录下),里面基本介绍了汇编语…
title:[MIT6.828]centos7下使用Qemu搭建xv6运行环境 date: "2020-05-05" [MIT6.828]centos7下搭建xv6运行环境 1. 基础依赖 yum install libX11 libX11-devel SDL2 SDL2-devel -y 2. 编译和安装 QEMU ~]# wget https://download.qemu.org/qemu-4.2.0.tar.xz ~]# xz -d qemu-4.2.0.tar.xz &…
Xv6的lecture LEC 1 Operating systems   L1: O/S overview L1:O/S概述   * 6.828 goals 6.828的目标   Understand operating systems in detail by designing and implementing a small O/S 通过设计并实现一个小型的系统在细节上理解操作系统.   Hands-on experience with building systems("Applyin…
Chapter 0 第0章 Operating system interfaces 操作系统接口 The job of an operating system is to share a computer among multiple programs and to provide a more useful set of services than the hardware alone supports. The operating system manages and abstracts t…
Appendix A 附录A PC hardware Pc的硬件 This appendix describes personal computer (PC) hardware, the platform on which xv6 runs. 这个附录描述了xv6运行的平台——个人计算机(PC)的硬件. A PC is a computer that adheres to several industry standards, with the goal that a given piece o…
Appendix B 附录 B Figure B-1 The relationship between logical, linear, and physical addresses. 图B-1:逻辑地址.线性地址以及物理地址的关系图 The boot loader 系统启动器 When an x86 PC boots, it starts executing a program called the BIOS, which is stored in non-volatile memory on…
安装bochs 因为要运行的是xv6,所以不能直接使用 apt-get 直接获取软件.apt-get获取到的软件不支持SMP (Symmetric Multi-Processing).因此,需要下载源码自己编译(源代码下载地址在下载页面的底部Download SVN Snapshot ) 需要预先安装的软件(参考 ) sudo apt-get install g++ sudo apt-get install libc6-dev sudo apt-get install build-essenti…
xv6是一个支持多处理器的Unix-like操作系统, 近日阅读源码时发现xv6在记录当前CPU和进程状态时非常tricky 首先,上代码: extern struct cpu cpus[NCPU]; extern int ncpu; // Per-CPU variables, holding pointers to the // current cpu and to the current process. // The asm suffix tells gcc to use "%gs:0&q…
配置Hadoop1.2.1+eclipse(Juno版)开发环境,并运行WordCount程序 一.   需求部分 在ubuntu上用Eclipse IDE进行hadoop相关的开发,需要在Eclipse上安装hadoop的开发插件.最新释放出的hadoop包含源码的包,以 hadoop-1.X为例,包含相关的eclipse插件的源码,因此可以针对自己的eclipse版本来编译一个合适hadoop的eclipse插件.下面将详细介绍插件的编译安装过程,以及在Eclipse上配置hadoop开发插…
本文将会详细介绍Xv6操作系统中虚拟内存的初始化过程. 基本概念 32位X86体系结构采用二级页表来管理虚拟内存.之所以使用二级页表, 是为了节省页表所占用的内存,因为没有内存映射的二级页表可以不用分配地址来存储.在这个二级页表结构中,每个页的大小为4KB,每个页表的大小也为4KB,每个页表项的大小为4字节,一个页表包含1024个页表项.一级页表表项存储的是二级页表的地址,二级页表表项存储的是对应的物理地址.虚拟地址和物理地址的最后12位总是相同,因此页表表项中的这12位可以被用作标记其他信息.…
锁是操作系统中实现进程同步的重要机制. 基本概念 临界区(Critical Section)是指对共享数据进行访问与操作的代码区域.所谓共享数据,就是可能有多个代码执行流并发地执行,并在执行中可能会同时访问的数据. 同步(Synchronization)是指让两个或多个进程/线程能够按照程序员期望的方式来协调执行的顺序.比如,让A进程必须完成某个操作后,B进程才能执行.互斥(Mutual Exclusion)则是指让多个线程不能够同时访问某些数据,必须要一个进程访问完后,另一个进程才能访问. 当…
1. 进程的基本概念 从抽象的意义来说,进程是指一个正在运行的程序的实例,而线程是一个CPU指令执行流的最小单位.进程是操作系统资源分配的最小单位,线程是操作系统中调度的最小单位.从实现的角度上讲,XV6系统中只实现了进程, 并没有提供对线程的额外支持,一个用户进程永远只会有一个用户可见的执行流. 2. 进程管理的数据结构 根据[1],进程管理的数据结构被叫做进程控制块(Process Control Block, PCB).一个进程的PCB必须存储以下两类信息: 操作系统管理运行的进程所需要信…
XV6操作系统是MIT 6.828课程中使用的教学操作系统,是在现代硬件上对Unix V6系统的重写.XV6总共只有一万多行,非常适合初学者用于学习和实践操作系统相关知识. MIT 6.828的课程网站是https://pdos.csail.mit.edu/6.828/.XV6操作系统有官方文档,英文版在前面的网站可以下载,中文版翻译参见https://th0ar.gitbooks.io/xv6-chinese/content/. 此部分内容另有PPT 前置知识 在阅读XV6操作系统代码前,需要…
调度 任何操作系统都可能碰到进程数多于处理器数的情况,这样就需要考虑如何分享处理器资源.理想的做法是让分享机制对进程透明.通常我们对进程造成一个自己独占处理器的假象,然后让操作系统的多路复用机制(multiplex)将单独的一个物理处理器模拟为多个虚拟处理器.本章将讲述 xv6 是如何为多个进程模拟出多处理器的. 多路复用 xv6 中多路复用的实现如下:当一个进程等待磁盘请求时,xv6 使之进入睡眠状态,然后调度执行另一个进程.另外,当一个进程耗尽了它在处理器上运行的时间片(100毫秒)后,xv…
文件系统 文件系统的目的是组织和存储数据,典型的文件系统支持用户和程序间的数据共享,并提供数据持久化的支持(即重启之后数据仍然可用). xv6 的文件系统中使用了类似 Unix 的文件,文件描述符,目录和路经名(请参阅第零章),并且把数据存储到一块 IDE 磁盘上(请参阅第三章).这个文件系统解决了几大难题: 该文件系统需要磁盘上数据结构来表示目录树和文件,记录每个文件用于存储数据的块,以及磁盘上哪些区域是空闲的. 该文件系统必须支持崩溃恢复,也就是说,如果系统崩溃了(比如掉电了),文件系统必须…
锁 xv6 运行在多处理器上,即计算机上有多个单独执行代码的 CPU.这些 CPU 操作同一片地址空间并分享其中的数据结构:xv6 必须建立一种合作机制防止它们互相干扰.即使是在单个处理器上,xv6 也必须使用某些机制来防止中断处理程序与非中断代码之间互相干扰.xv6 为这两种情况使用了相同的低层概念:锁.锁提供了互斥功能,保证某个时间点只有一个 CPU 能持有锁.如果 xv6 只能在持有特定的锁时才能使用数据结构,那么就能保证同一时间只有一个 CPU 能使用这个数据结构.这样,我们就称这个锁保…
第一个进程 本章通过第一个进程的创建来解释 xv6 是如何开始运行的,让我们得以一窥 xv6 提供的各个抽象是如何实现和交互的.xv6 尽量复用了普通操作的代码来建立第一个进程,避免单独为其撰写代码.接下来的各小节中,我们将详细探索其中的奥秘. xv6 可以运行在搭载 Intel 80386 及其之后(即"x86")处理器的 PC 上,因而许多底层功能(例如虚存的实现)是 x86 处理器专有的.本书假设读者已有些许在一些体系结构上进行机器级编程的经验.我们将在有关 x86 专有概念出现…
操作系统接口 操作系统的工作是(1)将计算机的资源在多个程序间共享,并且给程序提供一系列比硬件本身更有用的服务.(2)管理并抽象底层硬件,举例来说,一个文字处理软件(比如 word)不用去关心自己使用的是何种硬盘.(3)多路复用硬件,使得多个程序可以(至少看起来是)同时运行的.(4)最后,给程序间提供一种受控的交互方式,使得程序之间可以共享数据.共同工作. 操作系统通过接口向用户程序提供服务.设计一个好的接口实际上是很难的.一方面我们希望接口设计得简单和精准,使其易于正确地实现:另一方面,我们可…
上下文切换分为两种情况 用户程序陷入到内核,再从内核返回 两个应用程序之间的上下文切换 用户程序陷入到内核 用户程序陷入到内核通过中断INT指令,在xv6中系统调用的号为64 操作系统在初始化的时候会建立IDT表以及GDT表 通过INT找到IDT中的项,通过IDT中的项找到GDT中的项,最后定位到代码. 在执行陷入指令的时候首先会到trapasm.S中的alltraps中,将trapframe存入到应用程序的内核栈中.将esp的地址存入栈中作为trap函数的输入,然后调用trap.注意trapf…
陷入,中断和驱动程序 运行进程时,cpu 一直处于一个大循环中:取指,更新 PC,执行,取指…….但有些情况下用户程序需要进入内核,而不是执行下一条用户指令.这些情况包括设备信号的发出.用户程序的非法操作(例如引用一个找不到页表项的虚拟地址).处理这些情况面临三大挑战:1)内核必须使处理器能够从用户态转换到内核态(并且再转换回用户态)2)内核和设备必须协调好他们并行的活动.3)内核必须知道硬件接口的细节.解决这三个问题需要对硬件的深入理解和小心翼翼的编程,并且有可能导致难以理解的内核代码.这一章…
xv6可以运行多cpu的计算机上,这个os使用mycpu函数来标识初当前的cpu,使用struct cpu结构体来记录当前的CPU状态.使用cpus这些状态存放于cpus数组中,使用ncpu来标志cpu的个数. 1 // Per-CPU state 2 struct cpu { 3 uchar apicid; // Local APIC ID 每个cpu都有一个唯一硬件ID,这个ID可以lapicid()函数进行获取,然后存放于这个字段中. 4 struct context *scheduler…
本作业的网站链接:MIT 6.828 Homework 1: boot xv6 问题 Exercise: What is on the stack? While stopped at the above breakpoint, look at the registers and the stack contents: (gdb) info reg ... (gdb) x/24x $esp ... (gdb) Write a short (3-5 word) comment next to eac…
Exercise1 源代码阅读 1.内存管理部分: kalloc.c vm.c 以及相关其他文件代码 kalloc.c:char * kalloc(void)负责在需要的时候为用户空间.内核栈.页表页以及缓冲区分配物理内存,将物理地址转为虚拟地址返回,物理页大小为4k.void kfree(char * v)接收一个虚拟地址,找对对应的物理地址进行释放.xv6使用空闲内存的前部分作为指针域来指向下一页空闲内存,物理内存管理是以页(4K)为单位进行分配的.物理内存空间上空闲的每一页,都有一个指针域…
Exercise1 源代码阅读 1.启动部分: bootasm.S bootmain.c 和xv6初始化模块:main.c bootasm.S 由16位和32位汇编混合编写成的XV6引导加载器.bootasm.S内的汇编代码会调用bootmain.c中的void bootmain(void):main.c主函数内部初始化各模块: 当x86 PC启动时,它执行的是一个叫BIOS的程序.BIOS存放在非易失存储器中,BIOS的作用是在启动时进行硬件的准备工作,接着把控制权交给操作系统.具体来说,BI…
Exercise1 源代码阅读 1.基本头文件:types.h param.h memlayout.h defs.h x86.h asm.h mmu.h elf.h types.h:仅仅是定义uint, ushort, uchar pde_t别名: typedef unsigned int uint; typedef unsigned short ushort; typedef unsigned char uchar; typedef uint pde_t; parame.h 利用宏定义了进程最…
Unix文件系统 当今的Unix文件系统(Unix File System, UFS)起源于Berkeley Fast File System.和所有的文件系统一样,Unix文件系统是以块(Block)为单位对磁盘进行读写的.一般而言,一个块的大小为512Byte或者4KB.文件系统的所有数据结构都以块为单位存储在硬盘上,一些典型的数据块包括:superblock, inode, data block, directory block and indirection block. Superbl…