But i am not fully clear on how mmap() system call allocate the memory...
I also came to know that mprotect() system call sets the protection,
If the calling process tries to access memory in a manner that violates the protection, then the kernel generates a SIGSEGV signal for the process.
Program and Strace details: