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 @   Fun_with_Words  阅读(264)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?









 和5张牌。

点击右上角即可分享
微信分享提示