Multicore - Scheduling
-
Hallöchen,
Mich würde mal interessieren, wie man Code auf mehreren Cores zum laufen bekommt. In PrettyOS wird sowas ja im Moment noch nicht unterstützt, scheint also nicht so einfach zu sein. Wie Scheduling grundsätzlich funktioniert, habe ich verstanden. Wie funktionierts mit mehreren Cores?
Grüße,
PI
-
Die Zuordnung, auf welchem Kern der Thread ausgeführt wird, macht das OS - die meisten OSs erlauben es aber die Zuordnung manuell festzulegen. Auch kann es sein, dass der Thread wechselnd auf verschiedenen Kernen ausgeführt wird (je nach deren Auslastung).
-
Das Prinzip ist gar nicht so schwer. Die weiteren Kerne/Prozessoren verhalten sich genau so wie der Erste. Sie führen einfach unabhängig voneinander Code aus dem Speicher aus. Jeder Kern ruft dann die Schedule Funktion auf, nimmt sich einen anderen Thread, und führt diesen aus.
Aber da geht dann das Problem auch schon los. Die Kerne laufen zwar unabhängig voneinander, greifen aber auf den gleichen Speicher zu. Da es also insbesondere dazu kommt das Kerne gleichzeitig Daten lesen/schreiben muss man an vielen Ecken Synchronisierungen einbauen.
-
Okay, dann mal anders: Ich habe ein OS und will Multi-Core Support. Wie bring ich die anderen Cores dazu, meinen Code auszuführen?
-
Dazu musst Du diese erstmal initialisieren, sprich: Stack, GDT, Paging, etc. pp.
Danach kannst Du die jeweiligen CPUs dirigieren
-
Gibts dazu irgendwelche hilfreichen Links?
-
Für Intel System:
[url=http://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html]Intel64 and IA-32 Architectures Software Developer's Manual
Volume 3A: System Programming Guide[/url]Für AMD ... google
-
AMD interessiert doch eh nicht :p
Vielen Dank
-
http://de.wikipedia.org/wiki/Semaphor_(Informatik)
http://de.wikipedia.org/wiki/Bulk_Synchronous_Parallel_Computer
http://de.wikipedia.org/wiki/Message_Passing_Interface
http://de.wikipedia.org/wiki/Hardwareseitiges_Multithreading
usw. usw....und viel weitere Theorie und Praxis aus der Parallelwelt, hat nicht so sehr viel mit Assembler zu tun, eher mit Nachrichten hin und herschicken, synchronisieren, natürlich Hardwarethreads und so Sachen.
-
Also so ganz werd ich daraus jetzt auch nicht schlau. Was ich suche ist eine kurze Hilfe ala "So kriegst du deinen Code parallel zum laufen". Wie das Scheduling und Synchronisation dann funktioniert ist mir erst mal nicht so wichtig. (Ich frage auch nur aus rein technischem Interesse.)
-
http://de.wikipedia.org/wiki/OpenMP
https://computing.llnl.gov/tutorials/openMP/
..mit threads
..http://stackoverflow.com/questions/1036467/parallel-api-for-c-c-on-windows
-
Ich meine natürlich schon als Programmierer eines Betriebssystems und nicht auf Userebene
-
Vielleicht hilft dir http://www.osdever.net/tutorials/view/multiprocessing-support-for-hobby-oses-explained weiter. Für mehr Details bzgl. Implementierung ist aber dann in der Regel das schon erwähnte Intel bzw. AMD Manual die richtige Lektüre.
-
Die Intel Docs sind doch das was Du suchst! Lesen musst Du dann nur noch selber..
Schau mal in den ACPI Abschnitt.
Was Du brauchst ist eine Initialisierungs-Routine für die APs und ein SIPI Call damit diese in die Initialisierungsroutine springen, erst danach kannst Du diese für Aufgaben nutzen.