The mechanics of VIRTUAL MEMORY //Source Dive// 005

  Рет қаралды 27,950

Low Byte Productions

Low Byte Productions

Күн бұрын

Пікірлер: 92
@aalsteinnhjorleifsson2941
@aalsteinnhjorleifsson2941 Жыл бұрын
I think you have a mistake when talking about the walk function when you say the first entry of the newly allocated table is marked valid. pte is still pointing to an entry in the previous level page table which is marked valid and pointed to the newly allocated page with the line: *pte = PA2PTE(pagetable) | PTE_V;
@rfgrooteman
@rfgrooteman Жыл бұрын
Yes, I thought the same thing.
@LowByteProductions
@LowByteProductions Жыл бұрын
Yes you're right!
@lewa_j
@lewa_j 8 ай бұрын
This series is awesome. I really hope for continuation
@tomtoups
@tomtoups 12 күн бұрын
I can't believe how you're able to take a topic that I thought would break my brain with complexity and make it so easy to comprehend. I can watch this casually without having to hyperfocus and still understand this.
@paritoshmishra0891
@paritoshmishra0891 7 ай бұрын
Somehow the youtube algorithm landed me on this goldmine. great job!
@TheodorMoroianu
@TheodorMoroianu 7 ай бұрын
Best *nix series on youtube by far!! I really hope there will be a continuation!
@c2vi_dev
@c2vi_dev 6 ай бұрын
plz continue this series!!! It was an excellent learning resource to get into kernel inner workings so far and I think for me most of the things clicket.
@askinc102
@askinc102 3 ай бұрын
Great Work. Please continue the series🙏🙏
@chairjacker
@chairjacker 3 күн бұрын
i bought a few books and the mathematics really go over my head, but this video really helps explain to me the errors i have been experiencing while configuring my linux machine, and in a way that works for how I like to view new concepts.
@markuscwatson
@markuscwatson 4 ай бұрын
I am currently studying xv6 (there is a book which is REALLY great). This series is a great compliment. Please continue it!!!!!!!!!
@Sovereign589
@Sovereign589 4 ай бұрын
I loved the series so far and hope we will get another episode in the future :)! Thank you for your work
@miroslavstevic2036
@miroslavstevic2036 Жыл бұрын
Excellent. Simple code base, well explained. Don't keep us waiting for too long ...
@salilphadnis4147
@salilphadnis4147 5 ай бұрын
Incredibly useful series of videos. Can't thank you enough. Hopefully you will get a chance to continue this series. Waiting eagerly.
@louiehoosk
@louiehoosk 9 ай бұрын
I'm gutted to have reached the end of the playlist so far, but I bet these videos are tough to make for you, considering the amount of information you're condensing into sensibly long videos. Thank you so much for that, I learned incredibly much!
@PrzemysławSkałecki
@PrzemysławSkałecki Жыл бұрын
I have been waiting impatiently for another episode of "Source Dive" since the very end of the previous one ;-)
@arturmyst5692
@arturmyst5692 4 ай бұрын
i keep my fingers crossed, that you continue the series, i am astonished by the way, that you do the usually boring code readings, i am not a newbie but to study the code is very intimidating, if there is no guide who knows which parts of code are important and of a secordary importance. great job
@MatthieuHonel
@MatthieuHonel Жыл бұрын
Such a nice series, Francis. Really well explained, at least from the point of view of someone who has little to no experience in kernel stuffs. Can't wait for the next episode!
@Jester01
@Jester01 Жыл бұрын
22:48 Having paging enabled for the kernel as well allows for the protections that you show later, such as read-only kernel code and stack guard pages. Incidentally, they should have mapped the .rodata read-only at 57:20. Interesting video, thank you!
@heepajunk
@heepajunk Жыл бұрын
Extremely valuable walkthrough series.
@umurgedik3440
@umurgedik3440 11 ай бұрын
Amazing content. When you explained like this it is very understandable. I hope you continue on xv6 source dive.
@RomanShchekin
@RomanShchekin 7 ай бұрын
This is simply amazing! Best OS explaining video I've seen so far. Thank you so much and please keep it up!
@fhools
@fhools Жыл бұрын
this is awesome. i love these videos that dig into well written open source code.
@rfgrooteman
@rfgrooteman Жыл бұрын
Great series. Thank you very much. Enjoying every second of it.
@gillesvismara5228
@gillesvismara5228 11 ай бұрын
Cant wait for the next episode
@KateSharkun
@KateSharkun Жыл бұрын
Great video, as always. Perfectly clear explanation just as it should be. p.s. its nice to watch how your hair grows with each video
@XCemaXX
@XCemaXX Ай бұрын
Thank you so much for this amazing series of videos diving into the OS code! I really enjoyed the series. I'm eagerly awaiting the continuation about processes and trampoline, as well as the scheduler. Please keep making these videos; you're doing a fantastic job! By the way, do you know of any similar deep dives into the code for other projects? Any articles, books, blogs, or videos you could recommend?
@james88372
@james88372 Жыл бұрын
Loving this series. Keep up the awesome work!
@stefans2143
@stefans2143 Жыл бұрын
This is great education and great entertainment all in one! Thank you!
@epickittylover489
@epickittylover489 Жыл бұрын
Loving this series! :)
@taotuo
@taotuo 8 ай бұрын
please keep updating!!!!
@sparshpriyadarshi
@sparshpriyadarshi 9 ай бұрын
Appreciate this series, was very useful. Thank you.
@user-be8ud2qd2d
@user-be8ud2qd2d Жыл бұрын
Thanks for the high quality content!
@daphne.fowler
@daphne.fowler Жыл бұрын
Totally fascinating. Please continue.
@wiseskeshom4673
@wiseskeshom4673 Жыл бұрын
Thank you so much for another great video in this series.
@wlad_zh
@wlad_zh Жыл бұрын
I completely like these series, so sad that I could not made such series myself before. Now you are a "pioneer" ?) Really lovely stuff
@twistedsim
@twistedsim Ай бұрын
oh no, I need the next episode! :D
@tanchienhao
@tanchienhao Жыл бұрын
Keep this series coming!! Very good videos
@lewiswardita9902
@lewiswardita9902 10 ай бұрын
Great series! When's the next part?
@DouwedeJong
@DouwedeJong Жыл бұрын
Thanks for making this video. I learned a lot.
@LowByteProductions
@LowByteProductions Жыл бұрын
Graag gedaan en goed om te horen!
@konstantinkovalchuk5424
@konstantinkovalchuk5424 Жыл бұрын
Great series, pls release more pieces
@simonheeg6910
@simonheeg6910 Жыл бұрын
Really love your series and I am looking forward for each new episode. I really like that you always follow functions to the end. However, I had the impression that this episode was a little bit quicker and you „rushed“ some parts, for example the KSTACK macro.
@LowByteProductions
@LowByteProductions Жыл бұрын
Thank you. Yes it's quite a big topic and hard to fit into a hour!
@patrickantonio6306
@patrickantonio6306 Жыл бұрын
such a great series
@VaibhavBhandarigplus
@VaibhavBhandarigplus 7 ай бұрын
when are you doing #6? great content
@etc_kula
@etc_kula Жыл бұрын
Point of clarification: on the page table diagram, should all of the “PTE 512” be “PTE 511”? Since there are 512 entries but we’re going 0, 1, 2 … 510, 511.
@LowByteProductions
@LowByteProductions Жыл бұрын
You're correct!
@Jules-ki9nx
@Jules-ki9nx 11 ай бұрын
When are you making more videos?! I love this series ?
@aalawneh91
@aalawneh91 4 ай бұрын
This is awesome, can you finish the series
@markuswerner1166
@markuswerner1166 Жыл бұрын
Thanks again :-) Keep going.
@kaitingchang7765
@kaitingchang7765 11 ай бұрын
Can you explain a little bit about how you set up gdbserver attach to vscode? Or there is video I missed
@TimDrogin
@TimDrogin 8 ай бұрын
I might be wrong, but 55 bits for addressing is 2^55 or 4 petabytes of addresses? 256 petabytes of potential ram is indeed a really big number!
@dimajaykobson7506
@dimajaykobson7506 11 ай бұрын
Thank you!
@Fleshy
@Fleshy Жыл бұрын
In your graphic, wouldn't the last page table entries be 511 since you start at 0?
@LowByteProductions
@LowByteProductions Жыл бұрын
You're right!
@AverageJoeHacks
@AverageJoeHacks Жыл бұрын
I understand virtual memory right now.
@markuswerner1166
@markuswerner1166 Жыл бұрын
@Low Byte Productions, Never did debugging with VS Code. Actually never used gdb before. What gdb extension are you using ? I use the risc-v toolchain directly on my macOS. And make qemo-gdb is working.
@LowByteProductions
@LowByteProductions Жыл бұрын
I'm using "GDB Beyond" & "Native Debug"
@ashrasmun1
@ashrasmun1 2 ай бұрын
I feel even more confused... so every time I reference a pointer in a code, I go through all that page table jumping? How do I get contiguous memory access then, if in fact I get access to contiguous part of virtual memory? I need to spend more time on this topic...
@amadouthiernobah6071
@amadouthiernobah6071 11 ай бұрын
Hey I am trying to debug with gdb, any hint of how to configure the launch.Json ? thanks
@markuswerner1166
@markuswerner1166 Жыл бұрын
I did not understand vm right now. I will need the next days to play a bit around.
@TheOneMaddin
@TheOneMaddin Жыл бұрын
Is there a reason these page table entries are not implemented as a struct using bitfield? I have the feeling this would make a lot of this much easier to grasp compared to dealing with all these magic bitshifts and mask operations. Is there the worry that the compiler will do some shenanigans in the background to the struct's memory layout? I thought this can be turned off?!
@LowByteProductions
@LowByteProductions Жыл бұрын
I can't say for sure, but I would guess that bitfields having implementation defined behaviour would be the main reason. Even if you can control the semantics with compiler flags, that is essentially out-of-band with respect to the code. Using shifts and masks means that the implementation will work regardless of compiler. As a side note: I don't personally think shifts/masks as magic. When I first encountered them, it was definitely confusing, but it actually become intuitive and natural at a certain point. I think that's the case with a lot of things.
@TJYgdb
@TJYgdb 5 ай бұрын
Is there any documentation for this source code
@MrJegerjeg
@MrJegerjeg Жыл бұрын
I felt so adventurous that I tried to cross-compile the kernel on M1 Mac with nix and I failed miserably :D
@Bl00drav3nz
@Bl00drav3nz Жыл бұрын
When we are done setting the satp to turn on address translation and return to our main() (or more likely, just inc the PC), does this only work, because we have mapped the same physical address to the virtual address for the kernel? The PC will still point to the old address, if I understand it correctly.
@LowByteProductions
@LowByteProductions Жыл бұрын
Exactly - it works because we built a 1-to-1 mapping for the physical address space.
@JoseJimeniz
@JoseJimeniz Жыл бұрын
Virtual memory was much easier to understand when your Windows PC had 4 MB of RAM, while an application can successfully allocate and use 2 GB MB of memory. Memory is your 2 GB virtual address space. RAM is one thing that can by used to hold your memory.
@rnishu_7218
@rnishu_7218 8 ай бұрын
Please do one on OpenSSL!
@Natalia-zt1dq
@Natalia-zt1dq Жыл бұрын
I don't understand something. If there is 3 levels page table and each level hold 512 entries and each entry takes 8 bytes (64 bits) and function "walk" initialize them all, that means only pagetable needs 512*512*512*8 [B] == 1GB of the memory. Something's not right here (probably i didn't understand drawio diagram correctly).
@fastandfemme
@fastandfemme Жыл бұрын
That seems mostly correct, although it only considers the third level of page tables. In total, the page tables use (1 + 512 + 512*512)*(4KiB), which is about 1GiB + 2MiB. Remember that this only covers the memory used for virtual address translation. The final layer of page tables has 512*512*512 entries, which all point to 4KiB pages that hold the memory the process sees (512 GiB total).
@trevinbeattie4888
@trevinbeattie4888 Жыл бұрын
It would need that much page table memory _if all_ of the virtual memory space were to be initialized, but that’s never the case. Programs start out with a pre-determined amount of memory needed to load the code and pre-initialized data, and at run time request additional memory on an as-needed basis, so the kernel only needs to initialize the page table for that smaller range of memory and then add pages as needed. Entries in the 1st-level table don’t need to point to a 2nd-level table if there is no memory allocated in the range the entry would point to, and likewise for the 2nd-level entries.
@miroslavstevic2036
@miroslavstevic2036 Жыл бұрын
You don't need to use full table for everything. For example, you can use only 3 tables to map 2 meg process. You'll need ~1 gig table only to map something huge that use 512 gig of memory, which is only ~0.2%
@davidhand9721
@davidhand9721 11 ай бұрын
Am I understanding correctly that these page tables are in main memory? Even if it lives de facto in the cache, that seems like an enormous overhead for literally every instruction. This can't be right, it can't be tying up the busses like that.
@LowByteProductions
@LowByteProductions 11 ай бұрын
It's absolutely true. But what you're saying also true - it is an enormous overhead. This is why a structure called the TLB exists: the translation lookaside buffer. It's a cache that operates as a kind of hash table. Hardware accessing memory will first check the TLB, and otherwise walk the page table (writing the translated address to the TLB afterwards).
@davidhand9721
@davidhand9721 11 ай бұрын
@@LowByteProductions I'm sort of disgusted, but also kind of impressed that it seems to still be pretty fast. What is the actual cycle count for a TLB hit in the cache, then?
@enirya
@enirya Жыл бұрын
So in xv6 the kernel's read-only data is mapped as writeable? >_> That's kinda funny
@LowByteProductions
@LowByteProductions Жыл бұрын
It is indeed! I guess it's for simplicitys sake more than anything else.
@stefans2143
@stefans2143 Жыл бұрын
I watched this three times now. What I dont get is: Why do we need that 3-level structure of tables? I mean, why cant we have a linear table with 512*512*512 entries each entry containing a mapping of virtual page to physical page?
@LowByteProductions
@LowByteProductions Жыл бұрын
The thing about page tables is that they're sparse, i.e. you actually don't define most of the table. You only need to setup entries for the memory you map for each process. What you're suggesting would be simpler in a way, but also extremely costly. 512*512*512 entries, with 8 bytes per entry is 1GiB - and that's per process! Not to mention the kernels page table.
@krzysztof-ws9og
@krzysztof-ws9og Жыл бұрын
Nice series I think that you are explaining stuff that are not directly related to kernel stuff a bit too much, so I end up skipping large parts of the video, like explaining the algorithm of printf going through each iteration of the loop, or explaining how linked list to handle free memory works I just feel like that is just a normal C programming not very kernel specific However remember that im just a random person that might disagree with you on something, so keep up the great work 😉
@caiomazzaferroadami
@caiomazzaferroadami 26 күн бұрын
For anybody interested in just the concept of virtual memory, there's a video from LaurieWired which is just amazing: kzbin.info/www/bejne/rJSaaqaAbruCp80si=N1wGIHumQmcRwxcM
@hzrgf
@hzrgf Жыл бұрын
Your explanations are brilliant! I found a playlist of videos that cover the general concept of virtual memory and, for example, the TLB. As someone who has not studied this before, they really helped me gain a solid understanding of the topic: kzbin.info/aero/PLiwt1iVUib9s2Uo5BeYmwkDFUh70fJPxX
@segus_faultise
@segus_faultise Жыл бұрын
Chad
@Lelende
@Lelende Жыл бұрын
Great content, but difficult to digest. Maybe don't go so in_depth And just get the principle across. People who really want applicable knowledge will do further research anyway
@LowByteProductions
@LowByteProductions Жыл бұрын
That's the thing, though: I'm making content for people who want to go further. This whole channel is about going in depth because so few others actually do.
@Lelende
@Lelende Жыл бұрын
@@LowByteProductions I see. I understand. Maybe it maybe be better to have a fairly concise description of everything you plan/explanation to do in the beginning and also go in-depth later to gethr best of both worlds?
@askinc102
@askinc102 3 ай бұрын
Great work. Please continue the series🙏🙏
What is a spinlock? //Source Dive// 002
54:26
Low Byte Productions
Рет қаралды 48 М.
But, what is Virtual Memory?
20:11
Tech With Nikola
Рет қаралды 331 М.
Sigma girl VS Sigma Error girl 2  #shorts #sigma
0:27
Jin and Hattie
Рет қаралды 124 МЛН
She wanted to set me up #shorts by Tsuriki Show
0:56
Tsuriki Show
Рет қаралды 8 МЛН
Getting up in another processes memory
46:54
Low Byte Productions
Рет қаралды 15 М.
How a Clever 1960s Memory Trick Changed Computing
20:05
LaurieWired
Рет қаралды 454 М.
How does KERNEL memory allocation work? //Source Dive// 004
44:42
Low Byte Productions
Рет қаралды 52 М.
How does an OS boot? //Source Dive// 001
50:22
Low Byte Productions
Рет қаралды 428 М.
Andrew Kelley   Practical Data Oriented Design (DoD)
46:40
ChimiChanga
Рет қаралды 148 М.
The Magic of RISC-V Vector Processing
16:56
LaurieWired
Рет қаралды 346 М.
Virtual Console and printf() //Source Dive// 003
1:10:57
Low Byte Productions
Рет қаралды 68 М.
The PC industry is changing: RISC-V goes mainstream
15:20
Jeff Geerling
Рет қаралды 348 М.
Sigma girl VS Sigma Error girl 2  #shorts #sigma
0:27
Jin and Hattie
Рет қаралды 124 МЛН