What is kernel and difference between kernel and microkernel?