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
这个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引导之