multiprogramming: basically it suggests that cpu time must never be wasted..so it doesn't directly enforce preemption as in as far is cpu is not idel it lets the process go on..(default case 1 cpu environment)..The main idea is cpu utilisation..,no fixed time slice is enforced here
time sharing: Its multiprogramming + responsiveness, meaning all processes in main memory or in ready queue should respond time to time given a fixed time slice (at least for a period of time).
kernel do not have any info about user threads...and the fact "if one user thread goes in blocked state,the process including all other threads stop" proves it.so kernel has no hand in context switching of user level threads..##kernel threads ate independent on the other hand and can run or be scheduled or get blocked independently.
The many to one model maps many of the user threads to a single kernel thread. This model is quite efficient as the user space manages the thread management.
A disadvantage of the many to one model is that a thread blocking system call blocks the entire process. Also, multiple threads cannot run in parallel as only one thread can access the kernel at a time.
so answers are