Idézet: Gyula2222 - Dátum: 2012. 05. 12. 10:19
Praktikus, mielőtt okoskodni kezdenél, jó tudást szerezni.
És mégpraktikusabb, mielőtt betámadnál valakit, jó alaposan utánanézni a témának, különben könnyen nevetségessé válsz.
- A HDD nem megszakít, hanem használati engedélyt kér a megszakításvezérlőtől. És persze nem akkor, amikor már nincs szüksége külső kommunikációra.
Nem támadtam be, pusztán szóltam, hogy nem lesz gyakorlati különbség a SATA II-es és III-as diszk között.
Hogy támadásnak vetted azt, hogy nekem más a véleményem, az a te bajod.
Igen, jó volna tudást szerezned.
Ne kellejen már alap dolgokat bizonygatnom, mert 20 éves technikánál elakadtál, és azóta is ott élsz. Legalább 20 éve van bus mastering IDE vezérlő, és képzeld nem megszakításokkal jelzi, ha a memóriához akar férni (az még az ISA buszon volt szokás, de már 20 éve PCI buszt használnak, sőt már el is avult, és PCIe-t). Azt jelzi megszakítással, ha végzett a feladatával.
Így a CPU-nak nem kell a diszkre figyelnie, közben egész mást dolgozhat, és amikor bejön a diszk megszakítása, akkor elegendő ránéznie, hogy "na, komám, sikerült-e a művelet, vagy hiba történt?".
Nézz utána, kérlek, mi is az a bus mastering IDE vezérlő, és hogyan működik, ha nekem nem hiszel.
Röviden annyi, hogy a CPU felprogramozza a diszk vezérlő DMA egységét (ez nem az alaplapi DMA vezérlő, a diszk vezérlőek van egy saját!), hogy a memóriában mely terültet használja, majd megmondja a paracsot, amit hajtson végre (hogy pl. olvasson vagy írjon). Ezek után a diszk vezérlő elvégzi a parancsot a CPU közreműködése nélkül (emlékezz: saját DMA vezérlője van, ami már a parancs hívása előtt fel lett programozva). Amikor kész (vagy hiba történt), akkor küld egy megszakítást, amivel jelzi, hogy "hahó, készen vagyok a munkával". Közben a CPU-nak nem kell vele foglalkoznia, csak a legelején a diszk vezérlő felprogramozásakor, meg a legvégén (ezt jelzi az IDE vezérlő egy megszakítással), amikor meg kell vizsgálni, hogy sikeres volt-e a művelet.
Itt egy rövid leírás, az osdev.org-on találtam a linkjét, öszesen 6 oldal.
A táblázatokat, regisztereket nem kell figyelned, a lényeg a 3.1-es pontban van:
Idézet
3.1. Standard Programming Sequence
To initiate a bus master transfer between memory and an IDE DMA slave device, the following steps are
required:
1) Software prepares a PRD Table in system memory. Each PRD is 8 bytes long and consists of an
address pointer to the starting address and the transfer count of the memory buffer to be
transferred. In any given PRD Table, two consecutive PRDs are offset by 8-bytes and are aligned
on a 4-byte boundary.
2) Software provides the starting address of the PRD Table by loading the PRD Table Pointer
Register . The direction of the data transfer is specified by setting the Read/Write Control bit.
Clear the Interrupt bit and Error bit in the Status register.
3) Software issues the appropriate DMA transfer command to the disk device.
4) Engage the bus master function by writing a '1' to the Start bit in the Bus Master IDE Command
Register for the appropriate channel.
5) The controller transfers data to/from memory responding to DMA requests from the IDE device.
6) At the end of the transfer the IDE device signals an interrupt.
7) In response to the interrupt, software resets the Start/Stop bit in the command register. It then
reads the controller status and then the drive status to determine if the transfer completed
successfully.
Az első 4 pont a diszk vezérlő felprogramozása.
Az 5. pontban a diszk vezérlő végrehajtja a parancsot.
A 6. pontban küld egy megszakítást, hogy kész.
A 7. pontban a diszk vezérlő leprogramozása és annak vizsgálata, hogy sikerrel vagy hibával végződött-e a művelet.
Reszelhetjük még tovább a fingot, Gyula, de a tények makacs dolgok.