운영체제 기본/장치 제어와 입출력: 두 판 사이의 차이
BIOS 부팅·i8042 키보드 각론의 새 문서명으로 내부 링크 갱신 |
문장형 절 제목을 직관적인 명사형으로 통일하고 기존 절 링크 보존 |
||
| 22번째 줄: | 22번째 줄: | ||
DMA는 데이터 이동 방식이고 폴링과 인터럽트는 상태를 확인하거나 사건을 알리는 방식이다. DMA 완료를 폴링으로 확인할 수도 있다. 네트워크 수신과 저장장치 블록 전송은 대표적인 용도지만, 모든 전송에 DMA가 필요한 것은 아니다. | DMA는 데이터 이동 방식이고 폴링과 인터럽트는 상태를 확인하거나 사건을 알리는 방식이다. DMA 완료를 폴링으로 확인할 수도 있다. 네트워크 수신과 저장장치 블록 전송은 대표적인 용도지만, 모든 전송에 DMA가 필요한 것은 아니다. | ||
=== | <span id="주소와_일관성과_전송_비용"></span> | ||
=== DMA의 주소 변환·일관성·전송 비용 === | |||
CPU의 가상 주소, CPU의 물리 주소, 장치의 DMA 주소는 구별해야 한다. 단순한 시스템에서는 DMA 주소와 물리 주소가 같지만 일반적으로 이를 가정할 수 없다. 입출력 메모리 관리 장치인 IOMMU(Input-Output Memory Management Unit)는 장치의 주소를 물리 메모리로 변환하고, 설정에 따라 접근 가능한 영역을 제한하는 데에도 쓰인다. 모든 시스템에 IOMMU가 있는 것은 아니다.<ref name="dma-map" /> | CPU의 가상 주소, CPU의 물리 주소, 장치의 DMA 주소는 구별해야 한다. 단순한 시스템에서는 DMA 주소와 물리 주소가 같지만 일반적으로 이를 가정할 수 없다. 입출력 메모리 관리 장치인 IOMMU(Input-Output Memory Management Unit)는 장치의 주소를 물리 메모리로 변환하고, 설정에 따라 접근 가능한 영역을 제한하는 데에도 쓰인다. 모든 시스템에 IOMMU가 있는 것은 아니다.<ref name="dma-map" /> | ||
| 32번째 줄: | 32번째 줄: | ||
== 사건 통지와 인터럽트 == | == 사건 통지와 인터럽트 == | ||
=== | <span id="실행_흐름과_독립적인_사건의_통지"></span> | ||
=== 비동기 사건과 인터럽트 === | |||
키보드 입력, 네트워크 패킷 도착, 저장장치의 입출력 완료는 실행 중인 프로그램의 명령 순서와 독립적으로 발생한다. '''하드웨어 인터럽트는 사건을 CPU에 알리고 운영체제가 처리할 기회를 만드는 통지 수단'''이다. 키보드의 입력 바이트를 읽거나 패킷을 처리하는 일, 완료된 요청을 확인하는 일은 통지를 받은 뒤 각 처리기가 수행한다. 스케줄링과 선점은 그 활용 중 하나이며, 모든 인터럽트가 CPU 양보를 목적으로 발생하지는 않는다. | 키보드 입력, 네트워크 패킷 도착, 저장장치의 입출력 완료는 실행 중인 프로그램의 명령 순서와 독립적으로 발생한다. '''하드웨어 인터럽트는 사건을 CPU에 알리고 운영체제가 처리할 기회를 만드는 통지 수단'''이다. 키보드의 입력 바이트를 읽거나 패킷을 처리하는 일, 완료된 요청을 확인하는 일은 통지를 받은 뒤 각 처리기가 수행한다. 스케줄링과 선점은 그 활용 중 하나이며, 모든 인터럽트가 CPU 양보를 목적으로 발생하지는 않는다. | ||