인프런 커뮤니티 질문&답변

sdfjo1565님의 프로필 이미지

작성한 질문수

곰책으로 쉽게 배우는 최소한의 운영체제론

인터럽트에서 DirectX까지

제가 이해한게 맞는지 궁금합니다. (비디오 카드에 output)

해결된 질문

24.11.05 01:07 작성

·

30

·

수정됨

0

 

1. output을 위한 api를 호출한다.

 

2. kernel 모드로 진입을 하며, 해당 기능의 system call을 수행한다.

 

3. 보낼 데이터를 비디오 카드(외부장치)가 예약한 메모리 영역에 저장 후,

interrupt를 건다. -> 여기서 어떤 인터럽트를 왜 거는지 잘 모르겠습니다.

dma 기능이 있는 경우.

  • i/o manager가 dma에게 작업을 맡긴다.

dma 기능이 없는 경우.

  • i/o manager의 스케줄링에 따라 cpu가

    driver의 함수를 이용 해 비디오 카드에 데이터 전송.

 

4. 비디오 카드의 작업이 끝나면 비디오 카드는 cpu에게 작업완료 인터럽트를 건다.

dma가 있는 경우는 비디오 카드가 dma에게 작업완료 메시지를 보내고 dma가 작업완료 인터럽트 발생시킴.

 

  • 추가질문 입니다.

강의의 interrupt에서 directX까지 20:00에, system call이 메모리에 video card에 데이터를 전송 할 때 매 번 그런 건 아니지만, 메모리에 저장하고 interrupt를 건다고 하셨습니다.

 

메모리에 따로 다시 저장하지 않고, 장치에 전송 할 수도있나요?

 

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

2024. 11. 05. 14:27

  1. 송신 데이터 복사가 완료됐음을 알리기 위한 정도로 생각하시면 되겠습니다. 아직 복사가 끝나지도 않았음에도 데이터를 읽다가 섞여서 오류가 날 수도 있습니다.

그 외 나머지는 생각하시는 것이 맞겠습니다.

끝으로 장치에 정보를 보내는 일의 구체적인 구현 형태는 장치마다 차이가 있을 수 있습니다만 메모리를 통하는 구조는 달라지지 않겠습니다. 참고하시기 바랍니다. 😄

sdfjo1565님의 프로필 이미지
sdfjo1565
질문자

2024. 11. 05. 18:38

감사합니다

0

인프런 AI 인턴님의 프로필 이미지

2024. 11. 05. 01:11

안녕하세요, 인프런 AI 인턴입니다. sdfjo1565님께서 작성하신 비디오 카드에 출력 데이터를 전송하는 과정에 대한 설명이 매우 디테일하네요. 질문한 내용에 대해 간단하게 설명드리겠습니다.

  1. output을 위한 API를 호출: 이는 응용 프로그램에서 비디오 장치로 데이터를 보내기 위해 호출하는 함수라는 뜻으로 이해할 수 있습니다.

  2. kernel 모드로 진입 및 system call 수행: 사용자 모드에서 커널 모드로 전환되는 과정이며, 운영 체제의 중요한 기능에 접근하기 위해 시스템 호출을 사용합니다.

  3. 데이터 전송 방식:

    • DMA(Direct Memory Access) 기능이 있을 경우: DMA는 CPU의 개입 없이 메모리와 장치 간의 데이터 전송을 가능하게 하여 효율적인 전송을 돕습니다.
    • DMA 기능이 없을 경우: 이 경우, I/O 매니저 또는 소프트웨어가 비디오 카드와 CPU 간의 데이터 전송을 처리합니다. 인터럽트를 사용하여 작업의 시작을 알릴 수 있습니다.
  4. 비디오 카드가 작업 완료 후 CPU에 인터럽트: 비디오 카드가 작업을 완료하면 CPU에 이를 알리기 위해 인터럽트를 발생시킵니다. 이는 CPU가 다음 작업을 수행할 준비가 되었음을 의미합니다.

이 설명이 전반적으로 올바릅니다. 비디오 카드의 I/O 작업은 DMA 기능의 유무에 따라 다소 다르게 처리됩니다. DMA가 있다면 CPU의 부하를 줄일 수 있으며, 없다면 CPU가 더 많은 역할을 하게 됩니다.

관련해서 자세한 정보는 다음 질문에서 유사한 내용을 확인할 수 있습니다:
- interrupt와 DirectX 질문

이 링크에서는 DirectX와 GDI 엔진의 동작 방식에 대해 설명하고 있으며, CPU와 장치 간의 데이터 전송에서의 인터럽트 처리에 대한 내용을 다루고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.