Die unterste Ebene?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kornyclown

Ich hab mal ne Frage ohne wirklichen Anlass, einfach des Interesses halber.
Was ist eigentlich die unterste Ebene die ich mit Python ansprechen kann?

Ums genauer zu machen:
Mit den mit Python mitgelieferten Pre-built-functions kann man ja schon ne menge tolle Sachen machen aber was wenn ich darüber hinaus will.
Hab ich mit Python vollen Zugriff auf mein Betriebssystem, oder gar aufs BIOS (mal ganz blöd gefragt).
BlackJack

@kornyclown: Mit dem `ctypes`-Modul kannst Du auf dynamisch ladbare Bibliotheken zugreifen. Eventuell könnte man sogar handgebastelten Binärcode in einem `str` beziehungsweise `bytes` über `ctypes` aufrufen. Damit wären dann zum Beispiel auf Systemen die Softwareunterbrechungen für Systemaufrufe verwenden, direkte Systemaufrufe möglich. Ob Du ans BIOS kommst wäre dann keine Frage von Python mehr sondern ob das Betriebssystem Dich da überhaupt heran lässt.
kornyclown

Und wäre das praktikabel/sinnvoll. Sowohl das ctypes als auch die Frage nach dem BIOS.
Sagen wir mal ich möchte ein Skript schreiben das es möglich macht das Computing meines Prozessors hörbar zu machen, ich müsste also die Aktivität meiner CPU irgendwie an meine Soundkarte raus schicken (und natürlich umrechnen/umwandeln etc). Is ein seltsames Beispiel, weil wer braucht sowas aber es geht mir ja nur um die Möglichkeiten und das grundsätzliche Verständniss.
deets

Fuer sowas ist erstmal zu klaeren, wer dir diese Information zur Verfuegung stellen kann. Und das haengt vom Betriebssystem ab. Unter Linux waere es voellig simpel & mit Standard-Bordmitteln zu erreichen, weil diese Informationen im /proc-Verzeichnisbaum irgendwo stehen.

Grundsaetzlich gilt: mit Python alleine laesst sich schon eine Menge machen, und es laesst sich sehr leicht erweitern, wenn man bestimmte Funktionalitaeten haben will.

Es ist eher nicht geeignet, selbst Systemkomponente zu sein - also einen Treiber fuer den Kernel zu schreiben zB.
BlackJack

@kornyclown: Definiere mal praktikabel und sinnvoll. Und unter welchen Bedingungen? An das BIOS könntest Du unter Linux zum Beispiel gar nicht ran kommen, egal welche Programmiersprache, weil da das Betriebssystem dazwischen steht. Unter Windows geht es vielleicht noch, weil DOS-Programme das ja oft machen. Da weiss ich nicht in wie weit aktuelle Windows-Versionen direkte BIOS-Aufrufe ermöglichen oder ob da eine Emulationsschicht zwischen liegt. Was für das Programm ja fast egal wäre.

Und sinnvoll? Wieso muss das nur Python sein? Es wäre sicher einfacher eine kleine dynamisch ladbare Bibliothek mit einer C-kompatiblen API zu schreiben um zum Beispiel Systemaufrufe zu machen und die dann mit `ctypes` anzubinden.

Zu dem Beispiel: Was definierst Du als „die Aktivität” der CPU? Und was hat das BIOS damit zu tun? An die Soundkarte kommst Du mit der entsprechenden API auf dem System auf dem das laufen soll. Das hat auch nichts mit dem BIOS zu tun.

Du hast eine Frage ohne Anlass, aber eigentlich hast Du noch nicht einmal eine Frage. Zumindest keine die so scharf umrissen wäre, dass man sie auch nur ansatzweise sinnvoll beantworten könnte.

Man kann mit `ctypes` im Grunde beliebige Bytes als Maschinencode ausführen lassen. Damit wäre fast alles möglich was man auch in Assembler schreiben kann.
kornyclown

Zugegeben die Frage ist nich so astrein, das liegt hauptsächlich daran dass ich nich direkt aus dem IT und Programmier Gewerbe komme. Ich weiß grundlegend was das BIOS is und was es für Unterschiede der verschiedenen Betreibssysteme gibt aber wie alles ganz genau passiert über Busse, ID's, Addressen, Schnittstellen, Roots und Hubs...weiß ich nich bis ins Detail. Ich bin halt keine IT Fachkraft sondern 3D-Grafiker und bin darüber auf Umwege an Python gekommen. Deshalb fällt es mir schwer meine Frage richtig zu formulieren.
Was mich halt interessiert hätte ist, was steht in all den Pre-built functions z.B. wenn ich mit Hardware kommunizieren will. Wenn ich nen simplen Player haben will der einfach Audiofiles abspielen können.
Diese Audiofiles besteht aus Daten, Samples, kbit/s, etc. Irgendwie muss ich dass ja an die Boxen schicken (Peripherie). Das wäre in meinem Fall über USB (Schnittstelle) und der sitz auf dem Motherboard (Hardware). Auf welcher Ebene muss ich diese Komponenten ansprechen damit ich hinten Musik raus kriege?
lunar

@kornyclown: Man würde in diesem Fall eine der vielen Audio-Bibliotheken nutzen, beispielsweise gstreamer oder Phonon, sich also allgemein auf einer viel höheren Ebene bewegen als Du skizziert hast. Wie die Lautsprecher angeschlossen sind, ist dabei völlig egal, die Aufgabe, die Audiodaten in an das passende Zielgerät im richtigen Format zu senden, übernimmt die Bibliothek.
BlackJack

@kornyclown: Das Beispiel Audioplayer ist schon sehr weit weg von der Hardware. Man spricht da normalerweise die API an, die das Betriebssystem für Audioausgabe anbietet, oder eine Bibliothek die noch einmal eine Schicht drüber legt. Entweder um mehr Komfort oder um Plattformunabhängigkeit zu bieten. Einem Audioplayer sollte egal sein ob die Ausgabe zum Beispiel über eine PCI-Soundkarte oder ein USB-Audio-Gerät geht.

Wo man heute noch ”direkt” mit der Hardware kommunizieren möchte sind eher kleine Schaltungen die man an den Parallelport hängt und dort einzelne Leitungen ein und ausschalten kann. Selbst das geht bei modernen PC-Betriebssystemen nicht mehr direkt sondern braucht einen Treiber, weil das Betriebssystem die Hardware von den Benutzerprogrammen abschirmt.

Auf die unterste Ebene aus Deiner Frage im Betreff kommt man bei PCs im Grunde nur noch, wenn man direkt am Betriebssystem oder Treiber dafür entwickelt. Anders sieht das im Embedded-Bereich aus, weil man dort entweder ohne Betriebssystem oder mit eher primitiven Vertretern dieser Gattung arbeitet. Aber selbst dort würde man ein USB-Audio-Gerät wahrscheinlich über einen USB-Stack ansprechen, den jemand anders implementiert hat, um das Rad nicht noch einmal neu erfinden zu müssen. Ansonsten könnte man simple Sample-Ausgaben bei solchen Systemen auch über E/A-Bausteine machen. Dazu braucht man dann Timer-Bausteine und vielleicht bietet das System auch DMA, aber das sind dann alles technische Details die jeweils spezifisch für das System oder die Plattform sind.
Antworten