I decided to develop a small OS in protected mode just as hobby and learn more about how an OS is working, I also decided to learn how bootloader works and how it enables the protected mode. So far I have some kind of working code where the first stage bootloader loads the second stage through a FAT file system on a floppy and the second stage loads the kernel, prepare everything to enter the protected mode and next enable it, then finally it jumps (32 bit long jump) to the kernel. I've done that by following a "tutorial" and consequently using various manuals/references to go deep into arguments separately (like A20 line, FAT bootsector, GDT, IDT, etc...) and learn how the single thing works (I know it's a weird way to learn but if it works I'm happy with that). Then I will focus more on the kernel which I will develop by myself only through docs because it's my goal. Also I will edit in the future the bootloader with more checks and features like fat32 support, etc...
Now I'm stuck because of a triple fault, which I've read it's caused by a misconfiguration of IDT or GDT and I just want to clarify some points:
1. The kernel is loaded to segment 0x2000 (linear address 0x20000) but AFAIK that's real mode RAM and it shouldn't work when protected mode is active right? If I'm right then I have to copy the kernel to protected mode RAM by using the real mode RAM as buffer or load directly with a FAT driver, even this is right?
2. I initialize the IDT without any interrupt because kernel will fill it as first thing when bootloader give the control to it and before jumping to kernel interrupts are disabled, is it ok (please don't blame me so far after days of research I didn't find anything about that)?
Also note the kernel is a sample shipped with the tutorial so if triple fault occours there, and I think it is so, because bochs before letting me know that triple fault occourred it's say: " 0x00000000000201c3>> jmp .-2 (0x000201c3) : EBFE" and the address match with the kernel linear address + an offset. So if that's confirmed I literally don't worry because as said my kernel is still in dev (0 to 0.0005% done

3. The GDT has only 1 entry (2 if we count the first empty descriptor) and it's the one of the kernel (code + data). It's set to fit all 4GB of RAM with base address 0x0000 and granularity actived, that's for both code and data. I'm worried of that because if kernel takes all RAM how can it be able to loads another process. Otherwise I think that if kernel hasn't access to all RAM how it can load things. The last thing is that Code descriptor, when thigs are more developed (my kernel) should be resized to fit in a small area of memory because data is where kernel should put things such as processes and not to mention the fact that now code section is overlapped to data one and that's really bad, I think.
Sorry if these questions seems noobish but really, I couldn't find any answer in a cuple of days of research (this forum included) (may be it's me that I didn't noticed things or researched worngly and if this is the case I want to apologize). Also sorry if my english is a bit clunky, I'm not english mother language.
If needed I will provide code as soon as I get access to it (now I'm at work, don't worry launch time)
Thanks in advance,
Gioele