OS_knowledge
进程
Sender -encoding-> Message -Decoding-> Receiver,其中通信双方需要给对方Feedback。交流过程中的干扰:
进程间通信(Interprocess Communication,IPC)
并发运行的进程可以分为独立进程和协作进程。
为什么会有进程间通信?
- 共享资源,允许该共享资源被多个进程并发访问
- 提升计算速度,一个任务被拆分成多个子任务,并将子任务分给不同进程
- 模块化设计,一个系统划分为不同模块
- 便利性,处理器可以相互协作的环境对于用户来说,可以同时进行不同的任务(听音乐,打印文档等),它们需要相互协作以避免冲突
进程间通信的类型(操作系统默认两个进程的内存空间不能被相互访问)
- 共享内存模型:会建立一个协作进程可以访问的共享内存区域,进程可以通过读写共享内存来交换信息。
- 共享内存区域在创建共享内存段的进程的地址空间中,由发起通信的进程创建。想要使用该共享内存段进行通信的其他进程需要将其附加在自己的地址空间中。
- 例子: 生产者消费者并发模型,生产者进程生产消息,消费者进程消费消息。需要有buffer,用来被producer填充被consumer消费。必须同步,防止消费者消费未被生产的商品。
- 缓冲区类型:有界缓冲区(消费者需要等待新商品,生产者需要等待buffer不为满)和无界缓冲区(消费者需要等待新商品,但生产者总是可以一直生产商品)。
- 例子: 生产者消费者并发模型,生产者进程生产消息,消费者进程消费消息。需要有buffer,用来被producer填充被consumer消费。必须同步,防止消费者消费未被生产的商品。
- 共享内存区域在创建共享内存段的进程的地址空间中,由发起通信的进程创建。想要使用该共享内存段进行通信的其他进程需要将其附加在自己的地址空间中。
- 消息传递模型:通过进程间交换信息来实现的。通过借助内核来进行信息交换。A将消息发送给内核,内核知道该消息要发送给进程B,于是将消息给B:允许进程在不共享同一地址空间的情况下进行通信并同步它们的操作。
- 同一系统中的两个进程想要通信,就可以采用共享内存模型。
- 分布式系统中,通信进程位于通过网络连接的计算机上。
- 模型中需要有发送消息和接受消息的操作.
- 消息大小:固定和可变
操作系统的内存管理
虚拟内存
为什么要有虚拟内存?
没有虚拟内存时,进程共享物理内存,当进程加载到物理内存时,会出现三个问题:
- 物理内存没有足够的空间可以容纳进程
- 设想进程是否可以有一块更大的内存空间?那么更大的空间放在哪?二级存储,例如磁盘。
- 物理内存碎片化
- 碎片化为内存中没有一块连续的空间能够容纳进程。由此可以推出一种设想,是否可以让进程在不连续的物理内存中运行?场景:数组,因为数组为连续索引,因此需要使用新的索引机制,即虚拟内存,通过映射关系实现重新索引。
- 物理内存为进程共有,会导致不同进程访问修改同一物理内存的数据
- 设想每个进程是否可以有自己独立的内存空间,实现内存隔离?
综上,引入虚拟内存,假设每个进程都有自己的虚拟空间,该虚拟空间大于物理内存,这样就实现了内存隔离和内存连续。虚拟内存通过某种映射对应物理内存。
虚拟内存是什么?
虚拟内存是每个进程假想的内存空间,通过映射关系与物理内存对应。该映射关系存储在RAM物理内存中,称为PT(Page Table),PTE(Page Table Entry)表示映射关系。
- PTE的大小是多大?
映射关系(虚拟地址到物理地址的翻译)
前提:CPU处理数据的基本单位是 1 Word = 4 Byte???
假设:虚拟内存是$4GB$。物理内存RAM是$2GB$;
问题:存储PT需要多大空间?
按Word为单位映射:
虚拟内存有$2^{32}B$ ,对应$2^{30}$个PTE,PTE中需要存储虚拟地址和物理地址的映射关系4B。则一个进程的PTE占据4GB物理内存空间。按Page为单位映射(此处Page大小为$4KB$):
虚拟内存有$2^{32}B$ ,对应$2^{20}$个PTE,PTE中需要存储虚拟地址和物理地址的映射关系4B。则一个进程的PT占据4MB物理内存空间。虚拟页的虚拟地址在进行翻译时,会遇到PTE中描述该虚拟页对应的内容在磁盘上,此时CPU会抛出异常Page Fault(缺页异常),引发中断,CPU的控制权由用户转到内核,操作系统处理异常,操作系统会根据页置换算法,从物理内存中选出一个没用的页P,如果页P被修改过(脏页),则操作系统会将其写回磁盘后将其驱逐出物理内存,然后将磁盘内容放到物理页上,并修改PT中的PTE,恢复中断,CPU重新运行缺页指令。
- 这个过程非常缓慢。优化如下:在磁盘和物理内存之间加一个硬件DMA,当CPU处理其他任务时,直接将页从磁盘加载到内存。PTE中虚拟地址对应DISK这个关系是怎么表现的?因为如果在PT中没有该PTE就永远无法得知。
地址翻译到数据访问过程需要访问2次物理内存:访问PT + 访问数据,也很慢,优化:在CPU和物理内存之间加一个硬件TLB(Translation Look Aside buffer)。TLB用于缓存虚拟地址到物理地址的映射。TLB的查询时间小于一个clock。TLB分为ITLB和DTLB(指令和数据),一个TLB有4096个entry,但是由于数据的局部性原理,实践中TLB效果较好。为了优化,可以再增加一个TLB,像DMA模块机制一样,将页面地址直接从RAM加载到TLB中,无需返回操作系统。
当多个进程时,所有进程的PT存在物理内存中也需要占据很大的空间。
多级页表:
如果只有一级页表,则PT占据的物理内存空间不能被放到磁盘,因为PT负责物理内存和虚拟内存的翻译功能。为了使得页表也可以交换到磁盘,可以增加二级页表。
负责地址翻译和生成Page Fault的硬件为MMU,在CPU主板上,由操作系统编程。