generally, each process has its own address space
typically, you will reserve space within the address space for the page tables, but the tables themeselves can be marked as NotPresent (and thus don't need to actually exist within physical memory) -- if you then need access to that particular portion of the address space, you will then need to allocate page tables
to map 4GB virtual address space (using standard, non-PAE paging) takes about 4MB -- so 4MB should (but doesn't necessarily need to be, but its easier if it is) reserved in each address space -- but only once in each address space
physical memory however, you don't need to have the full 4MB of tables -- there are 1024 tables that make up that 4MB of mapping tables -- theoretically, the only tables that have to exist are the directory and the specific page table that covers currently executing memory -- means only 2 tables, 8k of physical memory used, in practice however, you also need to have (portions of) your kernel space mapped, the stack, and other data areas
so you might have something like this:
PAGE DIRECTORY:
#1 -->Points to table #1
#2 ---> Not Present
#3 ---> points to table #2
#4 ----> points to table #3
#5 ----> NotPresent
.....
#850 ----> points to table #4
#851 ----> points to table #5
#852 -----> NotPresent
...
#1000 ---> points to table #6
#1001 ---> points to table #7
TABLE#1:
this table points to things in the lower parts of memory
TABLE#2:
this points to parts of your kernel
TABLE#3:
this points to parts of your kernel
TABLE#4:
this points to part of your application
TABLE#5:
this points to part of your application
TABLE#6:
this points to part of your application DATA (or mabey stack, or... etc.)
TABLE#7:
...
in this (not very good) example, you have 7 page tables, plus a page directory, for a total physical memory use of 8*4k = 32KB for page tables for this application
this isn't a very good example, but hopefully it can give you a better idea of what you need to do
How it is handled in real world? For example in my Linux box i have 4G of mem so every process has 4MB of page directories and tables? For instance
ps -Al | wc -l gives me 149 processes, so i have about 600MB wasted?
every process (in PMode) will always have 4GB, regardless of how much memory you have (the amount of physical memory you have doesn't affect how much virtual address space each process has)