Coder Social home page Coder Social logo

jos_lab_mit_2017's Introduction

jos-lab


The official website

本仓库的代码为mit的

本仓库的过程记录为mit+sjtu的

lab tools guide

计算机汇编语言

课程参考

强烈建议用虚拟机完成lab[sjtu有提供配置好了的vm 方法见SJTUREADME.md] 下面讲手工配置

下载ubuntu 32位 桌面版并用虚拟机安装 注意一定要是32位

sjtu的同学可以使用wget http://ftp.sjtu.edu.cn/ubuntu-cd/16.04.2/ubuntu-16.04.2-desktop-i386.iso进行下载

警告 我有尝试64位的ubuntu16.10,配了我40+小时没有配好[虽然有人说mit已经把lab从32位移植到64位上了],所以如果没有闲情逸致,请勿尝试64位或其它版本,我测试可用的是32位ubuntu16.04.2

我有尝试下载ubuntu server版,然后用ssh连接,之后的configure里加上选项--disable-kvm,并将make qemu全部换为make qemu-nox,一旦运行崩了,通过另一个ssh 去kill 进程,再reset之前的ssh连接的窗口,这样也是可以玩的:-), desktop大小可是server的两倍多哦

当然你如果不够熟练不用鼠标,也没有这般闲情逸致的话,建议还是下载有图形的ubuntu桌面版本,[当然桌面版也可以这样用ssh玩

依赖安装 (安装前注意换源(sudo apt edit-sources),sjtu有ubuntu内源哦 亲测≈10MB/s)

  • sudo apt-get update && sudo apt-get install git gcc-multilib build-essential python libsdl1.2-dev libtool-bin libglib2.0-dev libz-dev libpixman-1-dev -y
  • sjtu 的虚拟机,源要换成deb http://archive.debian.org/debian squeeze main

QEMU

获取 三种方法 任选一种

  • [方法一 mit的qemu2.3.0] git clone http://web.mit.edu/ccutler/www/qemu.git mitqemu -b 6.828-2.3.0 && cd mitqemu
  • [方法二 github的qemu2.7] 从github获取qemu : git clone -b stable-2.7 --single-branch --depth=1 https://github.com/qemu/qemu.git qemu-2.7 && cd qemu-2.7
  • [方法三 sjtu的qemu1.5.2] 下载并解压 :wget http://ipads.se.sjtu.edu.cn/courses/os/2015/tools/qemu-1.5.2.tar.bz2 && tar xf qemu-1.5.2.tar.bz2 && mv qemu-1.5.2 sjtuqemu && cd sjtuqemu

配置

  • mit在./configure时有使用--disable-kvm选项
  • 绝对路径 建议使用形如/path_to_your_lab_dir/qemu_dir_name/dist的,例如我使用的/home/yexiaorain/Android/Documents/os/qemu-2.7/dist
  • 请修改命令中prefix的路径指向绝对路径 ./configure --prefix=CHANGE_THE_PATH_TO_ABSOLUTE_DIR --target-list="i386-softmmu" && make && make install

lab 代码

下载代码git clone https://github.com/YeXiaoRain/JOS_LAB_MIT_2017.git

分支结构git log --graph --decorate --all --oneline

jos_lab_mit_2017's People

Contributors

cromarmot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

jos_lab_mit_2017's Issues

文档结构和内容优化

谢谢熊神的文档和卓神的代码,我这些文档中修复了他们的部分bug,好像也引入了一些新的bug,我还是以做lab过程的小白视角来编写的,尽量具体到包括查文档,代码结构设计,代码实现的操作,(最后一个lab6的文档比较水。)熊神的文档让我这种小白看起来有些吃力,感觉很多代码凭空而降,不知怎样得到。卓神的总结的文档很棒棒哦 建议大家去阅读,以及卓神的代码实现也很棒棒哦,但卓神爸爸没写过程的文档 桑心

可能文档中有我认知错误的部分,还望看到的话请指正,提个issues什么的

文档也是仓促之作

有很多可以从某个lab中提取的部分,比如对不同qemu的管理方法,git分支的设计和使用

内容上有很多边写代码边写文档的,有些再回头看就会“不在语境下”看不懂,也就需要对文档的内容进行修改,相关依赖也需要整理,之前画的代码分析结构图也没有放上来。

感觉有缘再修改这文档吧=。=或者哪位学弟大腿重写一个 和我这样类似的 以小白视角的傻瓜文档。

lab4.md中while(thisticket != lk->own)卡住的原因

最后在kern/spinlock.h中去掉#define USE_TICKET_SPIN_LOCK的注释 再make qemu-nox CPUS=4 然后卡住了:crying_cat_face:????
试了半天把申请锁的lk->own改为 atomic_return_and_add(&(lk->own), 0)然后可以运行:crying_cat_face:!!?? lk->own竟然不够原子,通过make grade CPUS=4得到输出

这里可能是因为编译器优化把lk->own这个变量放到寄存器里面了,因此当前线程看不到其它线程的对这个变量的修改,除了上面FAA的解决方法外,另外一个解决办法是在声明own变量的时候加上volatile关键字,告诉编译器不要对own进行优化,每次都从缓存或者主存中读取。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.