<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>G33K @ Work &#187; OS</title>
	<atom:link href="http://www.geekatwork.de/tag/os/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.geekatwork.de</link>
	<description>Basteleien eines Geeks</description>
	<lastBuildDate>Mon, 12 Jul 2010 08:38:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Dumping the VMware BIOS</title>
		<link>http://www.geekatwork.de/2010/05/27/dumping-the-vmware-bios-2/</link>
		<comments>http://www.geekatwork.de/2010/05/27/dumping-the-vmware-bios-2/#comments</comments>
		<pubDate>Thu, 27 May 2010 00:48:18 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[OSDev]]></category>
		<category><![CDATA[BIOS]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[dumping]]></category>
		<category><![CDATA[extracting]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.geekatwork.de/?p=228</guid>
		<description><![CDATA[Sometimes, even if you don't want to install a pirated  [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes, even if you don&#8217;t want to install a pirated Windows version, you may want to dump and modify the BIOS of a computer.<br />
Especially if you are developing some kind of an ACPI subsystem for your <a href="projekte/geexos/">own small operating system kernel</a>.</p>
<p>Doing this with real hardware is kinda risky and complex.<br />
But what about virtual machines like VMware? They have a BIOS, but how can we get our hands on it?<span id="more-228"></span><br />
As I&#8217;m using Mac OS X for all my daily work, I&#8217;m using VMware Fusion as a virtualization program.</p>
<p>The BIOS seems to be hidden inside the virtual machine monitor executable itself.<br />
To make our lifes easier, we are going to extract only the x86_64 part out of the universal binary with the following command:</p>
<pre class="brush:shell">lipo /Libary/Application\ Support/VMware\ Fusion/vmware-vmx -thin x86_64 -output /Users/user/Desktop/vm64</pre>
<p>Now, we have a Mach-O file with only one architecture, which is x86_64.<br />
It doesn&#8217;t matter if you are dumping the BIOS out of the i386 or x86_64 version of the binary. It should be the same for both architectures.</p>
<p>After that, we can extract the appropriate section in the Mach-O file which contains the BIOS itself:</p>
<pre class="brush:shell">segedit /Users/user/Desktop/vm64 -extract __VMWARE bios440 /Users/user/Desktop/bios440.rom</pre>
<p>And here, you go: bios440.rom contains your VMware BIOS.</p>
<p>After you modified it to your wishes, you can use a handy VMware feature which lets you specify a custom BIOS for a virtual machine inside its vmx-file.<br />
Just add this line to the vmx-file of the machine you want a custom BIOS for and place the rom file in the proper folder:</p>
<pre>bios440.filename = "bios.rom"</pre>
<p>Happy BIOS modding!</p>
 <p>Feel free to Flattr this post at <a href="http://flattr.com/" title="Flattr" target="_blank">flattr.com</a>, if you like it.</p> <p><a href="http://flattr.com/" title="Flattr" target="_blank"><img src="http://www.geekatwork.de/wp-content/plugins/flattrss/button-compact-static-100x17.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.geekatwork.de/2010/05/27/dumping-the-vmware-bios-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building and running your own Android</title>
		<link>http://www.geekatwork.de/2010/04/01/building-and-running-your-own-android/</link>
		<comments>http://www.geekatwork.de/2010/04/01/building-and-running-your-own-android/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 20:00:43 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[custom]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[fastboot]]></category>
		<category><![CDATA[G2]]></category>
		<category><![CDATA[HTC]]></category>
		<category><![CDATA[Magic]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[SPL]]></category>

		<guid isPermaLink="false">http://www.geekatwork.de/?p=197</guid>
		<description><![CDATA[Almost a year ago I bought an HTC Magic (also known as  [...]]]></description>
			<content:encoded><![CDATA[<p>Almost a year ago I bought an HTC Magic (also known as the G2) phone as a replacement for my iPhone.<br />
I was quite happy with it since it had the newest Android 1.5 and there was also an update released by Google to get it to version 1.6.</p>
<p>Now, that there are much fancier phones out there, like the Nexus One and Motorola Milestone, there must be a reason for people to buy them. The consequence about that is that they are holding back any updates to Android 2.0 or 2.1 for older phones. At least that&#8217;s my impression.</p>
<p>I also ever wanted to build and run my own Android since it is open source. At least that&#8217;s what Google says.<br />
My first steps were quite disappointing since there was no device specific package for my G2 in the source tree. There was only one for the HTC Dream (G1).</p>
<p>Yesterday I wanted to give it another try and it was a success. I will post my steps here which are especially for the HTC Magic (or G2, HTC Sapphire, MyTouch 3G, Google IO &#8211; they are all the same) but it should be possible to do this with other phones as long as you have all the device specific blobs like the GSM Baseband layer or low level hardware drivers for your specific device.<br />
Also keep in mind that this won&#8217;t be a normal guide like &#8220;How can I root this phone?&#8221; I assume that you more or less know what you are doing. So don&#8217;t blame me when you brick your phone: Shit happens and I&#8217;m not going to fix it.<span id="more-197"></span></p>
<p>Also, be careful what phone you have. There are 2 versions of the HTC Magic. One is the PVT32A and the other is PVT32B.<br />
The A version has more RAM compared to B. The phone sold by HTC on their own is the A version. Almost all others are B versions. My phone is a B variant.<br />
Check <a href="http://wiki.xda-developers.com/index.php?pagename=HTC_Sapphire_Hacking#sec01" target="_blank">this site</a> for any further information.</p>
<h2>The SPL</h2>
<p>The SPL is the Secondary Program Loader. The Initial Program Loader, which runs before the SPL is responsible for the basic bootstrapping of the processor inside the phone. Most of the time it is located on some on-die ROM and loads the SPL from flash.</p>
<p>The SPL itself is responsible for all kinds of boot services like booting from flash or receiving and handling data from the USB port with the fastboot protocol, which can be used for several maintenance tasks.</p>
<p>Usually, if you buy an OEM phone, you will get a shipment bootloader. Development phones will have an engineering bootloader.<br />
The difference between those two is that with the shipment bootloader, you will not be able to write the flash directly from your computer over the fastboot protocol, which you definitely want if you compile/develop your own Android. So the first step is to install an engineering loader.<br />
You can get several SPLs <a href="http://forum.xda-developers.com/showthread.php?t=529019" target="_blank">here</a>. I installed the Crios  loader.<br />
Just put the zip file on your SD-Card, boot a <a href="http://www.cyanogenmod.com/downloads/recovery-image" target="_blank">modified recovery image</a> via fastboot and apply the zip file from your SD:</p>
<pre class="brush:plain">fastboot boot cm-recovery-1.4.img</pre>
<p>The fastboot utility is available <a href="http://developer.htc.com/adp.html#s2" target="_blank">here</a> or from your compiled Android in the out/host/&lt;platform&gt;/bin/ subdirectory.<br />
To get your phone into fastboot mode, turn it off and hold the &#8220;back&#8221;-key while turning it on.</p>
<p>After flashing the new SPL you will have the engineering bootloader with security turned off.</p>
<h2>Getting the Android sourcecode</h2>
<p>If you want to build your own Android you obviously need to get the sourcecode. I did all the work on a Gentoo Linux. I don&#8217;t know how to do it under Windows or Mac OS.</p>
<p>First I thought to take the CyanogenMod repositories but they won&#8217;t check out completely because there seems to be missing at least one repository on github.</p>
<p>To get the official Google tree, just follow <a href="http://source.android.com/download" target="_blank">this guide</a>.</p>
<p>Essentially you just install the required packages, get the repo client, do the repo init, repo sync and you should be done.</p>
<h2>Get the binary blobs</h2>
<p>For the Sapphire board package, you will need to get some binary blobs for the camera, WLAN, baseband and several other things.</p>
<p>You can download them on the <a title="http://developer.htc.com/google-io-device.html" href="http://" target="_blank">HTC page for the Google IO</a>. Just download the recovery image for Android 1.6 and put it into the root of your Android source tree.<br />
After that you need to change the directory to vendor/htc/sapphire-open and execute the unzip-files.sh which extracts the blobs from the downloaded zipfile and puts them into the appropriate places.</p>
<h2>Building it</h2>
<p>After you prepared your environment, get back to the root of the source tree and do a</p>
<pre class="brush:plain">source build/envsetup.sh
lunch</pre>
<p>to setup several environment variables and select the build target, which will be <em>aosp_sapphire_eu-userdebug</em> in our case.</p>
<p>After that you can just execute a</p>
<pre class="brush:plain">make -j3</pre>
<p>to start the build. You can adjust the number behind the -j parameter to your machine. If you have n cores, the number you normally use is n+1. This is not essential for a successful build, but if you have 2 or more cores, you should use them for the build.<br />
Now it&#8217;s time to ge some beautiful delicious black coffee or a cold bootle of <a href="http://www.club-mate.de" target="_blank">Club-Mate</a>, go for a walk or take a nap. This will take quite some time.</p>
<h2>Common errors during the build</h2>
<p>I ran into several erros while buildng. All of them were specific to my environment.</p>
<ul>
<li><em>no rule to make target `run-java-tool&#8217;</em> during build<br />
Solution: Just execute a <em>export PATH=$(java-config -O)/bin:$PATH</em> and the error you should be gone</li>
<li>Java 1.6 is installed.<br />
Solution: Do an <em>ACCEPT_LICENSE=&#8221;*&#8221; emerge =sun-jdk-1.5.0.22</em> and select the 1.5 JDK with eselect.</li>
<li>Building the emulator fails with something like <em>prebuilt/linux-x86/sdl/include/SDL/SDL_syswm.h:55:22: error: X11/Xlib.h: No such file or directory</em><br />
Solution: Do an <em>emerge libX11</em></li>
</ul>
<h2>Installing the built images on your phone</h2>
<p>After the build finished successful you will have everything in the <em>out</em> subdirectory.</p>
<p>Thanks to the engineering SPL, you can now install the built images using fastboot:</p>
<pre class="brush:plain">export ANDROID_PRODUCT_OUT="/path/to/android/root/out/target/product/sapphire-open"
fastboot flashall</pre>
<p>Be sure your phone is in fastboot mode.</p>
<p>After you flashed the images you should boot the recovery image, mentioned in the SPL section, again and wipe the userdata partition.<br />
This will cause a data loss. Anyway, you should have done a backup with nandroid in the modified recory image before messing around with your phone&#8217;s firmware <img src='http://www.geekatwork.de/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h2>The result</h2>

<a href='http://www.geekatwork.de/2010/04/01/building-and-running-your-own-android/about/' title='about'><img width="150" height="150" src="http://www.geekatwork.de/wp-content/uploads/about-150x150.png" class="attachment-thumbnail" alt="about" title="about" /></a>
<a href='http://www.geekatwork.de/2010/04/01/building-and-running-your-own-android/menu/' title='menu'><img width="150" height="150" src="http://www.geekatwork.de/wp-content/uploads/menu-150x150.png" class="attachment-thumbnail" alt="menu" title="menu" /></a>
<a href='http://www.geekatwork.de/2010/04/01/building-and-running-your-own-android/main/' title='main'><img width="150" height="150" src="http://www.geekatwork.de/wp-content/uploads/main-150x150.png" class="attachment-thumbnail" alt="main" title="main" /></a>

<h2>Next steps</h2>
<p>As you can see from the images above, all of the Google applications are missing. The next step would be to take them from an official Google image and put them on your phone. I think cyanogen already wrote a script for doing this for his builds. I haven&#8217;t checked this out yet.</p>
<p>Anyway, we have our very own Android 2.1 running.<br />
If you want to use it on a daily basis you should consider building a stable branch and using this instead of the master branch.</p>
<p>If you&#8217;ve got any questions or problems, just leave them in the comments and we will try to figure them out.</p>
<p><strong>Update:</strong> The cyanogenmod repositories do check out. I just used the wrong manifest repository.<br />
If you want to give it a try, just do a</p>
<pre class="brush:plain">repo init -u git://github.com/cyanogen/android.git -b eclair
repo sync</pre>
<p>instead of using the Google repository. <a href="http://wiki.cyanogenmod.com/index.php/Building_from_source" target="_blank">Have a look here</a> for more information.</p>
<p>General useful information, like adding your own target, creating keys for signing etc. can be found <a href="http://pdk.android.com/online-pdk/guide/build_new_device.html" target="_blank">here</a>.</p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = 'G33KatWork';
var flattr_url = 'http://www.geekatwork.de';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'G33K @ Work';
var flattr_dsc = 'Basteleien eines Geeks';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script> <p>Feel free to Flattr this post at <a href="http://flattr.com/" title="Flattr" target="_blank">flattr.com</a>, if you like it.</p> <p><a href="http://flattr.com/" title="Flattr" target="_blank"><img src="http://www.geekatwork.de/wp-content/plugins/flattrss/button-compact-static-100x17.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.geekatwork.de/2010/04/01/building-and-running-your-own-android/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Systemprogrammierung</title>
		<link>http://www.geekatwork.de/2010/01/03/systemprogrammierung/</link>
		<comments>http://www.geekatwork.de/2010/01/03/systemprogrammierung/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 00:08:14 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[OSDev]]></category>
		<category><![CDATA[The usual rants]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[Virtualisierung]]></category>

		<guid isPermaLink="false">http://www.geekatwork.de/?p=81</guid>
		<description><![CDATA[Mein momentanes Interessenfeld bezieht sich ja sehr sta [...]]]></description>
			<content:encoded><![CDATA[<p>Mein momentanes Interessenfeld bezieht sich ja sehr stark auf alles, was mit System- und Hardwarenaher Programmierung zu tun hat.<br />
Da ich auf der Zugfahrt zum <a href="http://events.ccc.de/congress/2009" target="_blank">26c3</a> nicht besonders viel zu tun hatte und die AMD und Intel Dokumentationen auf meinem Rechner hatte, habe ich mal angefangen mich um die <a href="http://de.wikipedia.org/wiki/Virtualisierung_%28Informatik%29" target="_blank">Virtualisierungsfunktionen</a>, die diese beiden Hersteller da so in ihre Prozessoren verpflanzen, zu kümmern.<span id="more-81"></span></p>
<p>Nachdem ich dann auch irgendwann mal raushatte, wie ich das vierstufige (!) Paging mit 4KB großen Pages beim Booten zusammenbauen konnte, um so einen Prozessor in den <a href="http://de.wikipedia.org/wiki/AMD64#Betriebsmodi" target="_blank">Long Mode</a> zu bekommen, hab ich mich mal an die Virtualisierung machen wollen.<br />
Zu diesem Zeitpunkt saß ich allerdings schon im Hackcenter.</p>
<p>Wie ich dann, mal wieder, feststellen musste, hat so ein Low Level Zeug einen unglaublichen Rattenschwanz, den man immer wieder hinter sich herzieht. In diesem konrekten Fall brauchte ich also ein vernünftiges <a href="http://de.wikipedia.org/wiki/Interrupt" target="_blank">Interrupthandling</a>. Ist ja schnell implementiert, dachte ich mir und kopier mir meinen Code aus meinen anderen <a href="http://www.geekatwork.de/projekte/geexos/" target="_self">Projekten</a> fröhlich zusammen.</p>
<p>Interrupts konnte ich dann handlen. Problem war jetzt nur, dass 2 Instruktionen nach dem Aktivieren der Interrupts sofort der Interrupt #8 auftrat, was nach Dokumentation ein Double Fault gewesen sein müsste. Dieser tritt aber nur nach einer fatalen, vorhergegangenen Exception auf, wovon ich aber nichts mitbekommen habe. Wieso fliegt da also ein Double Fault? Nichtmal die 2 Instruktionen, die nach dem setzen des Interrupt Enable Flags ausgeführt wurden konnten einen solchen Interrupt auslösen, weil es Sprünge zu sich selbst waren, um die CPU in einer Endlosschleife zu halten.</p>
<p>Kommen wir zurück zum Rattenschwanz: Nachdem ich dann die Interrupt Handler und die Verwaltung der IDT hatte, habe ich noch Routinen zur Verwaltung der <a href="http://de.wikipedia.org/wiki/Global_Descriptor_Table" target="_blank">GDT</a> implementiert. Es funktionierte immernoch nicht, was allerdings zu erwarten war, da es mehr eine Verzweifelungstat war als ein richtiger Lösungsansatz. Wir sind zu diesem Zeitpunkt bei Tag 3 des Kongresses.<br />
Allerdings war das ja auch nicht das Einzige, was ich da gemacht habe. Gab ja noch Vorträge.</p>
<p>Danach gings ans Debuggen. Ich habe VMware probiert, um zu sehen, was das Ding sagt. Wie erwartet: nichts. Es fehlen einfach die Debuggingmöglichkeiten unter Mac OS mit VMware.<br />
Dann gibts noch Qemu, an den man einen GDB klemmen kann. Gesagt getan. Nach wie vor nichts gefunden.<br />
Als letztes bin ich mit dem integrierten Debugger in Bochs dem Kram zu Leibe gerückt, mit dem man seinen Code auf Assemblerebene Debuggen konnte. Auch hier habe ich wieder nichts gefunden.</p>
<p>Was war das Ende vom Lied? Es gibt einen extra Chip auf x86 Systemem, der externe Interrupts handlet. Früher war das der <a href="http://de.wikipedia.org/wiki/Programmable_Interrupt_Controller" target="_blank">PIC (Programmable Interrupt Controller)</a> und heute ist es der <a href="http://de.wikipedia.org/wiki/APIC" target="_blank">APIC (Advanced Programmable Interrupt Controller)</a>, der auch Mehrprozessorsysteme ohne Gefrickel unterstützt.<br />
Diese Chips kann man so konfigurieren, dass jeder externe Interrupt (Tastatur, Floppy, Timer etc) auf einen der 256 Interrupts der CPU gemappt werden kann.</p>
<p>Irgendein Stück Software vor meinem Kernel hat genau das anscheinend mit dem Timerinterrupt gemacht und ihn auf Interrupt #8 gelegt.<br />
Das würde dann auch erklären, warum bei einem Double Fault eigentlich ein Errorcode auf den Stack gepusht werden sollte, was bei mir aber nie passiert ist. Es war schlicht und ergreifend kein Double Fault.</p>
<p>Also hab ich dann doch, entgegen meiner vorherigen &#8220;Brauchste eh nich&#8221;-Meinung, auch noch Code hinzugefügt, der den PIC (eigentlich sind es 2 PICs) entsprechend konfiguriert und die 16 Interrupts, die er verwalten kann, hinter die Exceptions mappt.</p>
<p>Was ist? Es funktioniert endlich.</p>
<p>Und so kann man sich wunderschön auf die Fresse legen und Zeit verbraten.<br />
Ich will nicht sagen ich hab nichts gelernt, genervt hat es aber doch schon ziemlich. Gedauert hat der ganze Prozess jetzt 6 Tage. Und ich hab immernoch keinen virtualisierten Code laufen.</p>
 <p>Feel free to Flattr this post at <a href="http://flattr.com/" title="Flattr" target="_blank">flattr.com</a>, if you like it.</p> <p><a href="http://flattr.com/" title="Flattr" target="_blank"><img src="http://www.geekatwork.de/wp-content/plugins/flattrss/button-compact-static-100x17.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.geekatwork.de/2010/01/03/systemprogrammierung/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GeexOS</title>
		<link>http://www.geekatwork.de/projekte/geexos/</link>
		<comments>http://www.geekatwork.de/projekte/geexos/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 00:26:44 +0000</pubDate>
		<dc:creator>Andy</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[GCC]]></category>
		<category><![CDATA[LD]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[OSDev]]></category>

		<guid isPermaLink="false">http://galauner.de/wp/?page_id=5</guid>
		<description><![CDATA[Irgendwann, im Laufe eines Informatikstudiums, hört ma [...]]]></description>
			<content:encoded><![CDATA[<p>Irgendwann, im Laufe eines Informatikstudiums, hört man auch mal sowas ähnliches wie &#8220;Architektur von Rechnersystemen und Betriebsystemen&#8221;. Und da sich die dort vorgestellten Verfahren ja alle so einfach anhören und man sowas schon immer mal machen wollte, fängt man als Geek dann plötzlich an ein Betriebssystem zusammenzuhacken: Das GeexOS.</p>
<p>Wer jetzt schon heiß auf Code ist, kann ihn hier bekommen: <a href="http://github.com/G33KatWork/GeexOS" target="_blank">github</a></p>
<p>Die Architektur, die dieser Kernel haben soll, ist ein Mikrokernel. Bisher ist davon allerdings nicht viel implementiert, da ich mir seit ein paar Monaten versuche Gedanken über die Speicherverwaltung im Kernel zu machen und sowieso nicht immer Lust habe an diesem Projekt weiterzuarbeiten.</p>
<p>Aktuell Implementierte Features:</p>
<ul>
<li>Ein-/Ausgabe von Text über einen 80&#215;25 Zeichen Textmodus auf dem Monitor</li>
<li>Ein-/Ausgabe von Text über eine serielle Schnittstelle</li>
<li>Bootstrapping eines x86 Prozessors und Umgebung (Protected Mode, Interrupts, PIC, PIT)</li>
<li>Interrupthandling, welches bisher noch sehr Plattformabhängig ist</li>
<li>Ansätze eines HALs</li>
<li>Paging</li>
<li>Timer</li>
<li>Das Buildsystem, basierend auf GNU make</li>
</ul>
<p>Im master-Branch auf GitHub findet man noch einen implementierten Heap, den ich mitlerweile aber wieder weggeworfen habe, da ich ihn durch einen SLAB-Allocator mit etwas besserem Virtuellem Speichermanagement im Hintergrund ersetzen möchte.<br />
Eine weitere Designentscheidung, die ich im Züge des neuen Speichermanagements getroffen habe, ist das der Kernel auf einem 32 Bit System die vollen 32 Bit an virtuellem Speicher bekommen wird und nicht in den virtuellen Speicher eines jeden Prozesses eingeblendet wird. Dies geht zwar mit einem Performanceverlust einher, da ich bei jedem Systemaufruf oder Interrupt das Page Directory wechseln muss und somit der TLB (Translation Lookaside Buffer) geleert werden muss. Wie hoch dieser Verlust sein wird, weiß ich allerdings nicht. Mac OS X macht das auch so und das ist auch noch schnell.</p>
<p>Alle diese Änderungen befinden sich momentan im Branch 4gbKernel auf github.</p>
<p>Weitere geplante Features sind:</p>
<ul>
<li>Ein Scheduler mit Interprozesskommunikation über Shared Memory</li>
<li>Dieser Shared Memory kann auch auf anderen Rechnern liegen und das System kann somit verteilt werden</li>
<li>Einige Userspace System-Daemons, die Sachen wie das Prozessmanagement, Userspace Speicherverwaltung, Netzwerk, Dateisysteme etc. übernehmen</li>
<li>Einige Userspace Libs, die Posix implementieren, um GNU-Software ausführen zu können</li>
<li>Evtl. einen DOS-Kompatiblitätslayer</li>
</ul>
<p>Bis diese Sachen wirklich alle implementiert sind wird allerdings noch einiges an Zeit vergehen.</p>
<p><a rel="lightbox" href="http://www.geekatwork.de/wp-content/uploads/Bildschirmfoto-2009-12-18-um-20.58.00.png"><img class="alignnone size-medium wp-image-45" title="GeexOS 4gbKernel Branch" src="http://www.geekatwork.de/wp-content/uploads/Bildschirmfoto-2009-12-18-um-20.58.00-300x188.png" alt="GeexOS 4gbKernel Branch" width="300" height="188" /></a><br />
Screenshot des Aktuellen 4gbKernel-Branches in einem Qemu.</p>
<p><a rel="lightbox" href="http://www.geekatwork.de/wp-content/uploads/scheduling.png"><img class="alignnone size-medium wp-image-223" title="scheduling" src="http://www.geekatwork.de/wp-content/uploads/scheduling-300x188.png" alt="GeexOS Scheduler" width="300" height="188" /></a><br />
Screenshot mit kleinem Scheduler, der Kontextwechsel zwischen 2 Threads ausführt.</p>
<script type="text/javascript">
var flattr_wp_ver = '0.9.11';
var flattr_uid = 'G33KatWork';
var flattr_url = 'http://www.geekatwork.de';
var flattr_lng = 'en_GB';
var flattr_cat = 'text';
var flattr_tag = 'blog,wordpress,rss,feed';
var flattr_btn = 'large';
var flattr_tle = 'G33K @ Work';
var flattr_dsc = 'Basteleien eines Geeks';
</script>
<script src="http://api.flattr.com/button/load.js?v=0.2" type="text/javascript"></script> <p>Feel free to Flattr this post at <a href="http://flattr.com/" title="Flattr" target="_blank">flattr.com</a>, if you like it.</p> <p><a href="http://flattr.com/" title="Flattr" target="_blank"><img src="http://www.geekatwork.de/wp-content/plugins/flattrss/button-compact-static-100x17.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://www.geekatwork.de/projekte/geexos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
