struct ssd_info *process(struct ssd_info *ssd):
1.这个函数的主要功能是主控读子请求和写子请求的状态变化处理。首先通过一个for循环来循环判断所有channel通道中是否有读子请求或者写子请求,没有子请求则令标识位flag=1,否则flag=0。若flag=1,说明此时没有子请求,则若gc_request>0的话那就紧接着调用gc()函数进行相应的GC操作。上述情况判断完(或者说是判断完,因为可能不满足条件没有进入具体执行路径),先处理处于SR_R_C_A_TRANSFER(命令地址传输阶段),或者SR_COMPLETE,或者下一状态是SR_COMPLETE并且下一状态预计时间小于当前状态时间的读子请求。
2.再接着对所有channel进行一个for循环,如果该channel是IDLE的,再判断ssd->gc_request是否大于0,ssd->channel_head[i].gc_command是否为NULL,满足条件即可调用gc()函数,若gc成功则将该channel的flag_gc置1表示此channel正忙然后continue结束此次循环进入下一次循环(即判断下一个channel)。
3.若channel是处于IDLE状态,但是不满足GC要求,即没有进行GC操作,则按顺序依次调用services_2_r_wait()函数处理等待状态的读子请求,再调用services_2_r_data_trans()函数处理数据传输状态的读子请求,最后再调用services_2_write()函数处理写子请求。