In what order should I work on memory?

Discussions on more advanced topics such as monolithic vs micro-kernels, transactional memory models, and paging vs segmentation should go here. Use this forum to expand and improve the wiki!
Post Reply
User avatar
mrjbom
Member
Member
Posts: 317
Joined: Sun Jul 21, 2019 7:34 am

In what order should I work on memory?

Post by mrjbom »

Hi.
I fully understand the order in which to implement some parts in my 32-bit core.
My goal now is to add multitasking.
I found the article "kernel multitasking"

The requirements have page paging.
But I don't know if I have everything I need before implementing paging.
I don't have any virtual memory right now.

At the moment I manage my physical memory like this:
I divide all physical memory into 4096-byte pages. And I make them out if I have to.
Now I need to make a virtual memory? Only then do you start multitasking?
In what order do I need to implement something?

Thanks.
User avatar
Octacone
Member
Member
Posts: 1138
Joined: Fri Aug 07, 2015 6:13 am

Re: In what order should I work on memory?

Post by Octacone »

mrjbom wrote: I found the article "kernel multitasking"
That article is crap! Don't use it, also never do assembly task switching in C code like shown in that tutorial!
Here is a proper one: https://wiki.osdev.org/Brendan%27s_Mult ... g_Tutorial
OS: Basic OS
About: 32 Bit Monolithic Kernel Written in C++ and Assembly, Custom FAT 32 Bootloader
thewrongchristian
Member
Member
Posts: 426
Joined: Tue Apr 03, 2018 2:44 am

Re: In what order should I work on memory?

Post by thewrongchristian »

mrjbom wrote:Hi.
I fully understand the order in which to implement some parts in my 32-bit core.
My goal now is to add multitasking.
I found the article "kernel multitasking"

The requirements have page paging.
But I don't know if I have everything I need before implementing paging.
I don't have any virtual memory right now.

At the moment I manage my physical memory like this:
I divide all physical memory into 4096-byte pages. And I make them out if I have to.
Now I need to make a virtual memory? Only then do you start multitasking?
In what order do I need to implement something?

Thanks.
You don't need virtual memory to implement multi-tasking. Lots of kernels have only a single address space with multiple threads of execution.

But, paging does enable a whole host of other features, not least the ability to have multiple address spaces, to provide a protection domain to allow independent, isolated processes, as well as releasing you from the shackles of physical memory layout and size.

Paging is just the mapping from a linear virtual address space to a potentially non-linear physical address space. Virtual memory can be facilitated by paging, but you can also implement paging without having virtual memory, and indeed, UNIX/32V (the port of V7 UNIX to the DEC VAX) is an example of an OS using the paging hardware, but not using paging to implement virtual memory.
8infy
Member
Member
Posts: 185
Joined: Sun Apr 05, 2020 1:01 pm

Re: In what order should I work on memory?

Post by 8infy »

Octacone wrote:
mrjbom wrote: I found the article "kernel multitasking"
That article is crap! Don't use it, also never do assembly task switching in C code like shown in that tutorial!
Here is a proper one: https://wiki.osdev.org/Brendan%27s_Mult ... g_Tutorial
How do I find more hidden gems like this one? Searching the wiki yields nothing useful at all...
User avatar
mrjbom
Member
Member
Posts: 317
Joined: Sun Jul 21, 2019 7:34 am

Re: In what order should I work on memory?

Post by mrjbom »

Octacone wrote:
mrjbom wrote: I found the article "kernel multitasking"
That article is crap! Don't use it, also never do assembly task switching in C code like shown in that tutorial!
Here is a proper one: https://wiki.osdev.org/Brendan%27s_Mult ... g_Tutorial
Wow, it looks much better. It's too bad I haven't seen him before! Thanks!
Post Reply