This video was sponsored by Brilliant. To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/.... You’ll also get 20% off an annual premium subscription.
@@CoreDumpped but not necessarily? A program can run multiple processes that do different tasks in parallel. Those subprocesses are not really instances of the program, but a part of the program.
@vasilecaspirovschi3925 you right, its called threads. Each thread have own stack section in memory but all threads can work with heap memory or data section at same time like shared resources together. For instance one thread can calculate world objects position in game, and put in heap memory tasks for another thread that read that tasks and do render game scene. And another thread can calculate all skeleton animation just in same time, and wait render is done for apply calculation and update game object instantly. And some thread can just load new objects from file in background cause you can need it soon. Of course you also need some blocking mechanism like mutex or semaphore for this threads work together correctly with same data, its a big pain for multithreaded programming 😢
I absolutely love the fact that the way you visualize and teach some of these things is EXACTLY how I taught it to people I was tutoring. The text-file example is super powerful when I'm trying to explain how "This piece of text is now in MEMORY, not in STORAGE, which will be destroyed(or considered as such) after closing the program", they just get it immediately, too relatable to a bunch of students haha.
I have worked on creating operating systems, compilers, interpreters, and translators. I still enjoy these videos, and how the concepts are presented without overloading people with the many many details and variations. I have also worked as a documentor, and have taught programming to young kids. This channel does a great job organizing the concepts into graphics and audio, while only hinting at more depth of information, which I know from personal experience is difficult to do.
Jorge… if I’m even allowed to ask you something: Please continue to explain concepts in an in-depth manner. YT is full of superficial explanations for pretty much everything out there. There’s a real lack of what I like to call “merciless” channels in the CS field. The large majority will dumb-down or dilute the exposition so the lowest common denominator in terms of viewership can be achieved. They make it look like they don’t want to strain too much of the general viewer’s capacity or else the audience will disengage. Your intention is obviously the opposite to it, and I think this is one of the main reasons your channel has grown so unbelievably fast. Keep up the good work. Have no fear to go deep. People will follow.
I think that he has hit a very good balance of being sufficiently high-level for non knowledgeable person to understand the high-level ideas and details and I don’t think the intention was to create a content that was only accessible by people who are already very familiar with how computers work. I definitely don’t think he needs to bring too much complexity. There are many UA-cam videos and materials on the Internet if you want to look into any of the topics in depth.
The thing is, algorithm and viewer attention spans make explaining things in-depth rather unprofitable on UA-cam. If you want to explain a very complex subject, you essentially have three choices: 1. Simplify: Dumb it down until the concept is easy enough for the average viewer to quickly grasp. This sacrifices a lot of detail. 2. Assume prior knowledge: Use technical terms and concepts to accurately explain the subject without explaining those terms and concepts themselves. This means only people who already have some expertise in the field will be able to follow along. 3. Build from the ground up: Explain the underlying concepts that form the foundation of the matter. This makes the explanation accurate and understandable for most people, but it also becomes quite lengthy. All in all, this channel strikes a very decent balance between all three options without making itself too esoteric. I don't think that deviating in either direction would improve the content.
Yeah, I find it a bit uneasy that this AI model is teaching me much better than what some other UA-camrs would produce. Not to say all of them are bad, but there is a bit of bias to their explanations, which bothers me the most because I simply want to learn the inners of these programs and how they work. Core Dump does a great job explaining the difficult parts with a clear understanding of its subject material.
I just discovered this channel while trying to understand how everything works under the hood, and I think I’ll be sticking around for a while. Keep up the great work - thanks!
This was a great visualization. I am currently taking a class in operating systems, and we've been talking a lot about processes and threads. So a video dedicated to threads would be interesting. A visualization of how a process can have multiple threads would be helpful.
Thanks for you video! It's really useful for me! Since I don't have an IT degree (I'm a nuclear engineer), this video helped me to understand basic concept of basic computer things. Hope you will create a video about compilers and interpretators and explain which languages have what of this. I always thought that Java is compiled language, since Java code is firstly compiled to byte code. And after it, JVM runs this code into machine one.
btw in RAM to add onto 3:18 timestamp there's apparently more segments used in a process. Text segment: the compiled logic of the program, with it's static linked libraries Data segment: also contains variables of static linked libraries | compile known variables variables that will run throughout the programs lifetime, global and static (state) variables ------> initialized vars ------> uninitialized vars HEAP: everyone knows these 2 so I won't explain them STACK: Read only variables segment: here variables like const in C get stored in, these are read only so the process is not allowed to change these. Thread-Local segment: here threads will be stored. Envirement Variables segment: here information about **argv, argc will be stored to work together with the rest. Kernel Space segment: here the kernel uses this segment to interact with the process and is only kept for the kernel. Shared Libraries segment: here dynamic libraries are stored to interact with the program. Memory Mapped segment: This is a pretty complex segment and is kinda used as a chaching system to grab huge files to work with the parts that have to be used at that exact moment, take in games for example, the level, sprites, ...
Program -> File Holding Instructions. Process -> Instructions of the program being run. This isn't hard and "a process is a program in execution" is the simplest definition which tells you exactly what a process is (though it requires you know what a program is).
I have part of my instructions on cache and part on pipeline, the parte on cache count as a process? The instructions cache count as an program or processador? When the program go to memory they become an process or are still an program? Suppose... SUPPOSE... That I create some array and put somes opções on this space and... remember, this is an supposition... and I load the address of this space onto Program counter. If this space reside on stack. Is it an process or an program?
I'm a swe in systems programming. I already know all of this. I still watch it. The way you bring across the concepts and explain everything mesmerizes me
4:31 Why can’t multiple processes point to the same .txt file? Doesn’t having a copy of the .txt file for each process sound redundant and a waste of memory?
Great way to describe interpreted languages as a program that takes text as inputs. The Python interpreter is an extremely clever C program that uses normal stack/heap operations in an intentionally inefficient way to assume the worst case in any given computational scenario to abstract it away from the Python programmer. It is such an interesting topic. Maybe you could make a video showing how PyObjects underpin dynamically sized collections, like lists and dictionaries?
Technically, both Python and JavaScript are compiled and then interpreted. Micropython even allows you to compile your Python into native machine code which is executed directly by the runtime, which is itself a blend of a real time operating system and an interpreter.
Back in the day of 6502 programming, modifying the code dynamically was a thing. Especially when indexing over data longer than 256 bytes. I miss those days
Oh, my god. It all finally clicks now. So, multiple Python exes with different text files are being used, and in some cases, the main.py or whatever data is being used. Wow, I think I understand now. Thank you!
Awaiting for the more detailed information from you ,thanks for sharing,can go little more deeper in each section and wanted to know the memory layout more what if interrupts came also.
A great vid i think could be about virtual memory, i mean the difference between virtual address space in a program and the physical memory with MMU ecc... If you want i have some materials about all of these things.
6:45 so for JS it’s sort of different on Safari, websites are actually run in child processes managed by Safari called WebContent, where the JS is executed (and these *are* separate processes, they’re child processes but they’re separate nonetheless)
This and the last video (the one about CPU instructions) felt a bit disappointing, it would be nice to see something more intricate and meaningful (like the static/dynamic ram episodes for example), here the same thing is repeated for 8 minutes and it's not even a concept that's hard to grasp. Edit: I should also lump the strings casting video with the other two I mentioned.
And Java is even more of a mixed bag, since you first compile the source code to byte code, which is basically the instruction set for the virtual machine - but the byte code can also bei jit'ed into native executable... 🤯 But I am not aware of anything that interprets the Java source code.
@@Colaholiker Idk; with recent java version they added a new jep witu implicit main, basicaly, if you have a single java file you don't need to call javac to execute it (you also don't need to put all the boilerplate that makes java hard to teach). Idk if it's interpreted OR if it knows it's a single .java file and will compile it as quick as possible and run it.
@@toinouH wow, seems like Java has become even more confusing since I've last seen it. (Long ago, in my field of work you wouldn't touch Java with a 10 ft pole)
@@Colaholiker No, because unless you're a student you will never use this feature. The rest of the language is fine now, new switch statement, records, pattern matching, virtual threads, Foreign function and memory api and vector api.
Is the TEXT section only just text or does it hold any immutable constants which is mostly text? Does the operating system optimise the memory usage by referring to the same TEXT section when running multiple processes of the same program since it is the same across them?
Ultimately it depends of the Operating System your using. The TEXT section is usually not shared between processes. But the idea of sharing executable code is quite present in Dynamic Libraries. I'll explain this further in a future episode about a compilation step called" linking."
The "text" section is an area of memory containing the compiled program, and should never be written to. Depending on the operating system, the type of CPU, and the type of memory, the text section may be implemented differently. Sometimes the text section is in protected memory that the process cannot write to. Sometimes the same program used for multiple process, will share the same physical text area memory between all the processes. Sometimes in simple devices, the text area is in memory that physically cannot be written to, such as the programs in old game cartridges, where the program stored in the cartridge also becomes the text area in the game console's memory. The text area contains compiled CPU instructions, but some instructions include constant values as part of the instruction. Some compilers, or programmers doing assembly code, may also put read-only constant data in the text area. The "text" area of a process has many variations on how it is implemented, what protections and attributes it has, and the physical hardware of the text area. It is made all the more complicated by the text area being a read-only area of CPU instructions for the process, while for the operating system, that memory is read-write data while the operating system has its own read-only text area. But to a hypervisor implementing virtual machines, the operating system's text area is the hypervisor's data area. This can be made more complicated by adding another layer, such as an emulator program that the operating system is running, that "emulates" or pretends to be a different CPU, such as emulators of old game consoles, that allow old video games to be run on MS Windows. In the bad old days of long ago computers, there was no separation of text, data, heap, and stack. Some CPUs didn't have stacks implemented in the hardware. The compiled instructions of the text were mixed with read-write data. A bug in programming while trying to write to data, such as a subscript out of bounds, could overwrite the compiled CPU instructions, and the execution of instructions could go crazy, usually resulting in a CPU halt. Now, things like that are considered very bad programming practices, and modern hardware memory protection can prevent any of the process's attempts to write to the text area. Of course, there are rare instances where the text area is purposely allowed to be overwritten, such as in Core Wars, or its newer equivalents, where different tiny programs do battle with each other, attempting to delete each other from memory. The "text" area is a concept that has many many variations in its implementation. This UA-cam channel does a good job of presenting concepts at a single level, while hinting at more details, without confusing the viewer by descending into those multiple levels of details, which should have their own videos.
Thanks, what about Threads, I think it is a flow of execution inside a given process having it own stack but shares memory with threads spawn by the parent process, right ?
Bro I am a subscriber from India can also explain what chipset are used for this things in computer like When you upload arithmetic logic unit's video can explain which chipset are cordinate for an arithmetic logic unit in a computer
Jorge, what is the difference in the capacitors in a DRAM and SSD that DRAM needs charge refilling but SSD don't ? Also if a phone or laptop dies how is it our data from SSD doesn't erase ?
SSDs uses an "jail" to keep an charge, thats mean 1 and if nothing is there means 0, works using quantum tunneling so the charge can't go out (it can but needs years to do it in a "luckly" way, its quantum phisics) but DRAM uses capacitors that discharge and are much more faster, that's why you use RAM and not SSDs as your "CPU memory"
And then what's the distinction between threads, processes, and tasks? I have a rough idea I remember from my OS class especially w.r.t. processes vs threads but whenever I try to google what a "task" is and how it relates to the other two, there's a bunch of different answers including: tasks are just instructions loaded into memory, tasks are the same as processes, processes and threads are both tasks, there are no tasks (on linux), everything is a task (on linux) etc. As far as I can tell, on linux at least, threads are treated as a special kind of process (they share an address space and are spawned by running the same program but what else?). I'm guessing this is why when I run a multithreaded program like a browser, each thread seems to gets their own PID. And then 'task' is just a generic term for this kind of 'process' that covers both threads and processes proper? Also I kinda disagree that a source code file for an interpreter isn't a program. From the perspective of the host machine (which is your point I'm guessing), sure, but it's a program for the "virtual machine" i.e. a particular implementation of the abstract machine described by the language. Ofc with most (all?) Python implementations the source code is compiled into bytecode. I haven't read the Python spec but I'm guessing these are all implementation details so I would still say a .py is a program even if there's no actual machine (virtual or otherwise) that can run it.
Java source code is compiled to an intermediate representation called Bytecode. This "Bytecode" is not machine code, the processor can not understand it, so it is the job of the JVM to interpret that Bytecode.
A program is a "blueprint". A process is an instance of a program in execution. An application is what the interpreter process is interpreting? Is a website an application? XD
This video was sponsored by Brilliant.
To try everything Brilliant has to offer-free-for a full 30 days, visit brilliant.org/.... You’ll also get 20% off an annual premium subscription.
Congratulations on 100K subscribers!
Loved the last part of the video.. interpreted languages cause problems for me
From what I have gathered, a program to a process what a class is to an object.
Good analogy. A process is like an instance of a program.
That's exactly what I though as well
@@CoreDumpped
but not necessarily? A program can run multiple processes that do different tasks in parallel.
Those subprocesses are not really instances of the program, but a part of the program.
@@joshuachan6317Sorry, aren't those separate threads? I'm still a bit confused by concurrency and parallelism
@vasilecaspirovschi3925 you right, its called threads. Each thread have own stack section in memory but all threads can work with heap memory or data section at same time like shared resources together. For instance one thread can calculate world objects position in game, and put in heap memory tasks for another thread that read that tasks and do render game scene. And another thread can calculate all skeleton animation just in same time, and wait render is done for apply calculation and update game object instantly.
And some thread can just load new objects from file in background cause you can need it soon.
Of course you also need some blocking mechanism like mutex or semaphore for this threads work together correctly with same data, its a big pain for multithreaded programming 😢
I absolutely love the fact that the way you visualize and teach some of these things is EXACTLY how I taught it to people I was tutoring. The text-file example is super powerful when I'm trying to explain how "This piece of text is now in MEMORY, not in STORAGE, which will be destroyed(or considered as such) after closing the program", they just get it immediately, too relatable to a bunch of students haha.
Dont you mean after killing the process
"A video of processes is already scheduled" Nice one... Good to see your system is operating.
You really could see the rhyme in time, the pattern in places and the fun in the pun 😂
These are the videos I have always been looking for! I don’t think I’ve ever seen such a great visualization of computing.
I have worked on creating operating systems, compilers, interpreters, and translators. I still enjoy these videos, and how the concepts are presented without overloading people with the many many details and variations. I have also worked as a documentor, and have taught programming to young kids. This channel does a great job organizing the concepts into graphics and audio, while only hinting at more depth of information, which I know from personal experience is difficult to do.
Jorge… if I’m even allowed to ask you something: Please continue to explain concepts in an in-depth manner. YT is full of superficial explanations for pretty much everything out there. There’s a real lack of what I like to call “merciless” channels in the CS field. The large majority will dumb-down or dilute the exposition so the lowest common denominator in terms of viewership can be achieved. They make it look like they don’t want to strain too much of the general viewer’s capacity or else the audience will disengage. Your intention is obviously the opposite to it, and I think this is one of the main reasons your channel has grown so unbelievably fast. Keep up the good work. Have no fear to go deep. People will follow.
I think that he has hit a very good balance of being sufficiently high-level for non knowledgeable person to understand the high-level ideas and details and I don’t think the intention was to create a content that was only accessible by people who are already very familiar with how computers work. I definitely don’t think he needs to bring too much complexity. There are many UA-cam videos and materials on the Internet if you want to look into any of the topics in depth.
The thing is, algorithm and viewer attention spans make explaining things in-depth rather unprofitable on UA-cam.
If you want to explain a very complex subject, you essentially have three choices:
1. Simplify: Dumb it down until the concept is easy enough for the average viewer to quickly grasp. This sacrifices a lot of detail.
2. Assume prior knowledge: Use technical terms and concepts to accurately explain the subject without explaining those terms and concepts themselves. This means only people who already have some expertise in the field will be able to follow along.
3. Build from the ground up: Explain the underlying concepts that form the foundation of the matter. This makes the explanation accurate and understandable for most people, but it also becomes quite lengthy.
All in all, this channel strikes a very decent balance between all three options without making itself too esoteric. I don't think that deviating in either direction would improve the content.
Yeah, I find it a bit uneasy that this AI model is teaching me much better than what some other UA-camrs would produce. Not to say all of them are bad, but there is a bit of bias to their explanations, which bothers me the most because I simply want to learn the inners of these programs and how they work. Core Dump does a great job explaining the difficult parts with a clear understanding of its subject material.
I feel so lucky I found your channel. For these days, I was wondering how interpretation happens behind the scene. Lovely.
me too
mee too
Thanks!
Thank you brother! This is really good work!! Kudos to your hard work!
Another certified banger from Core Dumped
Thank you for this awesome video! This channel only produces rare gems.
Thanks for your support!
I just discovered this channel while trying to understand how everything works under the hood, and I think I’ll be sticking around for a while. Keep up the great work - thanks!
Great video! I like how Core Dumped explains the topics and encourages me to deep dive if I want to. Waiting for the detailed video on processes.
This was a great visualization. I am currently taking a class in operating systems, and we've been talking a lot about processes and threads. So a video dedicated to threads would be interesting. A visualization of how a process can have multiple threads would be helpful.
Looking forward for the compilers vid! 😍
Your content is simply just GOLD. I love it, and I've learned so much from you. Thanks you so much, and please don't quit any time soon!
I was blown away by your videos. I am so excited about the next video. Kindly provide the date next video 🙏 🙏
I look forward to your video explaining the functioning of compilers. I'm glad to have stumbled upon your channel.
Bro your channel is absolutely perfect. I am pretty sure your channel will grow up really quick.
Thanks for you video! It's really useful for me! Since I don't have an IT degree (I'm a nuclear engineer), this video helped me to understand basic concept of basic computer things.
Hope you will create a video about compilers and interpretators and explain which languages have what of this. I always thought that Java is compiled language, since Java code is firstly compiled to byte code. And after it, JVM runs this code into machine one.
btw
in RAM to add onto 3:18 timestamp
there's apparently more segments used in a process.
Text segment: the compiled logic of the program, with it's static linked libraries
Data segment: also contains variables of static linked libraries | compile known variables variables that will run throughout the programs lifetime, global and static (state) variables
------> initialized vars
------> uninitialized vars
HEAP: everyone knows these 2 so I won't explain them
STACK:
Read only variables segment: here variables like const in C get stored in, these are read only so the process is not allowed to change these.
Thread-Local segment: here threads will be stored.
Envirement Variables segment: here information about **argv, argc will be stored to work together with the rest.
Kernel Space segment: here the kernel uses this segment to interact with the process and is only kept for the kernel.
Shared Libraries segment: here dynamic libraries are stored to interact with the program.
Memory Mapped segment: This is a pretty complex segment and is kinda used as a chaching system to grab huge files to work with the parts that have to be used at that exact moment, take in games for example, the level, sprites, ...
Program -> File Holding Instructions.
Process -> Instructions of the program being run.
This isn't hard and "a process is a program in execution" is the simplest definition which tells you exactly what a process is (though it requires you know what a program is).
I have part of my instructions on cache and part on pipeline, the parte on cache count as a process?
The instructions cache count as an program or processador?
When the program go to memory they become an process or are still an program?
Suppose... SUPPOSE... That I create some array and put somes opções on this space and... remember, this is an supposition... and I load the address of this space onto Program counter. If this space reside on stack. Is it an process or an program?
@@FodaseGoogreorio-h7v nutjob
Amazing work, please keep making this content with this quality, just a great work 👍 ... waiting for next videos
Amazing. Hats off to you. Nicely explained.
I've been watching ever since the first episode came out, and heck, I ain't gonna miss any going forward, awesome content!
A program is not a process.......... the title ITSELFE IS PURE GOLD !!!!!!!!!! 10++++++ AWESOME CONTENT
George, you are amazing. I started creating my own os kernel in zig thanks to you❤
Awesome, please continue making this kind of videos
I'm a swe in systems programming. I already know all of this. I still watch it. The way you bring across the concepts and explain everything mesmerizes me
i was just watching casually but you explained such an important thing to me which I've always heard but never understood. thank you very much bro.
Thanks for the good content as always!
4:31 Why can’t multiple processes point to the same .txt file? Doesn’t having a copy of the .txt file for each process sound redundant and a waste of memory?
I really love your channel
Great way to describe interpreted languages as a program that takes text as inputs. The Python interpreter is an extremely clever C program that uses normal stack/heap operations in an intentionally inefficient way to assume the worst case in any given computational scenario to abstract it away from the Python programmer. It is such an interesting topic. Maybe you could make a video showing how PyObjects underpin dynamically sized collections, like lists and dictionaries?
This channel is a gold mine to improve understanding of computers.
Technically, both Python and JavaScript are compiled and then interpreted. Micropython even allows you to compile your Python into native machine code which is executed directly by the runtime, which is itself a blend of a real time operating system and an interpreter.
Back in the day of 6502 programming, modifying the code dynamically was a thing. Especially when indexing over data longer than 256 bytes. I miss those days
Oh, my god. It all finally clicks now. So, multiple Python exes with different text files are being used, and in some cases, the main.py or whatever data is being used. Wow, I think I understand now. Thank you!
This is one of the best IT sources out there, great job.
you're amazing man, i love this channel!
Awaiting for the more detailed information from you ,thanks for sharing,can go little more deeper in each section and wanted to know the memory layout more what if interrupts came also.
More to come!
Please make more videos. I love your content.
Your channel is very helpful 😢 ❤ I am currently making a small computer from transistors. I made a half adder today!
Amazing Video ❤❤❤. Please continue this level of quality and content
A great vid i think could be about virtual memory, i mean the difference between virtual address space in a program and the physical memory with MMU ecc... If you want i have some materials about all of these things.
Yeah, that video is also already scheduled and even being produced right now. Just be patience.
My favourite UA-cam channel! Can't wait for the next videos
6:45 so for JS it’s sort of different on Safari, websites are actually run in child processes managed by Safari called WebContent, where the JS is executed (and these *are* separate processes, they’re child processes but they’re separate nonetheless)
This is not the context of a web brower, but in an engine like nodeJS, Deno or Bun.
Thank you very much... Your Videos are really really Good... Have been following you for more than 6 months😊
I learned so much!
Thank you George.
A program is an higher level abstract process. it is also by that definition too in design, to combine multiple tasks nd such
very good video 😁 Do you suggest some resources to go deeper on such topics?
superb explanation
Channel grows so freaking fast
This and the last video (the one about CPU instructions) felt a bit disappointing, it would be nice to see something more intricate and meaningful (like the static/dynamic ram episodes for example), here the same thing is repeated for 8 minutes and it's not even a concept that's hard to grasp.
Edit: I should also lump the strings casting video with the other two I mentioned.
6:45 i like to point to a fact, js is jit-compiled (just in time) programing language , not interpreted
And Java is even more of a mixed bag, since you first compile the source code to byte code, which is basically the instruction set for the virtual machine - but the byte code can also bei jit'ed into native executable... 🤯 But I am not aware of anything that interprets the Java source code.
@@Colaholiker Idk; with recent java version they added a new jep witu implicit main, basicaly, if you have a single java file you don't need to call javac to execute it (you also don't need to put all the boilerplate that makes java hard to teach). Idk if it's interpreted OR if it knows it's a single .java file and will compile it as quick as possible and run it.
@@toinouH wow, seems like Java has become even more confusing since I've last seen it. (Long ago, in my field of work you wouldn't touch Java with a 10 ft pole)
@@Colaholiker No, because unless you're a student you will never use this feature. The rest of the language is fine now, new switch statement, records, pattern matching, virtual threads, Foreign function and memory api and vector api.
Yep, it used to be interpreted.. However, in both cases, what he intended to deliver still applies, as the actual process is the Javascript engine
Is the TEXT section only just text or does it hold any immutable constants which is mostly text? Does the operating system optimise the memory usage by referring to the same TEXT section when running multiple processes of the same program since it is the same across them?
Ultimately it depends of the Operating System your using. The TEXT section is usually not shared between processes. But the idea of sharing executable code is quite present in Dynamic Libraries.
I'll explain this further in a future episode about a compilation step called" linking."
The "text" section is an area of memory containing the compiled program, and should never be written to. Depending on the operating system, the type of CPU, and the type of memory, the text section may be implemented differently. Sometimes the text section is in protected memory that the process cannot write to. Sometimes the same program used for multiple process, will share the same physical text area memory between all the processes. Sometimes in simple devices, the text area is in memory that physically cannot be written to, such as the programs in old game cartridges, where the program stored in the cartridge also becomes the text area in the game console's memory. The text area contains compiled CPU instructions, but some instructions include constant values as part of the instruction. Some compilers, or programmers doing assembly code, may also put read-only constant data in the text area.
The "text" area of a process has many variations on how it is implemented, what protections and attributes it has, and the physical hardware of the text area. It is made all the more complicated by the text area being a read-only area of CPU instructions for the process, while for the operating system, that memory is read-write data while the operating system has its own read-only text area. But to a hypervisor implementing virtual machines, the operating system's text area is the hypervisor's data area. This can be made more complicated by adding another layer, such as an emulator program that the operating system is running, that "emulates" or pretends to be a different CPU, such as emulators of old game consoles, that allow old video games to be run on MS Windows.
In the bad old days of long ago computers, there was no separation of text, data, heap, and stack. Some CPUs didn't have stacks implemented in the hardware. The compiled instructions of the text were mixed with read-write data. A bug in programming while trying to write to data, such as a subscript out of bounds, could overwrite the compiled CPU instructions, and the execution of instructions could go crazy, usually resulting in a CPU halt. Now, things like that are considered very bad programming practices, and modern hardware memory protection can prevent any of the process's attempts to write to the text area.
Of course, there are rare instances where the text area is purposely allowed to be overwritten, such as in Core Wars, or its newer equivalents, where different tiny programs do battle with each other, attempting to delete each other from memory.
The "text" area is a concept that has many many variations in its implementation. This UA-cam channel does a good job of presenting concepts at a single level, while hinting at more details, without confusing the viewer by descending into those multiple levels of details, which should have their own videos.
Another concept is just-in-time compilation vs ahead-of-time compilation.
This would affect the way the process is interpreted.
This channel is gold!
how you edit your videos ? and create such animations ?
I love your videos. What tools/library do you use for the animations?
explaining in perfect way😍
Would like to see the video of process that is already scheduled
You write a program but you run a process
Amazing as always Jorge :) un saludo❤
i am addicted to your channel!
Awesome, thanks for sharing
This is literally a textbook but a youtube channel. Incredible.
These videos are so good!
Thanks, what about Threads, I think it is a flow of execution inside a given process having it own stack but shares memory with threads spawn by the parent process, right ?
He is back with another banger
which software do you use to make these videos?
Can you please make a video about compiler optimizations? It would be very nice
Bro I am a subscriber from India can also explain what chipset are used for this things in computer like
When you upload arithmetic logic unit's video can explain which chipset are cordinate for an arithmetic logic unit in a computer
Thanks G
pls make a video about how class and objects are possible in terms of assembly language
Jorge, what is the difference in the capacitors in a DRAM and SSD that DRAM needs charge refilling but SSD don't ?
Also if a phone or laptop dies how is it our data from SSD doesn't erase ?
SSDs uses an "jail" to keep an charge, thats mean 1 and if nothing is there means 0, works using quantum tunneling so the charge can't go out (it can but needs years to do it in a "luckly" way, its quantum phisics) but DRAM uses capacitors that discharge and are much more faster, that's why you use RAM and not SSDs as your "CPU memory"
Great work, Can you please explain about process and thread in context of PostgreSQL connections.
A program is a docker image, a process is a container
Un programa al ejecutarse deriva en un proceso y una vez terminado el proceso este no existe más pero sí el programa. Creo que lo he entendido!
Please do caches next or user vs kernel mode
And then what's the distinction between threads, processes, and tasks? I have a rough idea I remember from my OS class especially w.r.t. processes vs threads but whenever I try to google what a "task" is and how it relates to the other two, there's a bunch of different answers including: tasks are just instructions loaded into memory, tasks are the same as processes, processes and threads are both tasks, there are no tasks (on linux), everything is a task (on linux) etc. As far as I can tell, on linux at least, threads are treated as a special kind of process (they share an address space and are spawned by running the same program but what else?). I'm guessing this is why when I run a multithreaded program like a browser, each thread seems to gets their own PID. And then 'task' is just a generic term for this kind of 'process' that covers both threads and processes proper?
Also I kinda disagree that a source code file for an interpreter isn't a program. From the perspective of the host machine (which is your point I'm guessing), sure, but it's a program for the "virtual machine" i.e. a particular implementation of the abstract machine described by the language. Ofc with most (all?) Python implementations the source code is compiled into bytecode. I haven't read the Python spec but I'm guessing these are all implementation details so I would still say a .py is a program even if there's no actual machine (virtual or otherwise) that can run it.
Great videomay I ask what tool was used to make the animation in the video? is it like Manim?
PowerPoint
its like docker image & docker container
Amazing content as always but I wish you didn't add background music. Silence makes it more serious and formal which is more appropriate for you.
I love your channel.❤
Theres no bss section? 😢
Not sure the 2 Windows in the same application on macOS are different processes. I believe they share a process. On Windows they don’t
A teacher once told our class: A program is like a recipe, a process is like cooking.
Hey i am waiting for compilers and interpreters . ❤❤❤❤❤
Why aren't 2 processes of the same app share the same code in mem, that could save alot mem space
Java has compilation process, it has JIT and AOT compilers
Compiled to machine code.
@@CoreDumpped Dump the pseudo-machine-code, let we see if is true lol
Please explain device drivers.
I may pressed it accidentally but it worth my time
Today at morning I just thought, wonder when he will drop a video 😂 How lucky is it
Great video
How are you classifiying java as interpreted ?
Java source code is compiled to an intermediate representation called Bytecode.
This "Bytecode" is not machine code, the processor can not understand it, so it is the job of the JVM to interpret that Bytecode.
Can you explain what make m4 fast then m3 and m2 and m1?
Very good introduction
A program is a "blueprint". A process is an instance of a program in execution.
An application is what the interpreter process is interpreting?
Is a website an application? XD