If processor is in real-mode how can it access the memory > 1MB (0xFFFFFFF0H)
Almost nothing inside the CPU cares about "CPU mode". When executing normal instructions; what actually matters are things like default code size, segment base, segment limit, segment type, etc., and the CPU mode is irrelevant. It's only things like segment register loads and interrupt handlers where CPU mode matters (in fact, other than paging, I'd wouldn't be surprised if the only things that care about CPU mode are things implemented in micro-code).
Because CPU mode is mostly irrelevant for normal instructions (and because things like default code size, segment base, segment limit, segment type, etc. are the only things that actually matter); at power on or reset the CPU can set "abnormal" values (values that aren't normally possible for the CPU mode) into segment registers and the rest of the CPU won't care. Specifically; it can do "CS.base_address = 0xFFFF0000
" (which isn't possible for real mode where a CS segment register load would do "CS.base_address = 16_bit_CS.value << 4
").
The end result is that all memory accesses that involve CS (and pass segment limit checks) end up going to the (linear) address "0xFFFF0000 + offset
" even though the CPU is in "real mode" and even though this isn't normally possible for real mode.
Note that in real mode addresses are not limited to 1 MiB. For example, if you load 0xFFFF into a segment register then CPU will set that segment register's hidden info to "segment.base = 0x000FFFF0" and addresses using that segment will end up with (linear) addresses from 0x000FFFF0 to 0x0010FFEF. This is why (when 80286 was released) we needed the "A20 gate" for compatibility with ancient software (to force the 20th address bit to be zero without the CPU knowing).
Also note that while "CS.base_address = 0xFFFF0000
" isn't normal for real mode; software can switch to protected mode and load a "code size = 16-bit, segment limit
64 KiB, segment base = 0xFFFF000" descriptor into CS; and then switch back to real mode without reloading CS. The end result would be the same "abnormal CS base" that the CPU sets up at power on or reset.
Of course (regardless of how an abnormal value got into CS.base) any normal CS segment register load that's executed in real mode will cause "CS.base" to be set to a normal value; so firmware would have to be ensure that no CS segment register loads occur while it's executing in "real mode" at the abnormal address.
How this happens or what happens when RAM in < 4GB ( say 2GB)
The physical address space is used for RAM, and ROM, and memory mapped devices. The ROM (and not RAM) will be just below the "4 GiB" address. For example, if the ROM is 2 MiB, then it'd be in the physical address range from 0xFFE00000 to 0xFFFFFFFF. Note that at power on firmware can not use RAM (it has to figure out what type and size of memory modules are installed and configure the memory controller to suit, before it can expect RAM to work).
If the BIOS is mapped at 0x000FFFFFH why processor starts executing at 0xFFFFFFF0H
Originally (80286 and older CPUs) the BIOS actually was mapped at 0x000FFFFF. For (some) 80386 and later CPUs this is only emulated for compatibility reasons. Instead; the firmware copies a small piece of itself from ROM (in the area ending at physical address 0xFFFFFFFF) to RAM (in the area ending at physical address 0x000FFFFF); and then configures the memory controller so that writes made to this area of RAM are ignored (so that memory controller doesn't forward these writes to the RAM chips).
Note that for "pure UEFI" systems (not including "hybrid BIOS + UEFI" systems), there's no reason for firmware to set up the "legacy BIOS area" ending at physical address 0x000FFFFF; and RAM in this area may be usable RAM (configured as "allow writes" in memory controller, etc). In the same way, the other legacy areas (for VGA and device ROMs) aren't needed for "pure UEFI" either; and in theory (for a computer with 2 GiB of RAM or less) there's no reason (except for SMM stealing a little) you can't just have single contiguous area of normal RAM from 0x00000000 to 0x7FFFFFFF.