MIT6.828 Lab4 PartA

本文详细介绍了MIT6.828实验四(Lab4 PartA)的内容,涉及SMP系统、多核处理器的初始化,包括BSP和APs的角色、LAPIC的IO口地址映射、内核栈的配置以及多核同步。通过内核锁确保多核系统的正确运行,并讨论了轮转调度的优化和相关系统调用的实现。

  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引导之后,剩下的被激活的AP处理器就不用引导系统了,而是直接把地址为0x7000作为入口地址,开始执行系统。处理器一个一个通过入口地址,执行相应的代码。所以,为了防止0x7000这个页面被其他的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值