So the next thing, we will dig a little bit deeper into memory virtualization. What's going on here? Well, if you think about every operating system, every operating system supports virtual memory for the processes that are running on top of the operating system. And there is physical memory that is backing up the virtual memory that is assumed by each of the processes. Now this physical memory that is assumed by each of these operating systems is now an illusion. Virtual memory is already an illusion from the point of view of the processes, and now the physical memory is also an illusion because it is not really the physical memory that they have. Because usually, when you think about an operating system, it thinks that physical memory goes from some small number 0 to some maximum physical capacity that you have. That's how the operating system is written, right? But on the other hand, you're sharing the actual memory that's available in the system through the hypervisor for multiple operating systems that are executing on top of it. And that's why, in the virtualization world, we use the word machine memory to distinguish what exactly is real. Physical memory is not real anymore in the in the virtualization world. So, for instance, this Windows operating system may have a certain portion of the machine memory allocated to serve as its physical memory. And, similarly, this Linux may have a certain portion of the machine memory allocated to serve as its physical memory. Now, one of the things that comes about is the fact that machine memory is contiguous. Physical memory is no longer contiguous. But the operating system may still want to have an illusion of the physical memory being contiguous. And there are technologies like shadow page tables, that go in between the real page tables and the page table that maps the physical memory assumed by the operating system to the machine memory. So we'll not get into that level of detail but, if you're interested, I could get into that or point you to references for that. But, at this point, what I want you to get is the fact that you've got a bunch of machine memory that is being divvied up among the operating systems that want to run on it. And so, typically, what happens in a data center is when you spin up a VM, you say I want so much machine memory. And that gets allocated to you, and then you can use it any which way you want inside that operating system. So that's that's one level of detail. The next thing that happens is that memory pressure is something that we've talked about that. That memory pressure is something that happened as a level of an individual process. And when you have that memory pressure, what you're doing is you're allocating more memory for a process. Now, an operating system may incur memory pressure because there are more processes running at any point of time. So it wants more physical memory, so that it can deal with the working set of the processes that are currently on it. And, therefore, if this guy needs additional memory, he's going to go to the hypervisor and say, well, I'm willing to pay you more. [LAUGH] Give me some more machine memory so that I can increase the working set. And so, when that happens, what the hypervisor is going to do is if it has machine memory that's available, it can give it to the requesting VM. But, on the other hand, it is also possible that hypervisor's bank is empty. Because remember that memory is a very precious resource, so you want to use it to the fullest extent. So it may have divvied it up among all the VMs that are currently running on top of the hypervisor. And if that happens, then what it could do is quietly steal some memory from one of the VMs and give it to the requesting VM. That's one possibility, and this may not be the the best way to do it. Because suddenly if this guy, if he has got some SLAs associated with the resources that have been allocated to it, then this guy is not going to be happy with that. So there is a more structured way of managing it, and we'll talk about that in a minute.