在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → linux操作系统实验ucore

linux操作系统实验ucore

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:9.51M
  • 下载次数:22
  • 浏览次数:131
  • 发布时间:2021-01-18
  • 实例类别:一般编程问题
  • 发 布 人:好学IT男
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
是一篇关于linux学习操作系统的文档,对初学者帮助很大
122操作系统的抽象 探作系统为了能够更好地管理计算机系统并对应用程序提供便捷的服务,在操作系统的 发展过程中,计算机科学家提出了如卜四个个抽象概念,奠定了操作系统的基础。操作系统 原理中的其他概念基本上都可基于上述这四个操作系统抽象 中断( Interrupt 简单地说,中断是处理器在执行过程中的突变,用来响应处理器状态中的特殊变化。比 如当应用程序正在执行时,产生了时钟外设中断,导致操作系统打断当前应用程序的执行, 转而去处理时钟设中断,处理完毕后,再回到应用程序被打断的地方继续执行。在操作系 统中,有三类中断:外设中断( Device Interrupt)、陷阱中断( Trap Interrupt)和故障 中断( Fault Interrupt,也称为 exception,异常)。外设中断由外部设备引起的外部I/O 事件如时钟中断、控制台中断等。外设中断是异步产生的,与处理器的执行无关。故障中断 是在处理器执行指令期间检测到不正常的或非法的肉部事件(如除零错、地址访问越界) 陷阱中断是在程序中使用请求操作系统服务的系统调用引发的有意事件。在后面的叙述中, 如果没有特别指出,我们将用简称中断、陷阱、故障来区分这种特殊的中断事件,在不需 要区分的地方,统一用中断表示。 进程( Process) 简单地说,进程是一个正在运行的程序。在计算机系统中,我们可以“同时”运行多个 程序,这个“同时”,其实是操作系统给用户造成的个“幻觉”大家知道,处理器是计算 机系统中的硬件资源。为了提高处理器的利用率,操作系统采用了多道稈序技术。如果一个 程序因某个事件而不能运行下去时,就把处理器占用权转交给另一个可运行程序。为了刻画 多道程序的并发执行的过程,就要引入进程的概念。从操作系统原理上看,一个进程是一个 具有一定独立功能的程序在一个数据集合上的一次动态执行过程。操作系统中的进程管理需 要协调多道程序之间的关系,解决对处理器分配调度策略、分配实施和回收等问题,从而使 得处理器资源得到最充分的利用。 虚存( Virtual Memory) 简单地说,虚存就是操作系统通过处理器中的MMU硬件的支持而给应用程序和用户提 供一个大的(超过计算机中的内存条容量)、一致的(连续的地址空间)、私有的(其他应用 程序无法破坏)的存储空间。这需要操作系统将内存和硬盘结合起来管埋,为用广提供个 容量比实际内存大得多的虚拟有储器,并目需要操作系统为应用稈序分配内存空间,使用户 存放在内存中的程序和数据彼此隔离、互不侵扰。操作系统中的虚存管理与处理器的MMU 密切相关 文件(File) 简单地说,文件就是存放在永久存储介质(比如硬盘、光盘、U盘等)上,方使应用程 序和用户读写的数据。当处理器需要访问文件中的数据时,可通过操作系统把它们装入内存。 放在硬盘上的程序也是一种文件。文件管理的任务是有效地支持文件的存储、检索和修改等 操作。 1.3“麻雀”操作系统- ucore 写一个操作系统难吗?别被现在上百万行的 Linux和 Windows操作系统吓倒。当年 Thompson乘他老婆带着小孩度假留他人在家吋,写了UNⅨX;当年 Linus还是个21岁大 学生时完成了LinuⅨx雏形。站在这些巨人的肩膀上,我们能否也尝试一下做“巨人”的滋味 呢? M|T的 Frans Kaashoek等在2006年参考PDP-11上的 UNIX Version6写一个可在X86 上跑的操作系统ⅹv6(基于 MIt License),用于学生学习操作系统。我们可以站在他们的肩 膀上,基于ⅹv6的设计,尝试着步步完成个从“空空如也”到“五脏俱全”的“林雀” 操作系统- ucore,此“麻雀”包含虚存管理、进程管理、处理器调度、同步互斥、进程间 通信、文件系统等主要内核功能,总的内核代码量(C+asm)不会超过5K行。充分体现了 “小而全”的指导思想 ucore的运行环境可以是真实的X86计算机,不过考虑到调试和开发的方便,我们可采 用86模拟器,比如QEMU、 BOCHS等,或Ⅺ86虚拟运行环境,比如 virtualBox、 VMware player 等。 ucore的开发环境主要是GCC中的gc、gas、ld和MAKE等工具,也可米用集成了这些 工具的IDE开发环境 Eclipse-CDT。运行环境和开发环境既可以在 Linux或 Windows中使用 那我们准各如何一步一步实现uore呢?安裝一个操作系统的廾发过程,我们可以有如 下的开发步骤: 1)启动操作系统的 bootloader,用于了解操作系统启动前的状态和要做的准各上作, 了解运行操作系统的使件支持,操作系统如何加载到内存中,理解两类中断-“外 设中断”,“陷阱中断”,内核态和用户态的区别 2)内存管子系统,用J理解×86分段/分页槟式,了解操作系统如何管理物理内存 和虚存、页表管理、一类中断-“故障中断”、缺页故障处理,基于页的内存替换 3)进程管理子系统,用于了解进程创建、执行、切換和结束的动态管理过程,了解在 用户态通过系统调用得到内核态的内核服务的过程 4)处理器调度子系统,用于理解操作系统的调度过程和调度算法 5)同步互斥了系统,用于了解同步互斥的具体实现以及对系统性能的影响,研究死锁 产牛的原因,以及如何避免死锁; 6)进程间通信子系统:用于了解进程间如何进行信息交换和共享 7)文件系统纯,了解文件系统的具休实现,与进程管理等的关系了解缓存对操作系统 o访问的性能改进,了解虚拟文件系统(VFS)、 buffer cache和 disk driver之间的 关系。 8)网络协议栈(选做):了解网卡驱动、TCP/P协议栈实现和Web应用 其中每个开发步骤都是建立在上一个步骤之上的,就像搭积木,从一个一个小木块,最 终搭出来一个小房子。在搭房子的过程中,完成从理解操作系统原理到实战操作系统设计与 实现的探索过稈。这个房子最终的建筑架构和建设进度如下图所示(要标注处各个proj的 特点,可在最后写) 实验进度颜色图 各种用户态应用和测试用例 用户态函数库 用户态 系统调用接口 内核态 进程管理子系统 文件管理子系统 进程间共享库支持 FAT文件系统 进程调度算法 UNIX文件系统 进程调度框架 Buffer Cache 进程生命周期管理 进程间通信 网络 消息队列 CP/IP协议栈 内存管理了系统 同步互斥/死锁 不连续地址空间分配算法写时复制 解决死锁问题的实例 连续地址空间分配算法按需分页 同步互斥应用实例 虚拟内有分配管理故障管理 semaphore实现 物理内存分配管理页替换算法 Lock实现 页式内存管理sWap管理 init子系统 段式内存管理 库函数子系统 corin tf/ stryk Moni tor监控子系统远程 debug调试了系统 中断管理子系统 软件层 设备驱动层 网卡串口并口CG硬盘『键盘时钟中断控制器 boot loader CPU I/0地址空间 MEM地址空间 硬件层 外设控制器/中断控制器 网卡串 并 CGA 硬盘键盘 时钟 14处理器硬件基础简介 要想深入理解 ucore,就需要」解支撑υcore运行的哽件环境,即∫解处理器体系结构 (了解硬件对 ucore带来影响〕和机器指令集(读懂 ucore的汇编)。ucorτe目前支持的硬件 坏境是基」Ilel80386以上的计算札系统。更多的硬件相关内容(比如保护模式等)将随 着实现 ucore的过程逐渐展开介绍。 14.1 Intel80386运行模式 80386有四种运行模式:实模式、保护模式、SMM模式和虚拟8086模式。这里对涉 及 ucore的实模式、保护模式做个简要介绍。 实模式:80386加电启动后处于实模式运行状态,在这种状态下软件可访问的物理内存 空间不能超过1MB,且无法发挥 Intel80386以上级别的32位CPU的4GB内存管理能力。 实模式将整个物理内存看成分段的区域,程序代码和数据位于不冋区堿,操作系统和用户程 序并没有区别对待,而且每一个指针都是指向实际的物理地址。这样用户程序的一个指针如 果指向了操作系统区域或其他用广程序区域,并修改了内谷,那么其后果就很可能是灾难性 实模式:实模式是为了和8086处理器兼容而设置的。在实模式下,80386处理器就相 当于一个快速的8086处理器。80386处理器被复位或加电的时候以实模式启动。这时侯处 理器的各寄存器以实模式的初始化值工作。80386处理器在实模式下的存储器寻址方式和 8086是样的,由段寄存器的内容乘以16当做基地址,加上段内的偏移地址形成最终的物 理地址,这时候它的32位地址线只使用了低20位,即可访问1MB的物理地址空间。在实 模式下,80386处理器不能对内存进行页机制管理,所以指令寻址的地址就是内存中实际的 物理地址。在实模式下,所有的段都是可以读、写和执行的。实模式下80386不支持优先级 所有的指令相当于工作在特权级(即优先级0),所以它可以执行所有特权指令,包括读写 控制寄存器CR0等。实模式下不支持硬件上的多仼务切换。实模式下的中断处理方式和8086 处理器相同,也用中断向量表来定位中断服务程序地址。中断向量表的结构也和8086处理 器一样,每4个字节组成一个中断向量,其中包括两个字节的段地址和两个字节的偏移地址。 保护模式:实际上,80386就是通过在实模式下初始化控制寄存器,GDTR,LDTR,IDTR 与TR等管珥寄存器以及页表,然后再通过加载CR0使其中的保护模式使能位置位而进入保 护模式的。当80386工作在保护模式下的时候,其所有的32根地址线都可供寻址,物理寻 址空间高达4GB。在保护模式下,支持内存分页机制,提供了对虚拟内存的良好支持。保护 模式下80386支持多任务,还支持优先级机,不同的程序可以运行在不同的优先级上。优 先级共分0~34个级别,操作系统运行在最烏的优先级0上,应用程序则运行在比较低 的级别上;配合良好的检査机制后,既可以在仟务间实现数据的安全共享也可以很好地隔离 各个任务。 14.2Inel80386内存架构 80386是32位的处理器,囻可以寻址的物理内存地址空间为2^32=4G宇节。在理解操作 系统的过程中,需要用到三个地址空间的概念。地址是访问地址空间的索引。物理内存地址 空间是处理器提交到总线上用于访问计算机系统中的内存和外设的最终地址。一个计算机系 统中只有一个物理地址空间。线性地址空间是每个运行的应用程序看到的地址空间,在操作 系统的虚存管理之下,每个运行的应用程序都认为自己独享整个计算机系统的地址空间,这 样可让多个运行的应用程序之间相互隔离。处理器负责把线性地址转换成物理地址。一个计 算机系统中可以有多个线性地址空间(比如一个运行的程序就可以有一个私有的线性地址空 间)。线性地址空间的大小与物理地址空间的大小没有必然的连续。逻辑地址空间是应用程 序直接使用的地址空间。这是由于80386中无法禁用段机制,使得逻辑地址一直存在。比如 如下C代码片段 int boo=1 int *foo=&a 这里的boo是个整型变量,foo变量是·个指向boo地址的整型指针变量,foo中储存 的内容就是boo的逻辑地址。逻辑地址由一个16位的段寄存器和一个32位的偏移量构成。 Foo中放的就是32位的偏移量,而对应的段信息位于段寄存器中。 上述三种地址的关系如卜: 分段机制启动、分页机制未启动:逻辑地址>段机制处理>线性地址=物理地址 分段机制和分页机制都启动:逻辑地址->度机制处理>线性地址->页机制处理->物理 地址 143 Intel80386寄存器 80386的寄存器可以分为8组:通用寄存器,段寄存器,指令指针寄存器,标志寄有器 序员看到的寄存器包括通用寄存器,段寄存器,指令指针寄存器,标志寄存器。。一般程 系统地址寄存器,控制寄存器,调试寄存器,测试寄存器,它们的宽度都是32位 Genera| Registert(通用寄存器): EAXEBXECXEDXESIEDI/ESP/EBP这些寄存器 的低16位就是8086的 AX/BX/CX/DX/SI/DI/SP/BP,对于AX,BX,CX,DX这四个寄存 器来讲,可以单独存取它们的高8位和低8位(AHAL,BH,BL,CHCL,DH,DL)。它们的 含义如下 EAX:累加器 EBX:基址寄存器 ECX:计数器 EDX:数据寄存器 ESl:源地址指针寄存器 EDl:目的地址指针寄存器 EBP:基址指针寄存器 ESP:堆栈指针寄存器 通用寄存器 31 15 EAX AX L EDX DX ECX CL EBX BH BX EBP ESI SI EDI DI ESP Segment Register(段寄存器,也称 Segment Selector,段选择符,段选择子):除 了8086的4个段外(CS,DS,ES,SS),80386还增加了两个段Fs,GS,这些段寄存器都 是16位的,它们的含义如下: CS:代码段( Code Segment) DS:数据段( Data Segment) ES:附加数据段( Extra Segment) Ss:堆栈段( Stack Segment FS:附加段 GS附加段 段寄存器 CS CODE SEGMENT> SS STACK SegmEnt> DS <DATA SEGMENT> ES DATA SEGMENT> FS DATA SEGMENT> GS <DATA SEGMENT> nstruction pointer(指令指针寄存器):EP的低16位就是8086的|P,它存储的是 下·条要执行指令的内存地址,在分段地址转换中,表示指令的段内偏移地址 状态寄存器和指令寄存器 EF EIP INSTRUCTION POINTER> Flag Register(标志寄存器): EFLAGS,和8086的16位标志寄存器相比,增加了4个 控制位,这20位控制/忐位的位置如下图所示: 状态寄存器 16-BIT FLAGS REGISTER A 23 15 00000000000000000VRN00D|I|T|Sz A。P,C MFT PL FFFFF FFFF VIRTUAL 8086 MODE RESUME FLAG NESTED TASK FLAG I/O PRIVILEGE LEVEL X OVERFLOW DIRECTION FLAG- C INTERRUFT ENABLE X TRAP FLAG SIGN FLAG ZERO FLAG AUXILIARY CARRY FLAG RY FLAG S= STATUS FLAG,C= CONIROL FLAG,X=SYSTEM FLAG 0或1表示由inte保留,不要使用 相关的控制/标志位含义是 CF( Carry flag):进位标志位; P( Parity Flag):奇偶标志位 AF( Assistant Flag):辅劫进位标志位; zF( Zero Flag):零标志位 SF(Singal Flag):符号标志位 ( nterrupt Flag):中断允许标志位由C,ST两条指令来控制;设置F使CPU 可识别外部(可屏蔽)中断请求。复位则禁止中断。IF对不可屏蔽外部中 断和故障中断的识别没有任何作用 DF(Direction Flag):向量标志位,CLD,STD两条指令来控制 OF( Overflow Flag):溢出标志位 lop( y0 Privilege Level):/o特权级字段,它的宽度为2位,它指定了o指令的 特权级。如果当前的特权级别在数值上小于或等于oPL,那么/O指令可执行。 否则,将发生·个保护性故障中断。 NT( Nested Task):控制中断返回指令RET,它宽度为1位。若NT=0,则用堆栈中 保存的值恢复 EFLAGS,CS和EIP从而实现中断返回;若NT=1,则通过任务切换 实现中断返回 第2章启动操作系统 读者通过阅读本章的内容并动于实践相关的6个 project实验 prowl:能够切换到保护模式并显示字符的 bootloader proj2/3:可读ELF格式文件的 bootloader和显小字符的 ucore proj31:内置监控自身运行状态的 ucore proj4:可管理中断和处理基于中断的键盘时钟的 ucore ●proj41.1:支持通过中断方式的内核态/用户态切换的 ucore 可以掌握如下知识 与操作系统原坦相关 IO设备管理:涉及程序循环检测方式和中断启动方式、IO地址空间 内存管理:基于分段机制的内存管理 异常处理:涉及中断、故障和陷阱 特权级:内核态和用户态 ●操作系统原理之外 PC从加电到加载操作系统内核的整个过程 OS内核在内存中的布局 并口访问、串口访问、CGA字符显示、硬盘数据访问、时钟访问 ELF执行文件格式 栈的实现并实现函数调用栈跟踪函数 调试操作系统 其实这一章的内容与操作系统原理相关的部分较少,与计算机体系结构(特别是x86) 的细节相关的部分较多。但这些内容对写一个操作系统关系较大,要知道操作系统是直接与 硬件打交道的软件,所以它需要“知道”需要硬件细节,才能更好地控制硬件。另一方面, 部分内容涉及到操作系统的重要抽象-中断类异常,能够充分理解中断类异常为以后进一步 了解进程切换、上下文切换等概念会很有帮助 本章的实验容涉及的是写一个 bootloader能够启动一个操作系统-ucor在完成 bootloader的过程中,逐渐增加 bootloader和 ucore的能力,涉及x86处理器的保护模式切换、 解析ELF执行文件格式等,这对于理解操作系统的加载过稈以及在操作系统在内存中的位 置、内存管理用户态与内核态的区别等有帮助。而相关 project中 bootloader和操作系统 木身的字符显示的ⅠO处理、读硬盘数据的ⅠO处理、键盘时钟的中断处理等内容,则是操 作系统原理中一般在靠后位置提到的设备管理的实际体现。纵观操作系统的发展史,从早期 现在的操作系统主要功能之就是完成繁琐的IO处理,给上层应用提供比较简洁的ⅠO 服务,屏蔽硬件处理的复杂性。这也是操作系统的虚拟机功能的体现。另外,本章还介绍了 对硬件模拟器的使用,对操作系统的 panIc处理和远程 debug功能的支持,这样有助于读者 能够方使地分析操作系统中的错误和调试操作系统。由于夲章涉及的硬件知识较多,无疑増 人了读者的阅读难度,需要读者在结合阅读本章并实际动手实验来进行深入理解。 31可切换到保护模式并显示字符的 bootloader 311实验目标 操作系统是一个软件,也需要通过某种机制加载并运行它。在这里我们将通过另外一个 更加简单的软件- bootloader来完成这些工作。为此,我们需要完成个能够切换到x86的保 护模式并显示字符的 bootloader,为将来启动操作系统做准备。pro1提供了一个非常小的 bootloader,整个 bootloader的大小小于512个字节,这样才能放到硬盘的主引导扇区中。 通过分析和实现这个 bootloader,读者可以了解到: 基于分段机制的存储管理 【实例截图】
【核心代码】

标签:

实例下载地址

linux操作系统实验ucore

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警