The kernel is a monolithic design. There are some core routines that comprise the majority of the kernel. I suppose if someone were to make this a microkernel, these routines would be what you would put there (along with any necessary support).
The kernel consists of several modules, mostly one per object type, plus some utilities.
An ast is an 'asynchronous system trap'. VMS programmers know them well. Unix programmers can think of them as sort of like SIGIO's, but they are specifically tied to a particular I/O. Like you start an asynchronous read and you specify an particular ast routine to be called when that particular read completes. They may also be thought of as a user-mode equivalent of an interrupt.
There are several flavors of ast's:
This routine initializes the pool areas, creates the system user, job and process, creates the system logical names, starts the other cpu's running and initializes the device drivers
These routines use otherwise unused physical memory pages to store data that can be reconstructed, like exact copies of disk blocks, or name to ip address translations
These are basically the only thing a thread can wait for (except for an available cpu). They normally get set when an I/O operation completes or a thread exits, etc, but they can also be used for things like inter-thread/process communication/synchronization.
These routines start the logon process running on a terminal when the terminal driver calls them
These routines are how a driver operating at interrupt level can call a routine at softint (low ipl) level