8分钟看懂SMP:-)

请先看个用户态多线程的示意:

int  g_ary[N];
int  g_idx;
Lock g_idx_lock;

void fn() {
  int i;

  lock(&g_idx_lock);
  i = g_idx; g_idx = (g_idx + 1) % N;
  unlock(&g_idx_lock);

  g_ary[i] += 2;
}

start_n_thread(fn, 10); // 启动10个线程

0. 每个CPU有n个寄存器,是物理的,其中pc寄存器存放下条指令的内存地址。每个进程也有n个"寄存器",放在内存里。所谓CPU切换到某个进程执行,是把进程寄存器复制到CPU寄存器。可能不能mov pc, addr;而是得jmp bx; bx里存放addr.

1. 把上面的代码里的int g_ary[N];换成Task g_ary[N];或ProcessControlBlock..., ProcInfo...之类。对CPU来说线程和进程都是Task。

2. CPU们共享内存。某个CPU可以通过锁住总线等手段防止别的CPU访问内存。于是int g_idx_lock;可以实现。

3. SMP系统里中断复杂。有可以中断所有CPU的,有只中断某个CPU的。中断所有CPU的可以互斥或排队。CPU A可以中断CPU B.

4. OS刚启动时只有一个CPU在run,它做好初始化工作后才开始都run. 所谓run就是不断地到全局共享的Task表里找个task执行(见0.)

5. 单CPU也有不同进程的地址空间要隔离的问题。不隔离也能多进程。隔离通过查内存中的表格进行虚拟地址到物理地址的转换以及范围和权限检查等来实现。

6. SMP系统里Cache变得很复杂。

7. 以上是大概其的说法,肯定有错。

On multicore/multiprocessor architectures, an APIC is used to route interrupts to cores/processors. Intel's Advanced Programmable Interrupt Controller (APIC) is a family of interrupt controllers. As its name suggests, the APIC is more advanced than Intel's 8259 Programmable Interrupt Controller (PIC), particularly enabling the construction of multiprocessor systems. It is one of several architectural designs intended to solve interrupt routing efficiency issues in multiprocessor computer systems.

posted @ 2022-03-09 16:29  Fun_with_Words  阅读(279)  评论(0)    收藏  举报









 张牌。