进程与操作系统:通信、性能评估及电源管理
1. 进程通信机制
在进程间通信方面,主要有阻塞和非阻塞两种通信方式。阻塞通信在发送后,进程会进入等待状态,直至收到响应;非阻塞通信则允许进程在发送后继续执行。这两种方式都有其用途。
进程间通信主要有共享内存和消息传递两种风格,它们在逻辑上是等价的,但在不同场景下各有优势。
1.1 共享内存通信
共享内存通信在基于总线的系统中,像CPU和I/O设备等组件可通过共享内存位置进行通信。例如在图6.14所示的系统中,CPU软件知晓共享位置地址,该位置也被加载到I/O设备的相应寄存器。若CPU要向设备发送数据,就写入共享位置,I/O设备再从该位置读取数据,读写操作可封装在程序接口中。
以文本压缩器为例,输入数据速率恒定易管理,输出数据消耗速率可变,因此需要弹性缓冲区。CPU和输出UART共享一个内存区域,CPU将压缩字符写入缓冲区,UART按需取出以填充串行线。由于缓冲区的比特数不断变化,压缩和传输过程需要额外的大小信息。在此情况下,协调相对简单,CPU在缓冲区一端写入,UART在另一端读取,关键是要确保UART不会溢出缓冲区。
为避免数据冲突,需使用一个标志来告知CPU I/O设备的数据是否准备好。若该标志仅由CPU使用,可通过标准内存写入操作实现;若用于CPU和I/O设备的双向信号传递,则需注意。可能会出现临界时序竞争问题,如CPU和I/O设备同时读取标志为0,然后CPU设置标志为1并写入数据,I/O设备却错误地再次设置标志为1并覆盖CPU写入的数据。为避免此类问题,微处理器总线需支持原子测试并设置操作。
原子测试并设置操作先读取一个位置,再将其设置为指定值,
超级会员免费看
订阅专栏 解锁全文
2606

被折叠的 条评论
为什么被折叠?



