전통적인 PC 병렬 포트는 MMCO가 아닌 in
/out
의 포트 입출력을 사용합니다. 외부 신호선은 I/O 레지스터에 직접 매핑되므로 단일 out
명령어는 8 개의 신호선을 모두 설정합니다. LED + 저항기를 배선하고 시험해 볼 수 있습니다. (재미있는 프로젝트)
This page has Linux, Windows 및 outb
을 사용하는 DOS 프로그램은 병렬 포트의 핀에 바이트를 넣습니다. 또한 USB 병렬 포트에는 동일한 외부 인터페이스가 있지만 중요한 내부 소프트웨어 인터페이스가 있다는 점을 포함하여 병렬 포트에 대한 소개 자료가 많이 있습니다. USB 포트는 in
/out
명령과 함께 작동하지 않습니다.
수있는 CPU 액세스 프린터 나는 당신이 CPU에서 저장 모든를 등록 x86 명령어를 실행할 수 있는지 묻는 것 같아 직접
번호에 대한 메모리 프린터 메모리로가는 길. 프린터가 데이터 버스트를 수신하는 중간에있을 경우, 병렬 포트의 핀에 바이트를 넣으면 그 바이트가 메모리로 복사됩니다. 하지만이를 설정하려면 프린터가 이해하는 통신 프로토콜에 상관없이 명령을 보내야합니다.
FTP 또는 웹 서버를 상상해보십시오. 원격 파일을 읽거나 쓸 수는 있지만 전송을 시작하려면 먼저 명령을 보내야하며 통신 링크 (네트워크 소켓)는 전송되는 데이터 만 전달합니다. 디스크 내용이나 RAM을 직접 읽지 않고 원격 컴퓨터의 프로그램과 대화하고 있습니다. Wikipedia's nice parallel port article points out로서
은 컴퓨터 유량 제어 -> 프린터는 프린터의 BUSY 핀을 디 어서 트함으로써 달성된다. 컴퓨터는 데이터 핀에 다음 바이트를 놓고 제어 레지스터에 out
으로 STROBE 핀을 설정합니다. (Wikipedia 기사에는 핀 - 레지스터 간 매핑이 있습니다.) 그런 다음 소프트웨어에서 BUSY 라인이 높고 낮은 상태가 될 때까지 폴링합니다.
한 번에 하나씩 I/O 포트에 바이트를 채우는 것을 "프로그래밍 된 I/O"라고합니다. 속도가 느리고 모든 CPU 시간을 사용합니다.
병렬 포트를 현대적인 컴퓨터에서 프로그래밍하는 다른 방법이 있습니다. 예를 들어, ECP은 동일한 물리적 병렬 포트를 완전히 별도로 프로그래밍하는 방법입니다.DMA를 사용할 수 있기 때문에 하드웨어에 바이트 버퍼를 제공하고 하드웨어가 손을 흔드는 대신 CPU가 parport를 폴링하는 대신 다른 작업을 수행 할 수 있습니다. 프린터가 프린터를 메모리에 저장할지 여부는 별도의 질문입니다.
기술적으로 CPU는 병렬 포트에 직접 액세스 할 수 없습니다. 액세스해야합니다 via the southbridge. 그러나 CPU 코어가 in
또는 out
명령을 실행할 때 하드웨어가이를 처리합니다.
BTW, PC 포트는 양방향입니다. 이더넷이 널리 보급되기 전에 두 대의 컴퓨터를 직렬 포트 또는 병렬 포트로 연결하여 파일을 전송하는 경우는 드문 일이 아니 었습니다. (이더넷 대신에 IP 패킷을 전송하는 링크를 사용하십시오.) 병렬 포트 (특히 ECP 사용시)는 직렬 (전형적인 PC 하드웨어의 경우 2.5MB/s 대 115kbps)보다 훨씬 빠릅니다. 병렬 포트는 잠재적으로 10Mbit/s 이더넷보다 훨씬 빠릅니다. PLIP에 대한 좋은 커널 드라이버가 있었기 때문에 리눅스에서 때때로 이것을 기억합니다.
각주 : 원격 메모리 (또는 그 반대로) 지역에서
"직접"복사가 called Remote DMA (RDMA)입니다. 대부분 하드웨어가 복사 명령을 시작하기위한 프로토콜 작업을 처리하고 원격 측에서 액세스 제어가 발생하지 않는다는 것을 의미합니다. InfiniBand는 고성능 컴퓨팅 및/또는 스토리지 서버용 RDMA와 관련된 잘 알려진 하드웨어 인터페이스 중 하나입니다.
Firewire 컨트롤러는 RDMA도 지원합니다. 호스트 메모리를 읽거나 쓰지 않는 신뢰할 수없는 장치의 컨텍스트 설명에 대해서는 https://en.wikipedia.org/wiki/DMA_attack을 참조하십시오.
제목은 병렬 포트 프로그래밍에 대해 묻고 있습니까? 질문의 본문과 관련이없는 것처럼 보입니다. –