将陆续上传新书《自己动手写CPU》,今天是第46篇。
在MIPS32指令集中有两条特殊的存储加载指令:链接加载指令LL、条件存储指令SC,本次将介绍这两条指令,在后续将实现这两条指令。
9.6 链接加载指令ll、条件存储指令sc说明
在本章前面的部分,笔者花费很多笔墨介绍了OpenMIPS中除ll、sc之外的加载、存储指令的实现过程,本节至9.9节将专门介绍链接加载指令ll、条件存储指令sc的实现过程。ll、sc指令是MIPS32指令集架构中比较特殊的加载存储指令,用来实现信号量机制。
在多线程系统中,需要RMW(Read-Modify-Write)操作序列保证对某个资源的独占性,RMW操作序列的含义是,读取内存某个地址的数据,读取的数据经过修改,然后再保存回内存原地址,这个过程不能有任何打扰,因此需要建立一个临界区域(Critical Region),临界区域中完成的操作通常称为原子操作,原子操作不被打扰。操作系统建立临界区域的方式通常是信号量机制,如下。
wait(semaphore);
原子操作;
signal(