refine task schedule

	add priority queue
refine locks

	wait on lock will put itself into wait queue
	that means a process that wait on lock will not
	be picked by schedule