您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > xv6操作系统整体报告
..前言操作系统是一种复杂的系统软件。本书通过介绍操作系统的基本概念和原理.并结合操作系统原理来分析一个小型但全面的操作系统xv6.并进一步进行各种基于xv6操作系统的实验.来让读者了解和掌握操作系统的设计与实现。xv6是一个运行在基于x86架构的计算机系统上的类似UNIX的教学用操作系统。xv6起源于MIT。在2002年秋季.FransKaashoek,JoshCates,andEmilSit在MIT开设了一门新的实验型课程“操作系统工程”.英文名称是“OperatingSystemsEngineering”.课程代号是“6.097”.后改为“6.828”.在此课程上.一开始采用了“莱昂氏UNIX源代码分析”(英文书名是“Lion'CornmentaryonUNIX6thEditionWithSourceCode”)作为参考资料。此参考资料描述的UNIXv6(简称V6)是运行在古老的PDP-11计算机系统上。为了让学生更好地理解V6的实现.FransKaashoek等从2006年夏季开始.参考V6的架构.在x86计算机系统上重新实现了一个支持多处理器计算机系统的类似UNIX的教学用操作系统.称为为xv6。在目前的MIT本科生课程“6.828:OperatingSystemsEngineering”中.xv6主要用于讲课.而另一个基于exokernel架构的JOS主要用于做试验。目前xv6在MIT的网址在第零章安装使用如果是Linux初学者.请看附录F.了解如何安装、使用UbuntuLinux.如何在UbuntuLinux下编程。编译[needupdate]安装UbuntuLinux8.10.具体安装方法可以参考附录C。并通过apt工具进一步安装相关软件包$sudoapt-getinstallgccbinutilslibc6-devgdb然后解压xv6软件包.到某一目录.然后到此目录下执行$make就可以生成相关执行文件和镜像.包括xv6.img(包含bootloader和xv6kernel)和fs.img(包含应用程序)运行[needupdate]安装UbuntuLinux8.10.并通过apt工具进一步安装相关软件包$sudoapt-getinstallqemubochsbiosvgabioslibsdl1.2debiankvm如果通过qemu执行.可执行如下命令qemu-smp4-parallelstdio-hdbfs.img-hdaxv6.img如果通过kvm执行.可执行如下命令kvm-smp4-parallelstdio-hdbfs.imgxv6.imgqemu和kvm的相关运行参数的含义可参考附录B。调试[needupdate]对qemu而言.可以同时实现qemu内嵌的debugger调试(需要打陈渝老师扩展的patch并重新编译生成新的qemu.特点是简单.可控制硬件的手段多.缺点是不是C源码级调试)和通过gdb远程调试(特点是是可进行C源码级调试.缺点是可能会有奇怪的问题.对硬件控制不够)。1用gdb远程调试的方法如下:aqemu调试方式启动qemu-S-s-smp2-monitorstdio-hdbfs.img-hdaxv6.img..bgdb启动并调试gdbkernel(gdb)targetremote:1234(gdb)breakFUNCTION-NAME(gdb)continue...(gdb)quit2用qemuinternaldebugger调试aqemu启动命令qemu-smp2-monitorstdio-hdbfs.img-hdaxv6.img然后在qemu的monitor中可执行如下命令进行调试分析x/fmtaddr--virtualmemorydumpstartingat'addr'infocpus--showinfosforeachCPUinforegisters--showthecpuregisterssinglestepsinglestap_enabled--togglesinglestepmodebreakpoint_insertaddr--insertbreakpointbreakpoint_removeaddr--removebreakpointbreakpoint_show--showbreakpointwatchpoint_insertaddrtype--insertwatchpointtype0=read1=writewatchpoint_removeaddr--removewatchpointwatchpoint_show--showwatchpointwhere--showcallsstack第一章总体结构和系统组成本章将给出xv6启动实现的概貌。读者将学习以下一些内容:操作系统是什么?xv6是如何产生的?xv6的总体结构是什么?xv6包含哪些重要的组成部分?操作系统是一种软件.操作系统没有一个精确和统一的定义。操作系统是一种比较复杂的软件.我们可以从多种角度来了解操作系统。从操作系统的任务来看.操作系统的任务主要是控制和管理计算机系统中的硬件资源并对应用软件和用户提供各种方便使用计算机的功能。通过操作系统.能有效地组织和管理计算机系统中的硬件资源和其他软件资源.向用户和应用软件提供各种服务功能.使得用户和应用软件能够灵活、方便、有效地使用计算机.并使整个计算机系统能高效地运行。从操作系统在计算机系统中的实现层次上看.操作系统位于计算机硬件之上.应用软件之下。由于操作系统是一个复杂的软件系统.为了能够更好地设计和实现操作系统.我们可以从功能上对操作系统进行分解.可把操作系统分解为系统调用、进程调度、内存管理、中断处理、文件系统和设备管理等功能模块.在具体实现上可采用模块化、层次化和面向对象等设计方法来设计实现操作系统。一个OS组成结构图[needtoupdate]。要了解xv6.首先我们需要了解操作系统的一些基本概念(请参考附录A)。xv6(基于xv6-rev2版本)是一个支持对称多处理器(SMP)的类Unix系统。它包含操作系统一些最基本的要素.包括系统调用、进程调度、内存管理、中断处理和文件系统等。xv6总体设计思路xv6基于典型的UNIX操作系统设计思路。简单地说.xv6是一种能区分内核态和用户态.基于扁平内存管理的层次型单体内核.应用程序和操作系统是处于不同的特权状态和地址空间。代表应用程序的用户态进程运行在CPU的用户态(又称非特权模式.用户模式).无法直接访问系统硬件和操作系统中的系统数据.而操作系统运行在CPU的核心态(又称特权模式.内核..模式).可以访问系统硬件和核心数据。下面分别从系统调用接口、进程/线程管理、内存管理、文件系统、I/O管理等几个方面进行总体分析。系统调用是应用程序访问操作系统的接口。在系统调用接口上.通用操作系统与基于此操作系统的应用程序处于两个不同的CPU特权态.操作系统处于核心态.而应用程序处于用户态。在核心态可以执行CPU特权指令.而用户态无法执行特权指令.且只能通过特定的指令或中断来访问操作系统提供的各种功能。这在一定程度上保证了系统整体的安全.避免应用程序对操作系统可能的破坏。在内存管理方面.通用操作系统采用了虚拟内存管理方式.这样可以让内存需求超过实际物理内存的进程/线程能够执行.其主要思想是把重要和常用的数据和执行代码放在物理内存中.把不常用的数据和执行代码放到二级存储(这里主要指的是硬盘等可在掉电后保存数据的存储介质).随时根据系统执行情况替换放在内存中的数据和代码。而且通过虚存管理可以实现对不同内存区域的保护.不同进程之间.或者应用程序和操作系统之间的地址空间相对隔离。这样一般情况下不同进程的地址空间不能直接访问.且应用程序不能直接访问内核地址空间。所以一个与错误的应用程序不会导致系统的崩溃.从而增加了系统的可靠性。xv6操作系统没有采用虚拟内存管理.而是采用了简单的基于X86段模式的单一地址空间管理方式。在内存分配和释放的管理上.xv6相对实现得比较简单.采用基于可变分区分配的首次适配算法.容易产生内存碎片。在进程/线程管理方面.当前通用操作系统结合虚存管理.采用进程和线程结合的管理方式。进程代表了一个程序执行的过程以及其所占用的计算机资源(包括CPU、内存、文件等).进程的执行流可用线程来表示。操作系统的调度单位可以是进程或线程。一个进程可以包含多个线程.属于同一进程的多个线程共享进程管理的资源.比如属于同一进程的多个线程共享进程所管理的内存.这样这些线程可以直接访问属于进程的全局地址空间。xv6操作系统实现了一个基于进程(没有实现线程)的简单进程管理机制。在文件系统管理方面.当前通用操作系统结合虚存管理.实现了多种复杂、高效且可靠的文件系统.且建立了一个统一的虚拟文件系统层.屏蔽不同文件系统的差异.对上层提供统一的接口。且与用户管理和进程管理结合.可实现安全管理.保证对文件的安全访问。xv6操作系统实现了一个相对简单的基于inode索引方式的文件系统。在I/O管理方面.xv6操作系统与通用操作系统(特别是类UNIX操作系统)差别不是特别大.都把设备“看成”是一种特殊的设备文件.有设备号.用文件的访问接口来进行打开、关闭、读、写和控制等操作。在灵活性方面.xv6驱动程序不能象通用操作系统那样根据硬件情况动态加载.而是在编译时候就静态确定的。xv6总体架构从操作系统模型上来看.xv6是一个单地址空间的层次式单体内核.不是微内核(microkernel)模型的操作系统(如Mach.QNX).与通用操作系统(如Linux)的架构在地址空间和特权模式上也有一定的差别。下面主要分进程调度、内存管理、同步互斥、文件系统几方面对xv6进行介绍。同步互斥由于在SMP架构中.内存磁盘等硬件资源在所有CPU中都是共享的.所以在需要某种机制对资源进行互斥访问控制。在xv6中.通过实现了spinlock.从而可以对共享资源加锁来限制同时访问此资源的CPU数量。内存管理在内存管理方面,xv6采用了段式虚拟内存的管理方式。每个用户进程所占用的内存都是在一个连续的段中。用户进程内存的分布为:代码段、静态变量段、固定大小的栈和可变大小的堆空间。由于进程内存是按照段管理的.因此在每次分配进程内存时.xv6将找一片正好能放下整段的连续内存块进行放置。进程管理因为是基于SMP架构.操作系统中的多个进程会占用计算机系统中的多个CPU执行其具体功能.由于进程数量大于CPU数量.这就涉及到进程如何分时共享CPU的操作系统管理问题.具体包括如果创建进程、如何删除进程、选择哪个进程占用哪个CPU.何时进行进程切换.进程能够持续占用CPU的时间片段的大小设定等。在xv6中.首先其进程是基于时间片来调度的。每次进程的调度是由时钟中断产生的.或者是因当前进程主动放弃。其次.每个CPU之间都共享一个进程池(具体实现为一个全局数组).其中有所有待运行的进程。在每个时间片中.CPU将当前运行的进程放回进程池.然后从进程池中选取另一个待运行的进程进行执行。..文件系统xv6中提供了一个简单的文件系统.这个文件系统提供了大多数POSIX标准的接口。由于这个文件系统比较简单.其中一个文件最多由(12+128)个组成.所以文件的大小也被限制在(12+128)*512Bytes。在这个文件系统中提供了一个Buf层.用来缓存磁盘上的数据。但是此文件系统是写直达的.因此每次更新都会直接写到磁盘上。中断管理和系统调用管理[NTU]外设管理[NTU]第二章启动流程(boot)1.概述本章将给出xv6启动实现的概貌。读者将学习以下一些内容:bootloader是什么?bootloader做了哪些事情?xv6是如何被加载并启动的?xv6的初始内存管理是如何实现的?xv6的初始中断管理是如何实现的?xv6如何实现内核态到用户态的转变的?xv6启动用户态进程前需要完成哪些事
本文标题:xv6操作系统整体报告
链接地址:https://www.777doc.com/doc-6587538 .html