<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'>Clarification regarding mmap.<BR> <BR> <BR>mmap has two fairly different purposes in Posix.<BR> <BR> <BR> 1) to "map a file" into memory <BR> 2) to "allocate memory", probably with address and size page-aligned, probably for relatively large allocations (i.e. ones you don't mind rounding up to a page size).  <BR> <BR>  #1 is the more obvious probably better known use. The one I knew of. The one it sounds like. <BR>  #2 is what we use it for.  <BR> <BR> <BR>If we ever autoconf-m3core, it'd probably be reasonable to do something like:<BR> <BR> <BR>#if HAS_MMAP<BR>return mmap(...);<BR> <BR>#elif HAS_CALLOC<BR> <BR>void** p = (void**)calloc(size + sizeof(void*));<BR>if (!p) return p;<BR>p[0] = p;<BR>return p + 1;<BR> <BR>#else<BR>#error<BR>#endif<BR> <BR> <BR>#if HAS_MMAP<BR>munmap(...);<BR> <BR>#elif HAS_CALLOC<BR> <BR>if (p)<BR>  free(((void**)p)[-1]);<BR> <BR>#endif<BR> <BR> <BR>alternatively though, look for every directory named "POSIX" and make a copy of it, and modify as needed.<BR>Including assert(0) in places.<BR>Invent your own value for "OS_TYPE".<BR> <BR> <BR>Maybe<BR> #define OS_TYPE_FOO <BR> #include ../POSIX/Foo.c <BR> <BR>and #ifndef OS_TYPE_FOO in Foo.c, if it isn't too messy.<BR> <BR> <BR>Sharing code can be good or bad.<BR> <BR> <BR>We don't actually use "memory protection".<BR>Er, well..maybe we do...we might have code that allocates stacks, and makes a page at either end inaccessible.<BR>This is nice. It might be required for "safety".<BR>It might also be a good idea to have a flag in Target.i3 that says the target needs calls in prologues to check for stack overflow, and use that instead.<BR>More portable -- i.e. doesn't require hardware page protection -- but bigger/bloated/slower.<BR> <BR> <BR> <BR>Really you need to look at all the POSIX/PTHREAD/WIN32 directories, esp. in m3core and libm3.<BR>You make a much different system, you get to do the port.<BR>It is neither impossible nor a no-op.<BR> <BR> <BR> - Jay<br><br><br><br><br> <BR><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">From: darko@darko.org<br>Date: Fri, 4 Jan 2013 12:09:26 -0800<br>To: dabenavidesd@yahoo.es<br>CC: m3devel@elegosoft.com<br>Subject: Re: [M3devel] Bare Metal Modula-3<br><br><div>It's not a realtime system, so that's not a problem. Have a look at my reply to Jay you'll see a fuller description of what I have in mind.</div><div><br></div><br><div><div>On Jan 4, 2013, at 10:46 AM, Daniel Alejandro Benavides D. wrote:</div><br class="ecxApple-interchange-newline"><blockquote><table border="0" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top" style="font: inherit; font-size-adjust: inherit; font-stretch: inherit;">Hi all:<br>I think you just need runtime executive on top a machine would be enough.<br>For instance VAXELN. <br>Problem is you would need realtime core services at the language level (somehow SPIN services with no protection overhead caused by language).<br>Memory managament.  and threading are core services in VAXELN as part of system, just need bindings for each language.<br>I guess you need and advanced distributed realtime system. Such was VMS 5 for rtVAX9000:<br><a href="http://books.google.com.co/books?id=TzUXAQAAMAAJ&dq=" target="_blank">http://books.google.com.co/books?id=TzUXAQAAMAAJ&dq=</a>"%2C+in+conjunction+with+VMS.+VAXELN%2C+which+provides+optimal+performance+for"&q="+which+provides+optimal+performance+for"#search_anchor<br><br>My hypothesis is that you can't bring up a realtime application in an embedded device like you want.<br>I know of realtime OS in Modula-3, there must be several ones I guess, based on what I
 have researched but you can not trust whether they are embedded, that's the problem.<br>Thanks in advance<br><br><br>--- El <b>vie, 4/1/13, Darko <i><<a href="mailto:darko@darko.org">darko@darko.org</a>></i></b> escribió:<br><blockquote style="padding-left: 5px; margin-left: 5px;"><br>De: Darko <<a href="mailto:darko@darko.org">darko@darko.org</a>><br>Asunto: [M3devel] Bare Metal Modula-3<br>Para: "m3devel developers" <<a href="mailto:m3devel@elegosoft.com">m3devel@elegosoft.com</a>><br>Fecha: viernes, 4 de enero, 2013 04:16<br><br><div class="ecxplainMail">I'm interested in deploying M3 into a kind-of embedded environment where efficiency and performance are key and I want to avoid installing an OS beyond a simple supervisor that manages the hardware. <br><br>The services needed are threading, memory allocation and network access. I'm figuring the first two already exist in M3 and a network stack can be found.<br><br>The question I have is can all of the OS specific runtime can be removed? Beyond maybe a timer
 and possibly some memory protection functionality, what does M3 need to run threading and garbage collection?<br><br>- Darko<br><br></div></blockquote></td></tr></tbody></table></blockquote></div><br></div>                                       </div></body>
</html>