This is the main patch which contains all vpid-to-pid conversions and auxilliary stuff. Virtual pids are distinguished from real ones by the VPID_BIT bit set. Conversion from vpid to pid and vice versa is performed in two ways: fast way, when vpid and it's according pid differ only in VPID_BIT bit set ("linear" case), and more complex way, when pid may correspond to any vpid ("sparse" case) - in this case we use a hash-table based mapping. Note that this patch implies that we have a public vps_info_t pointer type to represent VPS (otherwise it is useless) so that it can be used in any virtualisation solution. Virtualization solution should have the following "interface": 1. vps_info_t has member int id; 2. vps_info_t has member struct task_struct *init_task; 3. the following macros/functions are defined: a. inside_vps() - returns true if current task is now inside VPS; b. task_inside_vps(task_t *) - returns true if task belongs to VPS; c. current_vps() - returns vps_info_t for current VPS; d. task_vps(task_t *) - returns vps_info_t that task belongs to; e. set_sparce_vpid(vps_info_t) - switches VPS into state when "sparce" conversion is used; f. sparse_vpid(vps_info_t) - returns true if vps is in "sparce" state and false if it is in "linear"; g. get_vps_tasks_num(vps_info_t) - returns the number of tasks that belong to VPS. Kirill