We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
同学你好,关于lab3的ClockSwapper我有一些疑问:
fn pop(&mut self) -> Option<(VirtualPageNumber, FrameTracker)> { let len = self.queue.len()-1; let mut index:usize = 0; let mut isfound:bool = false; unsafe{ loop{ for i in 0..(len+1){ //为什么让pe = xxx.clone() as * mut PageTableEntry //就可以达到 “修改(*pe)相当于修改页表项” 的目的 //我对这个问题的不理解来自于: // 我认为PageTableEntry 是包含了一个usize的元组结构体,相当于在堆里面存了一个usize,然后栈上面有一个指针指向这个usize (为了方便,记usize为us, 指针记ptr) //Q1:(如果是这样的话,entries存的也就是512个指针了?所以不太可能是这样,那么PageTableEntry在内存里是一个怎么样的分布呢?) // entry在src/mapping/mapping.rs: lin157中定义的时候应该是一个&mut PageTableEntry类型的,并且也是在line263中以这个类型传进push的 // Q2:为什么在push的形参要接受的是一个*mut PageTableEntry类型 // 这里你把* mut PageTableEntry类型的 entry 强制转换成了usize, 我的理解是us的值 // Q3:那为什么要用clone() let pe = self.queue[i].2.clone() as *mut PageTableEntry; let mut flags = (*pe).flags().clone(); if flags.contains(Flags::ACCESSED) { flags.set(Flags::ACCESSED,false); //println!("{:?}",flags); (*pe).set_flags(flags); } else { //println!("{:?}",flags); index = i; isfound = true; break; } } if isfound { break; } } } //println!("{:?}",index); let f = self.queue.remove(index); Some((f.0,f.1))
The text was updated successfully, but these errors were encountered:
No branches or pull requests
同学你好,关于lab3的ClockSwapper我有一些疑问:
The text was updated successfully, but these errors were encountered: