"메인보드내의 DMA콘트롤러 말고, PCI주변기기내에 있는 DMA Controler가(랜카드) CPU에게 DMA사용 허가를 받지 않고 PCI Bus Matering protocol을 사용하여, PCI Bus를 사용하여 메모리에 자료를 전송할 수 있다. "
라고 알고 있는데, 이것이 사실인지? 그리고, 만일 이것이 사실이라면, 그 방법은 어떠한 것인지가 궁금합니다. 사실 이문제는 몇년전에 의문을 품었던 것인데, 딱히 질문할 곳도 없고, 그 당시 주요 이슈는 아니었기에 그냥 넘어갔었습니다. 요즘 KLDP BBS의 수준을 보면 :D 혹시 답변이 있지 않을까? 해서 질문합니다.
* 사실, 제가 PCI Bus mastering 프로토콜 자체를 잘 모르는 터라 질문에 필요한 기초 지식조차도 없는듯하기도 합니다. :(
PCI Bus mastering protocol이란 용어는 잘 모르겠지만, 아는대로 설명하겠습니다.
PCI Bus에는 Arbiter라는게 있습니다. 모든 PCI bus master들은 이 Arbiter와 REQ#와 GNT# 2개의 signal로 연결되어 있습니다.
PCI bus master가 bus를 사용하고 싶으면 REQ#를 assert한 후, arbiter가 해당 GNT#를 assert해 줄 때까지 기다리게 됩니다.
즉, arbiter가 한 시점에 하나의 pci bus master만이 bus를 사용하게끔 조정해 주는 것이죠.
CPU도 하나의 bus master에 불과하므로 CPU에 허가를 받는게 아니라 이 arbiter에게 허가를 받습니다.
그리고 보통 이 arbiter는 host/PCI bridge에 포함되어 있다고 합니다.
아 그리고 메인보드의 DMA controller는 PCI와는 전혀 상관없는 ISA장치입니다.
네트웍커널 쪽 분석을 하다가 모듈 프로그래밍에 관심이 생겨
잠시 찾아 보았는데.
DMA(Direnct Memory Access)
cpu 의 개입없이 device와 memory간의 전송이 일어 난다고 합니다.
이부분에 대해 짧게 적어보면...
devie내의 register에 memory상의 frame buffer의 physical주소공간을
보관하고 전송 하고자 할때 전송을 담당한 register를 세팅함으로써
bus request를 하게 됩니다
그후 cpu의 관여없이 memory상에 전송을 하게 된다고 합니다
전송이 끝나면 interrupt를 발생시켜 cpu에게 전송이 마쳤음을 알리게
된다고 합니다
이상 자세한 내용은
linux programming bible 2nd edtion -글로벌-
을 참고 하시기 바랍니다.
아 그리고 메인보드의 DMA controller는 PCI와는 전혀 상관없는 ISA장치입니다.
먼저 답변에 감사합니다.
부가적으로 질문이 있습니다.
순수한 제 상상으로 말씀드리자면, PCI보드에서는 모든 장치들이 PCI버스를 사용할 것 같은데요. 아닌가 보군요.
메인보드의 DMA controller가 ISA장치라면, 흔히 언급되는(PC의) PCI보드는 ISA와 PCI버스를 둘다 가지고 있다는 건가요? 음 그렇다면, 보드내의 일부 칩셋(on board DMA controller)들은 ISA버스를 사용하고, 메인메모리는 PCI버스를 사용하고, 또 ISA버스도 사용해야 할듯(?)하고, PCI 슬롯에 꽂히게될 PCI지원장치들은 PCI버스를 사용한다는 얘기인가요? 정리좀 해주세요 :lol:
* 참고: board내의 DMA controller와 pci 주변장치내에 있는 dma controller를 구분하는것은 중요요소라서 위와 같이 표기합니다.
SCSI도 이렇죠. SCSI도 하나의 버스입니다만, SCSI컨트롤러가 PCI버스에
연결되어있죠.. 이와 마찬가지...
mach wrote:
sliver wrote:
아 그리고 메인보드의 DMA controller는 PCI와는 전혀 상관없는 ISA장치입니다.
먼저 답변에 감사합니다.
부가적으로 질문이 있습니다.
순수한 제 상상으로 말씀드리자면, PCI보드에서는 모든 장치들이 PCI버스를 사용할 것 같은데요. 아닌가 보군요.
메인보드의 DMA controller가 ISA장치라면, 흔히 언급되는(PC의) PCI보드는 ISA와 PCI버스를 둘다 가지고 있다는 건가요? 음 그렇다면, 보드내의 일부 칩셋(on board DMA controller)들은 ISA버스를 사용하고, 메인메모리는 PCI버스를 사용하고, 또 ISA버스도 사용해야 할듯(?)하고, PCI 슬롯에 꽂히게될 PCI지원장치들은 PCI버스를 사용한다는 얘기인가요? 정리좀 해주세요 :lol:
* 참고: board내의 DMA controller와 pci 주변장치내에 있는 dma controller를 구분하는것은 중요요소라서 위와 같이 표기합니다.
보통 PC는 예전의 ISA 장치들을 지원하기 위해서 ISA bus도 가지고 있습니다.
하지만 주(main) bus는 PCI bus이기 때문에 PCI Bus와 ISA Bus를 연결을 해야 합니다. 이 연결해 주는 부분이 ISA bridge입니다.
이 bridge가 PCI신호를 ISA로, ISA신호를 PCI로 바꿔주는 역할을 하죠.
DMA controller는 PCI에도 해당되는 내용입니다
PCI bus에 달려있는 target chip들중 DMA master기능이 있는 chip들은 DMA controller가 안에 내장되어 있어서 REQ# 신호를 arbiter(보통 PCI bridge)로 전달하고 다른 PCI bus를 공유하는 master들이 PCI bus 사용을 끝나면 arbiter가 ACK# 신호를 그 target chip에 전달하여 PCI bus 사용권한을 줍니다.
그러면, target chip은 PCI bus를 자기가 사용해도 되는걸로 판단하고 data transfer를 위해 DMA controller를 기동하게 됩니다
참고로 REQ#와 ACK#신호의 갯수는 PCI bridge가 그 신호들을 얼마나 갖고있는가에 따라서 결정되고 PCI bridge1개와 n개의 PCI target chip들이 각각 1:1로 연결되어 있습니다. 예, REQ1#, ACK1#, REQ2#, ACK2#,,, REQn#, ACKn#
하지만, target chip들중에 DMA master기능이 없는 chip은 위와같이 동작할 수 없으며 data transfer시 CPU의 software가 직접 그 data를 chip에서 읽어서 메모리에 저장해야 합니다.
DMA mastering기능이 있는지 없는지는 각 chip의 datasheet을 참조하시면 됩니다
하드웨어적으로 PCI 주변기기와 메인보드 칩셋간에 신호를 주고 받는 것을
하드웨어적으로 PCI 주변기기와 메인보드 칩셋간에 신호를 주고 받는 것을 말씀하시나요?
[quote="방준영"]하드웨어적으로 PCI 주변기기와 메인보드 칩셋간에
예
라고 알고 있는데, 이것이 사실인지? 그리고, 만일 이것이 사실이라면, 그 방법은 어떠한 것인지가 궁금합니다. 사실 이문제는 몇년전에 의문을 품었던 것인데, 딱히 질문할 곳도 없고, 그 당시 주요 이슈는 아니었기에 그냥 넘어갔었습니다. 요즘 KLDP BBS의 수준을 보면 :D 혹시 답변이 있지 않을까? 해서 질문합니다.
* 사실, 제가 PCI Bus mastering 프로토콜 자체를 잘 모르는 터라 질문에 필요한 기초 지식조차도 없는듯하기도 합니다. :(
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
PCI Bus mastering protocol이란 용어는 잘 모르겠지만
PCI Bus mastering protocol이란 용어는 잘 모르겠지만, 아는대로 설명하겠습니다.
PCI Bus에는 Arbiter라는게 있습니다. 모든 PCI bus master들은 이 Arbiter와 REQ#와 GNT# 2개의 signal로 연결되어 있습니다.
PCI bus master가 bus를 사용하고 싶으면 REQ#를 assert한 후, arbiter가 해당 GNT#를 assert해 줄 때까지 기다리게 됩니다.
즉, arbiter가 한 시점에 하나의 pci bus master만이 bus를 사용하게끔 조정해 주는 것이죠.
CPU도 하나의 bus master에 불과하므로 CPU에 허가를 받는게 아니라 이 arbiter에게 허가를 받습니다.
그리고 보통 이 arbiter는 host/PCI bridge에 포함되어 있다고 합니다.
아 그리고 메인보드의 DMA controller는 PCI와는 전혀 상관없는 ISA장치입니다.
답변
네트웍커널 쪽 분석을 하다가 모듈 프로그래밍에 관심이 생겨
잠시 찾아 보았는데.
DMA(Direnct Memory Access)
cpu 의 개입없이 device와 memory간의 전송이 일어 난다고 합니다.
이부분에 대해 짧게 적어보면...
devie내의 register에 memory상의 frame buffer의 physical주소공간을
보관하고 전송 하고자 할때 전송을 담당한 register를 세팅함으로써
bus request를 하게 됩니다
그후 cpu의 관여없이 memory상에 전송을 하게 된다고 합니다
전송이 끝나면 interrupt를 발생시켜 cpu에게 전송이 마쳤음을 알리게
된다고 합니다
이상 자세한 내용은
linux programming bible 2nd edtion -글로벌-
을 참고 하시기 바랍니다.
[quote="sliver"]아 그리고 메인보드의 DMA contro
먼저 답변에 감사합니다.
부가적으로 질문이 있습니다.
순수한 제 상상으로 말씀드리자면, PCI보드에서는 모든 장치들이 PCI버스를 사용할 것 같은데요. 아닌가 보군요.
메인보드의 DMA controller가 ISA장치라면, 흔히 언급되는(PC의) PCI보드는 ISA와 PCI버스를 둘다 가지고 있다는 건가요? 음 그렇다면, 보드내의 일부 칩셋(on board DMA controller)들은 ISA버스를 사용하고, 메인메모리는 PCI버스를 사용하고, 또 ISA버스도 사용해야 할듯(?)하고, PCI 슬롯에 꽂히게될 PCI지원장치들은 PCI버스를 사용한다는 얘기인가요? 정리좀 해주세요 :lol:
* 참고: board내의 DMA controller와 pci 주변장치내에 있는 dma controller를 구분하는것은 중요요소라서 위와 같이 표기합니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
그건 ISA BUS 컨트롤러가 PCI에 연결된 것이라고 보면 됩니다.
그건 ISA BUS 컨트롤러가 PCI에 연결된 것이라고 보면 됩니다.
SCSI도 이렇죠. SCSI도 하나의 버스입니다만, SCSI컨트롤러가 PCI버스에
연결되어있죠.. 이와 마찬가지...
Written By the Black Knight of Destruction
보통 PC는 예전의 ISA 장치들을 지원하기 위해서 ISA bus도 가지
보통 PC는 예전의 ISA 장치들을 지원하기 위해서 ISA bus도 가지고 있습니다.
하지만 주(main) bus는 PCI bus이기 때문에 PCI Bus와 ISA Bus를 연결을 해야 합니다. 이 연결해 주는 부분이 ISA bridge입니다.
이 bridge가 PCI신호를 ISA로, ISA신호를 PCI로 바꿔주는 역할을 하죠.
그림으로 그릴려고 했는데, 공백을 무시하고 출력해 버리는군요 :(
DMA controller는 PCI에도 해당되는 내용입니다PCI bu
DMA controller는 PCI에도 해당되는 내용입니다
PCI bus에 달려있는 target chip들중 DMA master기능이 있는 chip들은 DMA controller가 안에 내장되어 있어서 REQ# 신호를 arbiter(보통 PCI bridge)로 전달하고 다른 PCI bus를 공유하는 master들이 PCI bus 사용을 끝나면 arbiter가 ACK# 신호를 그 target chip에 전달하여 PCI bus 사용권한을 줍니다.
그러면, target chip은 PCI bus를 자기가 사용해도 되는걸로 판단하고 data transfer를 위해 DMA controller를 기동하게 됩니다
참고로 REQ#와 ACK#신호의 갯수는 PCI bridge가 그 신호들을 얼마나 갖고있는가에 따라서 결정되고 PCI bridge1개와 n개의 PCI target chip들이 각각 1:1로 연결되어 있습니다. 예, REQ1#, ACK1#, REQ2#, ACK2#,,, REQn#, ACKn#
하지만, target chip들중에 DMA master기능이 없는 chip은 위와같이 동작할 수 없으며 data transfer시 CPU의 software가 직접 그 data를 chip에서 읽어서 메모리에 저장해야 합니다.
DMA mastering기능이 있는지 없는지는 각 chip의 datasheet을 참조하시면 됩니다
감사
감사합니다.
좋은 답변에 다시 한번 감사드립니다.
:lol:
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
댓글 달기