let copy_page from_page to_page =
  Array.blit
    memory (from_page * page_size)
    memory (to_page * page_sizepage_size;;

let clone_ptable ptable size =
  let new_ptable = new_page () in
  let offset = ptable * page_size in
  let new_offset = new_ptable * page_size in
  for i = 0 to size - 1 do
    match mode_of_int memory.(offset + 2*iwith
    | RW ->
        let new_page = new_page () in
        copy_page memory.(offset + 2*i +1) new_page;
        memory.(new_offset + 2*i) <- int_of_mode RW;
        memory.(new_offset + 2*i +1) <- new_page
    | _ ->
        memory.(new_offset + 2*i) <- int_of_mode UN
  done;
  new_ptable;;