I'll give a rough explanation.. imagine monolithic as a big chunk of code running in specific address space...they are not modular because of this very reason, a huge number of lines tightly linked. Furthermore, for the same reason, they are not very tolerant to faults as any error in kernel level, may collapse the entire system (what happen if you destroy ground level of a multi-storey building). Since monolithic kernel is usually designed for multiple platforms/hardwares they lack the optimization as it is not easy to make every hardware 100% happy. All these are used to compare with microkernel which usually designed to run on a very specific target. Anyway, nowadays it is very hard to distinguish as there exist a grey area, like for example linux kernel which although a monolithic design but you able to add or remove modules. meaning to say, they are not pure monolithic.