diff --git a/pa3.c b/pa3.c index 3617028ffce4e8bfbd5512c0d35ba968bbfa6eca..7379ec10a00cf49a0670c031bd9e12f2f76f211a 100644 --- a/pa3.c +++ b/pa3.c @@ -79,11 +79,10 @@ void push_stack(int num) int cnt=-1; int global_pd_index=0; -int mapcnt_index=0; struct pte *pte; -unsigned int alloc_page(unsigned int vpn, unsigned int rw) //vpn을 index로 사용?, 0 ~ 15 +unsigned int alloc_page(unsigned int vpn, unsigned int rw) { int pd_index = vpn / NR_PTES_PER_PAGE; //outer의 인덱스 int pte_index = vpn % NR_PTES_PER_PAGE; //ptes의 인덱스 @@ -132,9 +131,8 @@ unsigned int alloc_page(unsigned int vpn, unsigned int rw) //vpn을 index로 사 pte->pfn = ret; mapcounts[ret]++; - mapcnt_index++; - if(ret >= 0) //스택 비어있지 않아도 ret을 못 찾을 수 있음..!! + if(ret >= 0) //스택 비어있지 않아도 ret을 못 찾을 수 있음 return ret; } @@ -142,7 +140,6 @@ unsigned int alloc_page(unsigned int vpn, unsigned int rw) //vpn을 index로 사 cnt++; pte->pfn = cnt; mapcounts[cnt]++; - mapcnt_index++; return cnt; @@ -167,11 +164,9 @@ void free_page(unsigned int vpn) //맵카운트가 0일때는 free하고 0보다 pte = ¤t->pagetable.outer_ptes[pd_index]->ptes[pte_index]; mapcounts[pte->pfn]--; - mapcnt_index--; push_stack(pte->pfn); - int tmp = pte->pfn; pte->pfn = 0; pte->valid = false; pte->writable = false; @@ -289,7 +284,7 @@ here: } - for(int i=0; i<=global_pd_index; i++){ //current의 outertable이 몇개까지 있는지!!! + for(int i=0; i<=global_pd_index; i++){ //global_pd_index : current의 outertable이 몇개까지 있는지 if(!child.pagetable.outer_ptes[i]) child.pagetable.outer_ptes[i] = malloc(sizeof(struct pte_directory)); @@ -305,12 +300,12 @@ here: } } } - // printf("5. current=%d\n", current->pid); + list_add_tail(¤t->list, &processes); - child.pid = pid; /////////// + child.pid = pid; ptbr = &child.pagetable; current = &child; - // printf("6. current=%d\n", current->pid); + } } \ No newline at end of file diff --git a/vm_14 b/vm_14 index 622b4139697232d86fc4516d3b3ddb1077193f4f..4e683363d675ed739574ebbadfb1105cac11d005 100755 Binary files a/vm_14 and b/vm_14 differ diff --git a/vm_14.c b/vm_14.c index 8dc93dc530b266f7261796221b564f2872af0a0b..bc23be3d9b3f49732229a0e0f7474f1c556b53bf 100644 --- a/vm_14.c +++ b/vm_14.c @@ -109,7 +109,7 @@ void push_stack(int num) int cnt=-1; int global_pd_index=0; -int mapcnt_index=0; +// int mapcnt_index=0; struct pte *pte; @@ -165,7 +165,7 @@ unsigned int alloc_page(unsigned int vpn, unsigned int rw) //vpn을 index로 사 pte->pfn = ret; mapcounts[ret]++; - mapcnt_index++; + // mapcnt_index++; if(ret >= 0) //스택 비어있지 않아도 ret을 못 찾을 수 있음..!! return ret; @@ -175,8 +175,8 @@ unsigned int alloc_page(unsigned int vpn, unsigned int rw) //vpn을 index로 사 cnt++; pte->pfn = cnt; mapcounts[cnt]++; - mapcnt_index++; - // printf("1 : %d\n", cnt); + // mapcnt_index++; + return cnt; } @@ -190,11 +190,11 @@ void free_page(unsigned int vpn) //맵카운트가 0일때는 free하고 0보다 pte = ¤t->pagetable.outer_ptes[pd_index]->ptes[pte_index]; mapcounts[pte->pfn]--; - mapcnt_index--; + // mapcnt_index--; push_stack(pte->pfn); - int tmp = pte->pfn; + // int tmp = pte->pfn; pte->pfn = 0; pte->valid = false; pte->writable = false;