Re: 关于lab3的一些问题

4 views
Skip to first unread message

Yu Chen

unread,
Mar 22, 2012, 1:39:37 PM3/22/12
to 厳梟, os-course, yos-c...@googlegroups.com
严枭,你好:
你说的我理解在swap_fifo.c中的_fifo_swap_out_victim函数中,有一句:list_entry_t
*head=(list_entry_t*) mm->sm_priv;
其实mm->sm_priv= &pra_list_head; (见_fifo_init_mm的实现)。

pra_list_head所指向的双向链表(见Page结构中的list_entry_t
pra_page_link,用来"记录"页访问的时间顺序,从而形成双向链表)在一开始为空(见_fifo_init_mm的实现);
但在缺页产生后,即在执行 do_pgfault的某个时候,如果引起此缺页操作是一个合法操作(即操作访问地址属于某个vma描述的地址范围中),则do_pgfault在调用分配页pgdir_alloc_page或swap_in页的处理中,都会最终调用到_fifo_map_swappable函数,而这个函数将用来"记录"页访问的时间顺序(即对pra_list_head所在的链表进行插入操作,这时pra_list_head就不为空了)。由于此函数只是在缺页时才被触发,所以在对一个有对应物理页的虚地址进行多次读写操作,其实不会调用_fifo_map_swappable函数来记录到"页访问的时间顺序。
但_fifo_swap_out_victim函数会指出要被换出的page,所以会对pra_list_head所在的链表中指向换出的page的pra_page_link进行删除操作。

在 2012年3月23日 上午12:27,厳梟 <shio...@gmail.com> 写道:
> 老师您好:
> 对于lab3有些问题我没有看懂,第二题中在swap_out函数里面有一句:list_entry_t *head=(list_entry_t*)
> mm->sm_priv;,也就是说根据head来找到最早进入内存的页然后返回,
> 那么我在页放进内存中的时候是不是要维护这个sm_priv表?
我理解最好是在do_pgfault函数的某处调用swap_map_swappable,来最终维护这个sm_priv表。

> 那么在vmm.c中是不是要在页进入内存的时候将pra_page_link映射到head列表里面建立一一对应关系?
页将被第一次访问(即产生缺页错了)时,将pra_page_link映射到head列表里面

> 我尝试着将新加入内存的页放入这个表中,但是发现pra_page_link初始为NULL,这个需要自己来建立么?
是的。参考你的第一个问题的回答

>
> 祝好~
> 2009011215严枭

--
Best Regards
==============================================
Chen Yu
Ph.D. Associate Professor
System Software&Software Engineering Group,
Laboratory of Pervasive Computing,
Dept. of Computer Science and Technology
Tsinghua University, Beijing 100084, P.R. China
E-Mail: mailto:yuc...@tsinghua.edu.cn chy...@gmail.com
==============================================

Yu Chen

unread,
Mar 23, 2012, 11:11:50 AM3/23/12
to 厳梟, os-course, yos-c...@googlegroups.com
你的理解是对的。只是代码阅读还不够全面。
vmm.c的line 313:
if (*ptep == 0) { // if the phy addr isn't exist, then alloc a page
& map the phy addr with logical addr
这是让你调用pmm.c中的某个函数来完成"alloc a page & map the phy addr with logical addr"的工作,具体填写在
vmm.c的line 314:
/*LAB3 EXERCISE 1: YOUR CODE*/

请注意在pmm.c中的pgdir_alloc_page函数实现,仔细看看它完成了啥事,能否满足你的理解?

在 2012年3月23日 下午10:59,厳梟 <shio...@gmail.com> 写道:
> 陈老师,您好:
> 如果按照您说的这样的话,是不是我在第一次出现缺页的时候,也就是在申请一个页的时候对这个页的pra_page_link映射到mm->sm_priv(也就是pra_list_head)链表中?这样的话我就得在判断if
> (*ptep==0)这句话之后对pra_page_link手动分配一个空间,这样才可以插入到pra_list_head中?但是我不清楚去怎么去分配这个空间。。。或者说是不是这种理解有什么问题?
> 祝好~
> 严枭
>
> 2012/3/23 Yu Chen <chy...@gmail.com>

Reply all
Reply to author
Forward
0 new messages