Hey if you are seeing this, let me tell you, this is the best video in RU-vid if you want to understand the concept of virtual memory, and others in simple and sweet. Perfect! ❤ Edit: Coming back after long time. Writing a blog, and really needed an low level and mostly complete explanation of virtual memory. Also, following windows internals part-1 book. This video is still gold.
Fantastic video. I'm taking a OS course at university and we have a virtual memory assignment. The hand out documents left me feeling confused and a bit lost, but then this 20-minute video made all concepts clear as day. Thank you for putting effort into making these videoes, you earned a new subscriber!
Start with the problem to understand the solution !!!!! Again and again I’ve seen explanation that detail the concepts without starting with the why. If you don’t understand the problem you’ll never truly get the solution. If you can’t put your finger on the problem… that’s the reason you’re having a hard time understanding. Don’t try to skip this step. Excellent job! Amazing video.
Thanks a lot for taking the time to comment. It means a lot to hear from people that it was worth it! Exactly. I always like to start with the problem first. It makes everything much easier
There's a quite good reason 4 KB is used as a standard page size. In most disk partitioning software the minimum data you can read/write to is 4KB, so it can move it in one swoop
Thanks. I didn’t know that. Do you have any material or references that provide motivation for 4KB page size? I read some articles that suggest it was chosen empirically long time ago, but I’d like to learn more about it.
This is simply untrue if you grew up during the 80’s or 90’s (or, shoot, even later). Research something called a “filesystem”. Also while you’re at it, check out an article on “Solid State Drives” or “Flash Memory” or “NVRAM” if you’re wondering why 4K is the block size. 😂😂😂
Found your channel from RU-vid recommendation. Nice work. Dude you have a huge overlap of interests as me. I was a math major and now a SW engineer for over 10 yrs, play chess, plays basketball, plays games (not sure what game you play but I mostly play an old game called StarCraft 2). I recently started to play soccer as well.
@@TechWithNikola nice! I always start the game with a cannon rush. Currently stuck in M2 for two years because of my mediocre apm. Considering how much time I spend on the game, I probably need a real StarCraft coach to break my current bottleneck. My two most watched genre of videos on RU-vid are C++ stuff and StarCraft 2 games. Somehow they just feel comforting. I also feel that StarCraft 2 is like C++ and StarCraft 1 is like C programming. In SC 1 everything is so manual.
@@ShaunYChengvery cool. I got stuck with sc2 when I had to keep up with all the build changes between seasons. I haven’t player in 5-6 years. I watch Rust videos lately, but I’ve used C++ the most throughout mu career :-)
This might be the best content I have found on RU-vid this year. You explained these concepts in ways my teachers couldn’t, and you did it for free too ! You have my respect , and subscription haha !
I had a course back when i was in engineering school, the professor did a horrible job explaining memory and virtual memory, I ended up hating the class and i never really understood how it worked. until this day when I watched your video, you did an excellent job, I wish youtube had something like this before. Fast forward today, I work as a sysadmin/infra engineer and i really didn't have an idea how virtual memory works, again until I watched your video, thank you for the effort you put here, I am sure many will watch it and gain valuable informations.
Good explanation and yes 4kb is the optimal size to move , its similar like why the size of a page node of a BTree in a database is of 1024 because its optimal for I/O. But I also would like to see the explanation of exactly what does MMU do here.
I need this resource for my OS assignment about virtual memory this week. So glad I find this video. This helps me understand the concept of virtual memory in 20 mins more than I have ever understand from the 20 chapters we have been task to read for 4 weeks now. LOL. Thank you for this.
I don’t know to laugh, cry or to be mad. I had heard about the book What Makes it Page in this subject written by an unknown software engineer from Italy. Due to one of the cybersecurity researchers’ recommendation, I always wanted to learn this book. So, about more or less 3-4 days ago, I gave it a shot. After a couple of days into it, I can assert that the text could be written more cohesively and simply; however, the journey I started is kind of amazing. The harder it gets, the slower you get reading the text, the more enjoyable it becomes. I’m writing this not to say only that but about a dumb-looking guy who were reading with me. We spent HOURS to learn a chapter and now when I looked at him found out that he didn’t learn a piece of shirt!
Thank you for this amazing video! It's truly refreshing to encounter such well-scripted and nicely illustrated content. It makes really enjoyable trying to learn such complex concepts.
Finally ... a proper explanation! I say this because countless self-made experts get it wrong. You see, Microsoft seems to have invented the misuse of the term "virtual memory" around the time of Windows 95. They used the term VM to describe what is really demand paging. Microsoft publications at the time did NOT make this mistake. (See Jeff Richter's excellent book describing the internals of Windows NT, published at the time.) But in the settings UI ... I guess "virtual memory" sounded more appealing to Microsoft than "demand paging". So they misused the term ... and misled generations of self-made CS people who subsequently grew up unaware of the misuse. They often claim that VM size can be adjusted. (It cannot be.) They believe that the disk swap/paging space is virtual memory. (It is not.) You see, virtual memory was created as a MAPPING PROCEDURE that solved the long-standing problem of mapping a program binary into the run-time address space of a computer. It was preceded by address space paging (remember the early 80x86 paging registers?). This was present in minicomputers as far back as the late 1960s. Paged memory was, in turn, preceded by run-time relocation ... a tedious run-time editing of a binary to "patch" all of the code addresses and data addresses within a program binary before execution could begin. VM is superior to both of those methods. Meanwhile some systems implemented something called swapping ... a predecessor of demand paging. When swapping, a program's ENTIRE memory consumption is swapped to disk to make way for another program. This mechanism allows the system to get around memory size limitations ... but it performs a lot of disk swapping! Demand paging goes one better by swapping only small blocks of memory. And even better, it loads only portions of a program when needed. No need to load an entire program when most of that program code won't be executed any time soon. It's all quite efficient. Virtual memory is not demand paging, and demand paging is not virtual memory. And you don't have to use VM with demand paging. And you don't have to use demand paging with VM. But the two appeared at a similar time in computing history ... and they work hand in hand to improve performance. So you always see both of them together. This video correctly presents a unified view of demand paged/virtual memory. Nice work!
Thanks a lot for taking to time to write such a good comment. I agree, and I’m also very happy to hear that this video met your expectations. Apologies for the late reply.
Wow, I was really surprised! I was just relaxing on RU-vid to fall asleep and came across your video. I thought it might be trash, but it turned out to be very good with excellent detail and explanation. Great job! Best video on youtube so fare 🎉🎉🎉
Im just sitting here fascinated...and it makes sense.. knowing just the basics... nice work...a dumb thing to say but this is relaxing...straight to the point ..ask a question ...then answer it... terrific
Thanks! You explained this better than any professor did when I was still in university. Much appreciated, will be sending this video to people who ask me about this 😅
Everything was nice thanks for your effort.But in multi paging,the first page table contains 1024 entries which maps to 1024 second page tables ,The address range for 1024 entries is 0x000 to 0x3FF
Starting off with the “bad old days” only being 4GB definitely lets me know I’m old! Just like running out of 32bit address space “must” have been back in the 1950s or something 😂
Great video ! I am preparing for my master degree and found this gold in RU-vid. I believe I can ace my upcoming OS class. I have liked your video and subscribed to your channel. Thanks a lot for the video. Greatly appreciate it.
Thanks a lot for taking the time to comment, as well as like and sub. It means a lot to me. I’m glad that the video was helpful. Good luck with acing your classes!
What about the problems virtual memory creates ? 1) memory non locality (slower bandwidth and sequential reads) 2) higher power draw - used memory is scattered all over the physical space, thus chips cannot be properly turned off when not in use. 3) translation overhead - mainly when entries are not in local translation cache and have to be fetched from main memory
Thank you for providing such valuable content. The examples you shared have greatly enhanced my understanding of the working principles of virtual memory.
Thanks. I’ll try to elaborate. There are 2^32 addresses. Each address references one byte of memory, which is 4GB in total. Now, a CPU works with so called words. 32-bit CPU works with 4-byte long words. How many 4-byte words are there in 4GB RAM? We can divide 2^32 bytes (4GB) by 4, which gives us 2^30 words. Hopefully this makes more sense. Let me know if it’s still unclear.
Great video. But I would like an explanation regarding the mapping of the physical translated hex value into binary - the hex to binary conversion doesn’t seem correct, even assuming a left or right 0 padding to fill in the extra 17th and 18th bit. Could you explain this please, thanks
This is a very good, concise and clear explanation, please keep the work's up, I really enjoyed it : ) PS: can you make a video about how compression algorithms work?
Glad to hear that, and you thank you for taking the time to comment. :-) Yeah, some compression algorithms are in my queue, but it will take a while before I get some free time to make them. Stay tuned!
I've written some 6502 assembler for the BBC Master, where the most complicated it got was having to write to a memory-mapped hardware register to switch banks of RAM so that you can access 128Kb with a 16bit address bus. It's a bit mind-boggling to think about all this indirection that goes on in modern memory systems. All this back and forth would bring 8bit systems to their knees!
@0:54 and before that there were 16 bit CPUs that could only address which was only 64 Kilobytes. In the early days it was more around the problem with memory collisions rather then accessing something that is out of range. In the 1960s you wouldn't find the kind of problem you're talking about because the processing power was too expensive to have that kind of problem. Paper Tape and Punch Cards don't have the same problems with accessing memory out of range.
great video. is it posible that there is a mistake in 11:39 when the animation copies the offset bits from the virtual adress to the physical adress? they arent the same first 12 bits
Great video. So you mention that physical address is the "memory RAM". You also mention the "page tables" are store in the "memory RAM" and how there are difference level of page tables and some can be store in disk. Is virtual memory also store in the "memory RAM"?. I know I have to rewatch this video and keep studying to fully understand and that I have gaps in my knowledge. So in a high level the OS has to do a mapping between virtual memory and page tables. And then between page tables and physical address? Thanks.
Hi, apologies for the late response. So virtual memory on its own doesn’t exist really. It’s just a number, for example from 0 to 2^32-1. As such, it is not stored anywhere. It only becomes interesting when we talk about translating that number to its physical counterpart. This translation is stored in page tables, and page tables are stored in RAM. It you rewatch the video you will see the exact details on how the translation works, but in a nutshell the first part of the address is remapped via page tables, and the last 10 bits are copied (called an offset). The mapping is actually happening in the MMU (memory management unit) which you can think of as a small chip on the CPU. You are right that OS plays an important role, and specifically, OS programs the memory management unit and specifies how to do the mapping. Does that make sense?
Hi, which one are you referring to exactly? I have used a combination of powerpoint, keynote, Manim (python library) to make all these animations. Hope that helps!
Hey, thanks for the suggestion. This is one of the topics in my queue, but since I do this as a hobby I don’t get much free time to work on videos. I will be working on this but cannot promise that it will be soon
This was great. I'm a bit lost (11:09 in) how virtual has 12 to 31 bits left and we somehow fit this in physical address that is 12 to 29. So we are missing 2 bits. What is happening with the last two bits. What did we do with it or are they ignored and we hit a limit of virtual because the size of the physical
CPU/MMU doesn't do any kind of math to figure out physical address (so we're not cramming 20 bits in 18 somehow), it just does a look up in /page mapping table/ and gets one of: 1) **completely arbitrary** physical address that's points to start of that page 2) some special result to indicate "sorry, it was swapped to the disk", explained right after at 11:54 3) (?) some special result to indicate that page was never allocated by the program in the first place So there's no reason why physical address couldn't be shorter than virtual. If program uses all addressable virtual memory, then most pages in mapping table would contain 2nd case of "it's on disk" and OS would juggle them around as needed transparently to the program.