南京大学《操作系统》笔记(二)
作者:互联网
并发与并行
并行:允许多个执行流同时执行(要求多个处理器);
并发:多个执行流可以不按照一个特定的顺序执行。
多任务操作系统中的并发
并发性的来源:进程会调用操作系统的API,操作系统在并发执行两个执行流的时候,要保证它们互不干扰,因此,对处理器和内存提出了要求。
处理器 | 内存 | 典型的并发系统 | 并发/并行 |
---|---|---|---|
单处理器 | 共享内存 | OS内核/多线程程序 | 并发不并行 |
多处理器 | 共享内存 | OS内核/多线程程序 | 并发、并行 |
多处理器 | 不共享内存 | 分布式系统(消息通信) | 并发、并行 |
多处理器编程(多线程编程)
多线程之间,寄存器组的值、堆栈(包括堆栈中的局部变量)是互相独立的;代码是共享的。
在C++中,可以使用pthread_create和pthread_join得到共享代码、共享数据、独立堆栈的多个线程。(will新开一个博客写)
Q1:每个线程的堆栈范围和大小?
A1:每个线程有8MB的内存映射区域和前后各4KB的保护页。
Q2:每个线程有8M的堆栈,那么为什么1000个线程没有耗尽内存?
A2:因为虽然每个线程有8MB的内存区域,但是它们是虚拟内存,并且在没有被使用的时候不会映射到物理内存上(Lazy allocate),因此物理内存的占用并没有那么多。
多处理器编程的困难
- 编译器优化->顺序的丧失:指令的执行不保证按照代码书写的顺序发生;
- 中断/并行->原子性的丧失:代码的原子性随时被破坏;
- 乱序执行->可见性的丧失:执行过的指令可能在多处理器之间不可见。
标签:多处理器,操作系统,并行,笔记,并发,线程,内存,南京大学,多线程 来源: https://www.cnblogs.com/MiaoMiaoGarden/p/15578521.html