几个月之前就开始做的CSAPP-Labs,因为英文文档太难读、某些Lab比较困难等因素,一直拖到上周末才完成。正好最近学了Git,也把代码同步上来。
其中只有CacheLab是做到破防的(乐),优化到最后也只有50%的pts,为了满足我完美主义的内心,从简书的一位大佬“前几”那里copy了代码,原文章是https://www.jianshu.com/p/e68dd8305e9c 。
ShellLab在处理作业控制的时候,理论上前台进程应该能够读写终端。所以当有前台进程需要运行时,shell应该借助tcsetpgrp系统调用,把前台进程的进程组设置为终端前台进程组,否则进程在读时会收到SIGTTIN(默认停止进程)。shell把进程拉到前台以后,在后台监控进程情况,随时把自己切换回前台。不过tsh-ref没有做出相应的处理,我也就偷了个懒没写。
MallocLab使用的是最简单的隐式空闲列表,缺点是可能耗费大量的时间搜索非空闲的节点。可以略加改动,使用显式空闲列表,优化时间的占用。