![Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht](misc/logos/logo.png) |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 03.06.2010, 02:38 Titel: Jedes Bit der Festplatte lesen |
|
|
Hallo zusammen,
ist es mit freebasic möglich, jedes Bit der rotierenden Scheiben der Festplatte auszulesen?
Damit meine ich jetzt nicht binary oder input.
Oder muss ich es in Assembler bewerkstelligen? |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
MisterD
![](images/avatars/42860609841d97ce430990.jpg)
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 03.06.2010, 03:31 Titel: |
|
|
und was ist mit solid state disks? Oo _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
croco97
![](images/avatars/1678815801470b3485b679c.gif)
Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 03.06.2010, 04:50 Titel: |
|
|
Du kannst mit Freebasic die API deines OS benutzen und nur über die wirst du an die einzelnen Sektoren der Platte rankommen. Die Platte zu managen, das ist die ureigenste Aufgabe eines OS. Assembler nutzt dir dazu nichts.
Schau mal da rein. Das ist die Anleitung für Win NT/2000/XP:
http://www.codeguru.com/Cpp/W-P/system/misc/article.php/c5765
VG!
Croco |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
dreael Administrator
![](images/avatars/112279543641421ec80e8e2.gif)
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 03.06.2010, 20:43 Titel: |
|
|
Auf DOS-Ebene ist dies natürlich mittels INT 13h-Aufrufe möglich, wie dies beispielsweise mein Festplattenlöschtool auch macht. Bei Linux wird mittels Special Device /dev/sda, /dev/sdb usw. die Festplatte wie eine riesige Datei repräsentiert, auf welcher mit ganz normalen OPEN und SEEK darauf zugegriffen werden kann. Sinnvollerweise ist bei den heutigen Festplattengrössen SEEK mit 64-Bit-Zahl nötig, da man bei 32-Bit nur auf die ersten 2 GB draufkommt.
Unter laufendem Windows sind natürlich spezielle API-Aufrufe nötig, mit denen Du ähnlich FORMAT.EXE erst einmal das Disk-Device exklusiv locken musst und dann erst sektorenweise darauf herumhantieren kannst. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 09.06.2010, 18:20 Titel: |
|
|
Ich glaub, er will eher den datenstrom des Magnetkopfes einlesen., zumindest klingt es so, wenn man den text liest. Und da kann ich dir gleich sagen: Das funzt nicht, egal wie du das amchen willst, ohne die platte zu öffnen.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
croco97
![](images/avatars/1678815801470b3485b679c.gif)
Anmeldungsdatum: 04.11.2005 Beiträge: 260
|
Verfasst am: 10.06.2010, 07:40 Titel: |
|
|
ThePuppetMaster hat Folgendes geschrieben: | Ich glaub, er will eher den datenstrom des Magnetkopfes einlesen., zumindest klingt es so, wenn man den text liest. Und da kann ich dir gleich sagen: Das funzt nicht, egal wie du das amchen willst, ohne die platte zu öffnen.
MfG
TPM |
Dann wäre es tatsächlich eine typische E-Techniker-Aufgabe. Wäre ne interessante Frage, welche Messtechnik sich zwischen Controller und Lesekopf befindet. Schätze, das ist ein mehrstufiges System: Schon vor dem eigentlichen IDE- oder SATA-Controller befindet sich ein Vor-Controller, der den Datenstrom in ein proprietäres Format bringt.
VG!
Croco |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 10.06.2010, 17:02 Titel: |
|
|
Eigentlich nicht. Heuzutage wird das alles in einem Controler gemacht. Zwar befindet sich davor noch ein ziemlich schneller und rauscharmer Vorverstärker, aber im grossen und ganzen geschied alles im Hauptcontroler selbst.
Den Datenstrom könnte man theoretisch durchaus abgreifen, muss aber wohl mit einem extrem empfindlichem OP der so gut wie keine belastung auf dem Ausgang des vorverstärkers erzeugt, das Signal aufbereiten.
Hinzu kommt, das dieser sehr schnell sein mus, da die Daten mit einer wahnsinns Geschwindigkeit an kommen. Wenn man sich mal die Cache to Disk Geschwindigkeit im Datenblatt vor Augen führt (aktuell typische 3GBit/s), braucht man eine entsprechend schnelle Elektronik, die das ganze auch noch verarbeiten kann.
Übrigens, nur mal so am Rande: Es ist der BUS (ATA / SATA), der die geschwindigkeit der Platte begrenzt, nicht die Platte selbst, wie viele vermuten. Warum SSD's schneller sind als Scheiben Platte liegt nicht an der verwendeten Technologie ansich, sondern an der Art, wie auf die Daten zugegriffen wird. Bei einer Disk muss ein Lesekopf mechanisch auf die Position gebracht werden (das geschieht übrigens über einen Algo, der einen Beschleunigungswert für den Anstoss des Lesekopfes zur Position hin berechnet, damit nach dem Stromsmpuls der Lesekopf schon fast an der richtigen stelle stopt). Diese Positionierung kostet typsicherweise einige ms. Das nennt man in Fachkreisen dann die "seektime" bzw. Die zeit, die der Kopf benötigt um zur Datenposition zu springen.
Bei einer Elektronischen, bzw. IC / Chip Lösung, wird das ganze Elektronisch geregelt. Der Speicher wird einfach Adressiert. Da es sich hier um Transistoren, bzw. FET's handelt, deren Schaltgeschwindigkeit deutlich höher ist, als die mechanik des Lesekopfes, benötigt die Adressierung, bzw. das "seeking" so gut wie 0 Zeit.
Darum sind SSD's (Solid State Disk) auch leicht schneller. Dieser Vorteil wirkt sich noch deutlicher aus, wenn die Daten sehr stark Fragmentiert auf dem Speicher liegen.
Die Typische Disk muss dann quasi jeden Sektor / Block suchen, und kann erst dann die Daten bereit stellen. Trotz der hohen Datenrate von Cache to Disk bzw. Disk to Cache, drosselt die seektime diesen stark aus. Zwar ist das noch ncith ausschlaggebend für den Langsamen Transfert, aber ein grund, für lange Anfrage->Antwort Zeiten. Bei der SSD ist dies so gut wie garnicht vorhanden.
Der BUS (ATA/SATA) hingegen ist ein richtiges Nadelöhr. Das allein merkt man schon am Unterschied zwischen RAM und SSD. Das RAM kann derzeit mit mehreren GByte/sek lesen und schreiben. auch über das Netzwerk (GigaBit) sind höhere Datenraten möglich als über ATA/SATA. Und, wenn man jetzt noch den PCIe BUS in den Vergleich einbezieht, bei dem bei nutzung von mehreren Lanes, ebenfalls GByte's an Daten transferiert werden können, lässt sich deutlich der Unterschied aufzeigen.
Das Ganze ist übrigens auch ein grund, warum in CLuster und Grid-Computer Netzwerke kaum Festplatten direkt als Datenspeicher im Computer her halten, sondern NAS Systeme bzw. Disk-Arrays mit Seriellem SCSI oder noch wilderen BUS systemen wie z.B. FiberChannel, InfiniBand, FDDI, usw.
PS: Es gibt übrigens auch Festplatten mit Fiber Channel, die höhere Datenraten über den BUS ermöglichen. Die sind aber nicht ganz so günstig
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 26.10.2010, 17:43 Titel: |
|
|
Hust -> entschuldigung, das ich nochmal das alte Thema heraushole, aber ich hab mich jetzt mal mit der Festplatte beschäftigt, wie man diese per einem Mikrocontroller ansprechen kann "zum lesen, als auch zum schreiben".
Verstehe ich richtig, dass bei dem CHS (C für Cylinder, H für Head und S für Sektor) Verfahren, jedes Track "Spur" einer Scheibe, die selbe Anzahl von Sektoren hat, im Gegensatz zum LBA = "Linaer Block Adress", wo von innen nach außen bei der Scheibe, also bei den Tracks die Sektorenanzahl zunimmt?
Wie genau, wird es adressiert "es stehen ja 28 Bit" zur Verfügung.
Gibt auch schon ein 48 Bit Verfahren, aber so große Festplatten möchte ich nicht ansprechen.
Meine Erklärung zu den Zylindern einer Festplatte.
Alle Tracks, die übereinander liegen, bilden einen Zylinder "Dies ist bei unterschiedlichen Radius der Fall".
Demzufolge gibt doch die Zylinderanzahl an, wieviele Tracks insgesamt vorhanden sind "Egal ob die Scheibe nur oben beschrieben wird, oder beidseitig"
Durch Wahl des Zylinders und des jeweiligen Schreib-Lesekopfs, kann man schon mal diesen richtig ausrichten.
Cu Andy
Zuletzt bearbeitet von Andy19312 am 26.10.2010, 17:53, insgesamt einmal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 26.10.2010, 17:51 Titel: |
|
|
Das speicherverfahren auf der Platte unterliegt vollständig dem Hauptcontroler auf der Platine. Wie, wo, was genau auf die platte wann, weshalb und warum geschrieben wird, kannst du nur vom hersteller erfahren, von welchem du nichtmal informationen über den Spindelmotor-treiber bekommst, geschweige denn vom Hauptcontroller. Das ist ein mit sicherheit höchst gehütetes geheimniss.
Wenn, dann wirst du dir selbst ein verfahren ausdenken müssen, wie du adressierst, du den Kopf bewegst (vorzugsweise wohl mit schnellen DAC's anstat PWM) usw.
Einfach ausgedrückt .. du darfst dir die gesammte Steuerplatine selbst zam schustern, wenn du auf den typischen BUS verzichten willst, und direkt die daten vom Kopf lesen möchtest.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 26.10.2010, 18:02 Titel: |
|
|
dieses Thema handelt allerdings nicht davon, Daten vom Lesekopf zu verarbeiten, sondern mit dem hauptcontroller auf der Festplatte zu reden, welcher dann den rest macht.
Das ist allerdings recht simpel und geht im eigentlich, z.B. unter windows mit iodevicecontrol oder, wie schon dreael angemerkt hat, unter dox mit INT 13h aufrufe.
Mit iodevicecontrol kannst du (soweit ich mich noch recht daran erinnern kann) direkt mit dem controler reden. Das wäre dann im eigentlich das, was du vor hast.
eien µC lösung basiere dann auf dem ATA (was ich dir nur empfehlen kann, da SATA per AVR wohl kaum ansprechbar ist) basieren würde.
Hierfür kannst du dir lektüren über deren Standard, oder Datenblätter über CF Hardware-Systeme organisieren, welche das selbe BUS System (ATA) verwenden.
das hilft dann auch beim adressieren, lesen und schreiben weiter.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 26.10.2010, 18:06 Titel: |
|
|
Ok, danke Dir ThePuppetMaster.
Könntest Du mir erklären, was ein Zylinder ist?
Zitat: | Meine Erklärung zu den Zylindern einer Festplatte.
Alle Tracks, die übereinander liegen, bilden einen Zylinder "Dies ist bei unterschiedlichen Radius der Fall".
Demzufolge gibt doch die Zylinderanzahl an, wieviele Tracks insgesamt vorhanden sind "Egal ob die Scheibe nur oben beschrieben wird, oder beidseitig"
Durch Wahl des Zylinders und des jeweiligen Schreib-Lesekopfs, kann man schon mal diesen richtig ausrichten. |
Dann müsste doch:
Zylinder * Schreib/Leseköpfe * Sektoren * Sektorengröße = anzahl bytes ergeben, aber nur beim chs verfahren.
beim lba verfahren hat man doch mehr sektoren, wenn man von innen nach außen der Scheibe geht
Zuletzt bearbeitet von Andy19312 am 26.10.2010, 18:14, insgesamt einmal bearbeitet |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1875 Wohnort: D59192
|
Verfasst am: 26.10.2010, 18:13 Titel: |
|
|
http://lmgtfy.com/?q=festplatte+zylinder _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 26.10.2010, 18:15 Titel: |
|
|
eine scheibenringe.
Stell dir vor, du hast ringe die du ineinander legen kannst. das stellt deine festplattenscheibe dar. jeder ring entspricht einem track. Einer spur, wenn man so mag. auf jeder spur gibt es die sektoren. dies sidn kleine abschnitte wie stücke aus einem kuchen.
Jede scheibe ist zweiseitig. du kansnt also daten oben und unten speichern.
hast du jetzt jedoch kein platzmehr, muss eine 2te scheibe her. diese packst du einfach auf die bestehende drauf. und schon hast du einen 2ten' zylinder (zugegeben, einen sehr sehr flachen zylinder), auf deinen ersten zylinder drauf gepackt.
anders ausgedrückt ... scheibe = plattgedrückter zylinder auf dem 2seitig geschrieben und gelesen werden kann.
siehe hierzu auch: http://de.wikipedia.org/wiki/Festplatte#Physischer_Aufbau_der_Scheiben
zu deinem edit:
ja ... das ist richtig.
aber, da sich die heutige festplattentechnologie soweit entwickelt hat, das es keien brotkästen voller scheiben mehr gibt, sind zylnider mittlerweile nur noch 1, 2 (ganz selten bis 3, und noch seltener mehr) numeriert
grössere anzahl scheiben kommen eigentlich nru im server-festplattenbereich vor, wo die scheiben kleiner sind als für desktop pc's. da kommt es mehr auf geringeren energieverbrauch, und schnellere zugriffszeiten an, als um gehäusegrösse.
da die scheiben dort kleiner sind, braucht man mehr für die selbe datenmenge.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 26.10.2010, 18:34 Titel: |
|
|
Danke euch. Also wenn man so will, war das CHR Verfahren aufwendiger zu programmieren und deswegen durch das LBA Verfahren abgelöst worden, denn beim LBA Verfahren, werden ja die Sektoren linear durchnummeriert.
Demzufolge brauch man ja den entsprechenden Zylinder, Kopf, Sektor usw. nicht mehr auswählen, sondern würde doch durch den 28 Bit Code vom Festplatten eigenen Controller ausgewählt werden.
Habs grad mal ausgerechnet:
28 Bit = 268435455 Möglichkeiten.
Wenn man jetzt z.B. 512 Byte pro Sektor hat, dann wäre es 268435455*512 Byte = 137438952960 Bytes
137438952960/1024 = 134217727 Kilobyte
137438952960/1024/1024 = 131071 Megabyte und
137438952960/1024/1024/1024 = 127 Gigabyte maximal
;D
Ich glaub ich hab mir grad das leben selbst schwer gemacht |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
ThePuppetMaster
![](images/avatars/15203237124744b0302dc46.gif)
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 26.10.2010, 18:48 Titel: |
|
|
Naja... eiegntlich ist es mit dem CHS genauso wie mit dem LBA ... einzigster unterschied ist eigentlich, das LBA das ergebniss aus CHS ist.
beispiel.
Platte hat 2 Zylinder (2 scheiben) sowie 2 Köpfe für Oberseite und Unterseite
Pro Zylinder gibt es 10 spuren, welche je 100 sektoren besitzt. das sind dann 1000 Sektoren auf einer seite der festplatte. Folglich, 2000 Sektoren auf einer scheibe
CHS-Verfahren
Es soll folgende position erfasst werden:
Zylinder=1 (2te Platte)
Kopf=0 (oberseite)
Sektor=10
das LBA ergebniss daraus wäre:
1 (ziel-zylinder) * 10 (spuren pro zylinder) * 100 (Sektoren pro spur) * 2 (Köpfe pro zylinder)
+ 0 (ziel-kopf) * 10 (spuren pro zylinder) * 100 (Sektoren pro spur)
+ 10 (ziel-sektor) \ 100 (Sektoren pro spur)
+ 10 (ziel-sektor) modulo 100 (Sektoren pro spur)
= LBA Adresse
kurz zusammengefasst:
Es werden eigentlich immer nur offsetz ausgerechnet, welche immer feiner strukturiert zum ziel laufen.
kann man natürlich auch vereinfachen:
bekannt ist:
pro zylinder = 2000 Sektoren
pro kopf = 1000 sektoren
pro spur = 100 sektoren
LBA = 1 (ziel-Zylinder) * 2000 + 0 (ziel-Kopf) * 1000 + 10 (ziel-sektor)
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Andy19312
Anmeldungsdatum: 22.10.2005 Beiträge: 428
|
Verfasst am: 27.10.2010, 18:22 Titel: |
|
|
Wird eigendlich ein DVD Laufwerk auch über das LBA Verfahren angesprochen?
Edit: Da zwar auf einigen Hompages, was über das Command Register geschrieben wird, aber nicht über alle Befehle und was für ein 1 Byte Code es ist, so frage ich mich, wo ich die ganzen Befehle herbekomme fürs Command Register.
Im Command Register, kann man bestimmt abfragen, wie der Hersterller und der Typ der Festplatte heißt und wieviele Sektoren "Sektorengröße" die Festplatte hat.
Hab das im Internet gefunden:
http://www.t13.org/documents/UploadedDocuments/docs2006/D1699r3f-ATA8-ACS.pdf |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|