A general comment first. The MPU defines areas of memory that you are allowed to access and it is permanently enabled. By default there is a Protection Descriptor that covers all memory and all masters but as soon as you change that you need to make sure that you have all valid accesses defined.
If you are not confident with the configuration you may want to start with a very basic setup that allows the cores to execute from their respective code spaces and block execution in all data spaces - this will prevent any code runaway that occurs in data spaces. From there you can fine-tune the system to block a core from a data space that it shouldn't access and then potentially onto a dynamic system that configures the descriptors depending on what task is active at the time.
1. Descriptors are assigned in software using global addresses. The number you need and their configuration will depend entirely on your system. It may be sensible to share descriptors between different masters in some cases and not in others. Don't forget library routines, stack spaces etc.
2. Use global addresses. The actual values depend on your toolchain setup. You can get the values from your linker file or from the compiled map file. Take note of the comment in the manual about prefetches by the CPU - you don't want to trigger a violation by having the addresses set too tightly.
3. If you want to use EEPROM you must have a descriptor that covers it
4. Paging has no meaning for the MPU because it uses global addresses.
5. All violations go to the CPU and are not maskable. You have to decide what the appropriate action should be if any occur.