buzz lightyear buzzheavyyear at ...16...
Thu Aug 9 11:27:06 CEST 2012

Hi Martin,
Thanks, that was very informative and made things a lot clearer to me - it should keep me going for the next few weeks!
Enjoy your holiday,

> Hi Nick,
> I'm pleased to hear that you've found the time to proceed.
> ...
> You're right concerning the directory 'src/platform'. Due to the fact
> that 'base-hw' solely targets ARM systems for now, the separation of
> generic and platform specific code is not proven very well. I've
> annotated this issue, thank you!
> Moreover i'm not sure if i've understood you right regarding
> 'mode_transition.s'. The file does not really handle or control any type
> of exception. It's purpose is on the one hand to only catch exceptions,
> wich occur in userland, save the interrupted user execution-state and
> exception information, and get back to the kernel enviroment to re-run
> 'kernel()'. On the other hand it offers also the opposite direction,
> that is resuming a given user execution-context in userland once
> 'kernel()' returns. This way the handling of the concrete exception,
> whether it is an interrupt, a page fault or a syscall, resides
> completely in 'kernel()'.
> If you were looking for the resolution of page faults, even 'kernel()'
> is not the final destination. When kernel detects the presence of a page
> fault, the function 'handle_pagefault()' only checks if the fault was
> caused by a translation miss. If this is the case a pager might resolve
> the problem by expanding the according page table. Thus kernel composes
> an appropriate IPC message to the pager that is identified by the thread
> object of the faulter. The pager normally is a thread in Genodes 'core'
> process, wich itself asks the so called "Region Manager"
> of the faulter for a region mapping that covers the fault. If a mapping
> is found the pager modifies the page table accordingly. The only process
> that doesn't need pagers is 'core'. Because 'core' is the first process
> in Genode, gets initialized by 'kernel()' and must be trusted anyway,
> its page table gets filled with static 1:1 translations initially by
> kernel. Once this is done, kernel itself joins this process, so userland
> threads in 'core' and the kernel "thread" share the same address space.
> Long story short, the configuration of virtual/effective addresses
> depends, except of 'core' on the region managers, wich themselves are
> instructed through the RM-sessions
> (base/include/rm-session/rm_session.h) they provide to their RPC-clients.
> I hope this gives you a rough picture of Genodes virtual-address
> management, even it is a somewhat far-reaching explanation.
> Cheers,
> Martin
> On 08/08/2012 06:24 PM, Nick Betteridge wrote:
> > Hi Martin,
> > 
> > ...
> > 
> > I have been slowly reading through your arm assembler, trying to
> > understand how genode works.
> > 
> > Just one thing - you have partitioned both arm processors and platforms
> > into named directories, except for base_hw/src/platform, which contains
> > arm assembler. Do you intend to refactor this into something like
> > base_hw/src/platform/arm?
> > 
> > Just one more thing, am I right in thinking
> > 
> > 'base-hw/src/core/arm_v7a/mode_transition.s'
> > 
> > is just for interrupt control? I can't find anything for configuring
> > virtual/effective addresses - perhaps this is done in 'c' (I haven't
> > read the c yet) - in openrisc this is handled in the supervisor mode.
> > 
> > Cheers
> > Nick
> > 
> > 
> > 
> > 
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and 
> threat landscape has changed and how IT managers can respond. Discussions 
> will include endpoint security, mobile security and the latest in malware 
> threats.
> _______________________________________________
> Genode-main mailing list
> Genode-main at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the users mailing list