*******************************************************************************
v0.5

-------------------------------------------------------------------------------
Monitor:
v0.1
1. Add check() and alert() interface, check() use to check the value, alert() use to trigger Detector.
2. Delete original output, because monitor did not need to output, it should only monitoring and decide if trigger Detector.

v0.2
1. Add head file protection.
2. Add wake_detector() interface.
3. Monitor connect to Detector successfully.

v0.3
1. Complete struct det_msg.
2. Complete fill_msg.

v0.4
Fail version

v0.5
1. Sleep after alert.

-------------------------------------------------------------------------------
Detector:
v0.1
1. Receive message from monitor successfully.
2. Add a timer_list.

v0.2
1. Fix a bug in reset_timer().
2. Obtain process executed time.

v0.3
1. Add check_exec().
2. Add check_mem().
3. Complete detect().

-------------------------------------------------------------------------------
Recover:
v0.1
1. Add do_nmi(), do_panic(), do_kill() and recovery().

*******************************************************************************
v0.6

Monitor:
1. Modify sleep to time counter, alert time interval set to 10s.
2. Fix cpu bit bug in check().
3. Add iowait duration, 2s.
4. Fill cpu_info.usr to struct det_msg.
5. Fill mem_info.kbmemfree to struct det_msg.

Detector:
1. Modify check_mem(), check mm->total_vm instead of mm->rss_stat. Because the latter always lead system to totally hang when poll.
2. Count the timeout times, if timeout times more than 5 times, panic.
3. Modify check_mem(), if max_mem > MAX_MEM_OCPY, return 1 and kill this process, or do nothing.
4. Fix bugs in timeout_handler, check max_exec > EXEC_TIMEOUT before kill.
5. Set TIMEOUT_PANIC to 3.
6. Add usr checking when cpu_info.sys >= 95.
7. Check mem_info.kbmemfree with cpu_info.iowait, then decide if PANIC.

Recover:
1. Add a condition justify in do_kill, use kthread_stop() to kill kernel thread, and force_sig() kill user program.
2. Add a argument in recovery(), to show panic message.
3. Check whether the task is idle or init before do_kill.
4. Modify do_kill() to kill user process, use set_task_state() and schedule().
5. Modify do_kill() to set task->mm->mm_users.counter to 1 before send SIGKILL signal.

*******************************************************************************
v0.7

Monitor:
1. Modify check(), set memory alert bound to 256MiB.
2. Add context switch checking in check().
3. Modify check(), replace kbmemfree by mem_info.pswpout_per_sec in memory checking.
4. Modify cpu_info.iowait checking condition, 50.0%+ * 3s or 60.0%+.

Detector:
1. Modify detect(), set MEM_LOW_BOUND to 128MiB, set MEM_BLK_PROC to 32.
2. Modify timeout_handler(), check exec_time before memory occupt.

Recover:

