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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?