MIT6.828 Lab4 PartA

  lab4地址:https://pdos.csail.mit.edu/6.828/2014/labs/lab4/
  lab4主要是讲多核处理器的系统的实现,主要包括3个part,多核系统的实现,fork,和任务抢断。
  

part A

  首先,要实现SMP系统,即对称多处理系统。在这种处理系统里,所有的CPU都是等价的,在功能上没有主次之分,都是平等的。但是在启动阶段,SMP系统的处理器分为两种,一种是BSP(引导程序处理器),还有一个是APs(应用处理器)。看名字就可以知道,BSP是在计算机boot引导系统的时候,进行引导任务。当系统引导完成,BSP处理器会激活其他的处理器,这些被激活的处理器就叫做APs,此时就不分两种处理器了,所有的处理器,都是APs处理器,他们的重要性都是完全一样的,没有任何的差别,即他们可以共享计算机中的所有资源,没有主从之分。
  每个CPU都有一个LAPIC的单元,这个单元主要是和CPU里面的中断有关,而且会提供一个和CPU相关的ID号给系统,让系统知道,现在进入内核的CPU是哪个CPU。
  LAPIC和硬件相关性比较大,主要是控制各种中断的,对于具体的操作系统的内容,感觉帮助不是很大。所以直接来看ex1
  exercise1
   这个exercise就是实现一个关于LAPIC的IO口的地址映射的函数

void *
mmio_map_region(physaddr_t pa, size_t size)
{
    static uintptr_t base = MMIOBASE;
    size = ROUNDUP(size, PGSIZE);
    pa = ROUNDDOWN(pa, PGSIZE);
    if(size + base >= MMIOLIM)
        panic("mmio_map_region not implemented");
    boot_map_region(kern_pgdir, base, size, pa, PTE_PCD|PTE_PWT|PTE_W);
    uintptr_t ret = base;
    base = base +size;
    return (void*) ret;
}

  实现比较简单,就是从一个MMIOBASE的虚拟地址开始,给LAPIC模块的IO口映射相应的虚拟地址。只要注意一下数据对齐的问题就可以了。还有要注意一下地址的范围,不要超出[MMIOBASE, MMIOBASE+4M)这段地址范围就可以了。
 
  
  系统通过BSP引导之

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验概述 本次实验是MIT 6.828操作系统课程的第一次实验,主要内容是编写一个简单的操作系统内核,并在QEMU虚拟机上运行。本次实验共有9个练习,其中练习9要求实现一个简单的用户程序并运行。 练习9要求我们实现一个简单的用户程序,该程序能够在屏幕上输出一些信息,并等待用户输入,输入结束后将输入内容输出到屏幕上。用户程序的具体要求如下: - 输出一些信息,例如“Hello World!”。 - 等待用户输入,可以使用getchar()函数实现。 - 将用户输入内容输出到屏幕上。 实验过程 1. 编写用户程序 我们首先在lab1目录下创建一个user文件夹,用于存放用户程序。然后创建一个名为“test.c”的文件,编写用户程序的代码如下: ``` #include <stdio.h> int main() { printf("Hello World!\n"); char c = getchar(); printf("You entered: %c\n", c); return 0; } ``` 这段代码的功能是输出“Hello World!”并等待用户输入,输入结束后将输入内容输出到屏幕上。 2. 修改Makefile文件 为了能够编译用户程序,我们需要修改Makefile文件。具体修改如下: ``` UPROGS=\ _cat\ _echo\ _forktest\ _grep\ _init\ _kill\ _ln\ _ls\ _mkdir\ _rm\ _sh\ _stressfs\ _usertests\ _wc\ _test\ # 添加用户程序的名称 $(OBJDIR)/_test: $(OBJDIR)/test.o $(LIBDIR)/ulib.o | $(OBJDIR) $(LD) $(LDFLAGS) -N -e main -Ttext 0 -o $@ $^ $(OBJDIR)/test.o: test.c | $(OBJDIR) $(CC) $(CFLAGS) -c -o $@ $< ``` 在UPROGS变量中添加上刚刚编写的用户程序的名称“_test”,然后在Makefile文件的末尾添加如上代码。 3. 编译内核和用户程序 在终端运行命令“make”,编译内核和用户程序。 4. 运行QEMU虚拟机 在终端运行命令“make qemu”,启动QEMU虚拟机。 5. 运行用户程序 在QEMU虚拟机中,输入“test”,即可运行刚刚编写的用户程序。运行结果如下: ``` Hello World! This is a test. You entered: T ``` 可以看到,程序首先输出了“Hello World!”这个信息,然后等待用户输入。我们输入了“This is a test.”这个字符串,然后按下回车键,程序将输入内容输出到了屏幕上。 实验总结 本次实验要求我们实现一个简单的用户程序并运行。通过编写代码、修改Makefile文件、编译内核和用户程序、启动虚拟机以及运行用户程序等步骤,我们成功地完成了本次实验,并学会了如何在操作系统内核中运行用户程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值