A virtual address space maps (addresses) in virtual memory. Typically one uses "virtual memory" when discussing the general concept and "virtual address space" for the concrete instance of a virtual memory.
(Virtual memory may be either relatively fast but expensive physical memory/primary storage [with a simple translation of virtual address to physical address and typically byte-granularity of access] or relatively slow but less expensive secondary storage [which typically involves software "translation", I/O processing, and page-granular access].)
In commonly used OSes, each process (but not necessarily each thread) is given a separate virtual address space, giving each process the illusion that it owns the entire machine's (virtual) memory capacity as if it was running on the computer by itself. Such OSes typically reserve a portion of the virtual address space (usually half) for OS use, in a sense providing the OS with its own address space. (Some earlier ISAs, e.g., Clipper and m88k, provided a separate address space for the OS.) This dedicated OS address range can typically share page tables across multiple processes (and TLB entries by using a global indicator bit). (For x86's hierarchical page tables, the top node cannot be shared since [ordinarily] half of its entries are process-specific. ARM uses separate global and per-process/ASID page table base pointers with indication of how much of the total address range is global.)
(One could consider Address Space IDentifiers as extensions of the virtual address. Segments in Power and Regions in Itanium provide address space extension similar to ASIDs, but apply separate extensions to large sections of the initial untranslated address [e.g., Power uses 256 MiB segments and Itanium provides 8 regions within the 64-bit initial address]. Power actually calls the address types effective [the address computed by the memory access instruction], virtual [the address after the segment translation], and real [i.e., physical].)
On the other hand, a Single Address Space OS shares the entire virtual address space among multiple processes (protection domains). This allows conceptually simple and potentially low overhead communication among processes very much like memory communication among threads within a single process in a more conventional OS. Obviously, in a SASOS a process is not free to use whatever memory address it wants for whatever purpose it wishes; the OS must prevent different processes from using the same address for different storage. This breaks the illusion that the process "owns" the entire machine.
Every virtual address with a valid page table entry maps to a physical address. If the page table entry is invalid, the address does not map directly to a physical address (it may be in secondary storage [e.g., disk] or may not yet be allocated by the process).
(Even the above has simplifications and missing concepts.)