In simple words you can define cloud as large set of servers interconnected with each other via Network link.
Virtual machine refers to the software implementation of computer that runs its own operating system and applications as if it is a physical machine (PM). Virtualization layer allows multiple workloads to efficiently run on a single server.
Cloud Service provisioning can be described in four steps.
Step 1) Cloud provides Graphical User Interface to the user and user can request for task via Internet. User request will be given to dispatcher. Dispatcher is sometimes referred as service broker.
Step 2) Service broker looks into repository, a service directory having details of cloud service provider. Dispatcher then assign takes to appropriate Cloud server.
Step 3) The task will be executed by VMs (Virtual Machines). Single Cloud server (PM) may have more than one virtual machine to provide multi tenant services to the cloud users. The Virtual Machine uses physical resource of the correspondent cloud server.
In case if virtual machine cannot handle more requests or it is out of power or it has been failed in this situation the service request will be transferred to co-related VMs.
Step 4) If co-related VMs are busy (means resources not available) then this request will be forwarded to other cloud services such transfer of user service request is known as Migration.
So, dispatcher allocates PM having multiple VM and resource allocation algorithm being used in that particular PM decides resource allocation.
VM allocation typically refers to allocation of VMs to physical hosts, which usually takes in consideration CPU, network and storage requirements. However, in a cloud environment you have more than just VMs that need to be allocated - for example, you may want to create guaranteed network connections (e.g. flows), so these too must be allocated. Resource allocation is also much vague than VM allocation and is comprised of multiple allocation processes for different types of resources.
I would rather rephrase your term "VM Allocation" as VM Placement.
VM Placement : is a typical problem and task in cloud environments. Once a VM has been admitted into the cloud, the objective of VM placement is to find the best physical server/machine (PM) to run the VM. You can interpret that as allocating a VM to a host. There are many factors to consider for an optimal placement and that is beyond the scope of this question.
On the other hand, Resource Allocation is a generic term in administration of server systems and prominently in Cloud environment where a limited set of resources is shared by multiple applications (VMs). The resource sharing is transparent in that each VM thinks it is the only one running on a node. Resource allocation therefore has to do with how to efficiently share the limited resources (CPU,MEM,DISK,NET) between all VM on the host in such a way that the service objective of each VM is met while ensuring optimal resource utillization of the available PMs to reduce costs (energy for example). This leads to an optimization problems in many cases.
See the following references for more explanations:
What is the difference between vm allocation and resource allocation in cloud computing?
VM allocation is the spinning off / provision of a VM on a physical host in which the VM can comes with certain predefined CPU / vCPU, memory, storage, VLAN, IP address etc. VM allocation can be done as part of virtualization initiative or part of cloud initiative.
Resource allocation in cloud computing which is more general can include the following:
Allocate additional private cloud's resources (CPU, memory, storage, network, VFW, VLB etc) to a VM (vertical scale-up)
Allocate additional private cloud's VM in which VM is considered a resource (horizontal scale-out)
Allocate additional resources from external public cloud / IaaS as part of bursting of workload requirement from existing private cloud.
Provisioning of resources which can go beyond IaaS hardware resources e.g. PaaS, SaaS, DBaaS etc.
Note: resource allocation in cloud computing usually automated by its orchestrator for faster turnaround time & minimum human error.