} if(n==-1) n=Evict();
fs_device->ops->read(fs_device->aux,sector,SecArr[n].data); fs_device->read_cnt++; ManArr[n].Use=true; ManArr[n].SecNo=sector; ManArr[n].Num=0; ManArr[n].Dirty=false; lock_release(&CacheLock); // printf(\ return n; }
int InCache(block_sector_t sector) {
int i;
for(i=0;i int Evict() { int i,n=-1; unsigned int maxn=0; for(i=0;i if(ManArr[i].Use==true&&ManArr[i].Num>=maxn) { maxn=ManArr[i].Num; n=i; } } lock_acquire(&ManArr[n].Lock); ASSERT(n!=-1); WriteBack(n); ManArr[n].Use=false; lock_release(&ManArr[n].Lock); // printf(\ return n; } void WriteBack(int n) { fs_device->ops->write(fs_device->aux,ManArr[n].SecNo,SecArr[n].data); fs_device->write_cnt++; ManArr[n].Dirty=false; } void DestroyCacheMan(void) { WriteAllBack(); } void CountSec(int n) { int i; for(i=0;i void WriteAllBack(void) { int i; for(i=0;i
相关推荐: