[ Now how does the Memory Manager decides which Page is

-ReadOnly, or
-ReadWrite or
-Execute or
-Execute_ReadWrite etc.
Examples:
read only - for reentrant code (and shared). Suppose you have a routine on memory that is shared among several processes. So you need to protect it to avoid code corruption.

Execute - on some architecures you can protect system flagging pages with execute or not execute. Marking as No-exec will protect O.S. and process against those infamous Buffer overflow attacks for example. Also keep coders in a strict way to program

About your previous question about page size: basically choosing a page size is a kind of balance between page tables size and efficiency on memory allocation for user processes.

If you use a small page, you will increase the size of page table as real storage grows.
If use use a large one, you will thrash memory usage since small processes will ocuppy a lot of memory (but not use, since pages usually belongs to one process)