[学习xv6课程]:lesson2-lecture 1
Xv6 lesson
课程1:
在Schedule中我们可以看到一个课程表,在sep 7中可以找到LEC 1,这个是第一个课程,我们首先会学习讲座1,然后就是预习(Preparation),最后就是实验,应该就是准备工具。
讲座 1
操作系统(Operating systems)
总览:
6.828课程目标旨在让学生理解OS和能够自己部署一个小型的OS。其他的就是一些该OS学习的内容和问题。
课程结构:
课程结构大致是:
- 讲座,基本的OS的概念,利用一个经典的xv6 OS来进行检验,一系列的最新焦点
- 每次课程的预习作业
- 实验:JOS
- 代码审查
- 两次测验:期中和期末
案例学习:shell(简单的学习)
一些简单的shell命令和脚本的语法,这是每个学习交叉编译的同学需要学习的东西,比如一些简单命令:ls read等。
讲义(handouts):
Xv6的源码阅读:
https://pdos.csail.mit.edu/6.828/2011/xv6/xv6-rev6.pdf
在该文档中主要是讲的xv6的发展,作者,遵循的开源协议,这些大致阅读一下,主要有用的信息是:
- 编译环境:在x86 elf的环境下,只需要make即可,在非x86 非elf 的环境(像OS x,甚至是x86)下需要安装一个交叉编译的工具,地址: ehttp://pdos.csail.mit.edu/6.828/2011/tools.html。然后运行: make TOOLPREFIX=i386−jos−elf−
- 为了模拟运行xv6 , 你需要使用Bochs或QEMU,这两个是开源的模拟器,用来验证你的代码正确。
- 主要文件的列表,列出了大部分的主要文件名。
- 列出了交叉引用。(从第一页到七页)
- 源代码。放上了一些源代码。
Xv6 书籍

有一本书需要阅读,是xv6的书籍,大家自行阅读。
内容以后补上。
预习
Unix 分时系统的发展过程。这个自行阅读一些,基本学操作系统应该都知道这个过程。
作业
以后补上。
我的总结:
这些省略的部分对于初学者非常重要的,因为首先得明白什么是操作系统,操作系统的结构,操作系统的开发环境,什么事交叉编译等等。可以先阅读一些大学的操作系统的教材,这里的话,我也大致讲解一下:
操作系统作为一个系统级软件,如果写过裸机,有时候就会有这样的需求,需要同时完成两件事,两件事又互不影响。这个是后就会衍生出操作系统的需求。同时操作系统也扩展为资源管理中心,对各种资源进行统一管理,分配。如:CPU运行时间,内存,串口,USB定时器,硬盘等等这种系统资源进行统一分配。同时又能宏观上同时运行两个程序。
那么操作系统作为一款管理系统资源的软件,主要是分为底层驱动,中间抽象层,上层接口。底层驱动主要是完成硬件驱动,同时底层还有一些操作系统管理的底层代码。中间抽象层次主要就是屏蔽底层代码,使得上层代码具有可移植性。上层接口主要就是为APP(应用层)提供调用底层资源的接口,一般是system call(系统调用)。
操作系统一般有两种态:用户态和内核态,用户态主要是用户级操作,操作比较简单,只能计算,凡是涉及到调用底层资源的活动都要进入内核态,从用户态到内核态一般使用trap指令,一般的system call内含这个指令。内核态时,才能对资源操作,比如切换进程,串口打印等。
交叉编译指的是,在非该类结构系统上编译软件。当然也可以在该系统上编译该系统的操作系统。比如:在树莓派上编译树莓派的内核。只是其硬件性能较低,速度慢,所以需要用交叉编译。我们需要在大规模的机器上编译较小规模的操作系统。交叉编译需要交叉编译工具链。这里要知道一个软件的编译和链接过程,工具链就是编译器,链接器,等等工具。交叉编译工具是要可以在Host(宿主,就是编译的的机器)可以运行,比如在windows,这个编译工具就是exe文件,而编译环境主要就是一些库,这些库主要是编译过程中代码会引用的比如#include。最后编译出来的一般是一个二进制文件,通过烧录工具烧录到目标机器的代码存储区域。
机器的运行,运行时代码为二进制指令,从ROM(硬盘,flash,emmc)中取出到RAM(内存)中运行,这些要去看下计算机组成原理。

浙公网安备 33010602011771号