운영 체제가 장치 제어를 처리하는 방법

여기에 이미지 설명 삽입

1. I/O 제어 방식

이전 블로그에서는 디바이스 관리에 대한 몇 가지 기본 개념을 소개했으며 I/O 제어 방법에 대해서는 자세히 설명하지 않았습니다. 장치 관리의 주요 작업 중 하나는 장치와 메모리 또는 CPU 간의 데이터 전송을 제어하는 ​​것입니다. 주변기기와 메모리 간의 입출력 제어 방식은 4가지가 있으며, 이에 대해서는 아래에서 별도로 소개한다.

2. 프로그램 직접 제어 모드

프로그램 쿼리 모드라고도 합니다.

정보 교환 제어는 프로그램을 실행하는 CPU에 의해 완전히 구현되며 데이터 버퍼 레지스터(데이터 포트)와 장치 상태 레지스터(상태 포트)는 프로그램 쿼리 모드 인터페이스에 설정됩니다. 호스트가 I/O 작업을 수행할 때 먼저 조회 신호를 보내고 장치의 상태를 읽고 장치의 상태에 따라 다음 작업을 데이터를 전송할지 또는 대기할지 결정합니다.

프로그램 쿼리 모드의 작업 흐름은 다음과 같습니다.

  • ①CPU는 초기화 프로그램을 실행하고 전송 파라미터를 미리 설정합니다.
  • ② I/O 장치를 시작하기 위해 I/O 인터페이스에 명령어를 보냅니다.
  • ③ 주변 인터페이스에서 상태 정보를 읽습니다.
  • ④CPU는 주변 장치가 준비될 때까지 I/O 장치의 상태를 계속 쿼리합니다.
  • ⑤ 데이터 1회 전송
  • ⑥주소 및 카운터 파라미터를 수정합니다.
  • ⑦전송이 끝났는지 판단하고, 그렇지 않으면 카운터가 0이 될 때까지 ③단계로 이동합니다.

여기에 이미지 설명 삽입

그림에서와 같이 컴퓨터가 외부 장치에서 읽는 각 단어에 대해 CPU는 해당 단어가 이미 I/O의 데이터 레지스터에 있다고 판단될 때까지 주변 장치의 상태를 주기적으로 확인해야 합니다. 제어 장치. 프로그램 직접 제어 모드에서 CPU의 고속 및 IO 장치의 저속으로 인해 CPU의 대부분의 시간은 I/O 장치가 데이터 I/O를 완료하기를 기다리는 루프 테스트에 있습니다. , 엄청난 CPU 리소스 낭비가 발생합니다. 이 모드에서 CPU가 I/O 장치의 상태를 지속적으로 테스트하는 이유는 I/O 장치가 인터럽트 메커니즘이 사용되지 않기 때문에 문자 입력 작업을 완료했음을 CPU에 보고할 수 없기 때문입니다. CPU.

이 제어 모드에서 CPU가 I/O를 시작하면 현재 프로그램의 실행을 중지하고 프로그램을 현재 프로그램에 삽입해야 합니다. 프로그램 질의 방식의 주요 특징은 CPU가 "stepping" 대기 현상을 가지고 있고 CPU와 I/O가 직렬로 작동한다는 것입니다. 이 방식은 인터페이스 설계가 간단하고 장비의 양이 적지만 CPU가 정보 전송 과정에서 조회하고 기다리는 데 많은 시간을 소비하고 일정 시간 내에 하나의 주변기기와만 정보를 교환할 수 있어 효율성을 감소시킵니다.

개인적인 이해: 이 직접 프로그램 제어 방식에서는 CPU가 한 가지만 할 수 있고 CPU가 자주 간섭합니다. 시간이 많이 걸리고 로직이 매우 간단하여 인터페이스 디자인이 간단하고 구현하기 쉽습니다.

3. 프로그램 중단 모드

인터럽트 구동이라고도 합니다.

1. 프로그램 중단

프로그램 중단이란 컴퓨터가 현재 프로그램을 실행하는 과정에서 긴급하게 처리해야 할 비정상적인 조건이나 특별한 요청이 발생하여 CPU가 현재 프로그램을 일시적으로 중지하고 이러한 비정상적인 조건이나 특별한 요청을 처리하기 위해 전환하는 것을 의미합니다. 그런 다음 처리 후 컴퓨터로 돌아가 현재 프로그램의 중단점에서 원래 프로그램을 계속 실행합니다.

초기 인터럽트 기술은 데이터 전송을 처리하는 데 사용되었습니다. 컴퓨터의 발달로 인터럽트 기술에 새로운 기능이 부여되었으며 주요 기능은 다음과 같습니다.

  • ① CPU와 I/O 장비의 병렬 작업을 구현합니다.
  • ② 하드웨어 장애 및 소프트웨어 오류를 처리합니다.
  • ③ 인간과 컴퓨터의 상호 작용을 달성하기 위해 사용자는 인터럽트 시스템을 사용하여 기계에 개입해야 합니다.
  • ④ 다중 프로그램 및 시분할 작업을 실현하고 다중 프로그램 전환은 인터럽트 시스템에 의존해야 합니다.
  • ⑤실시간 처리는 신속한 응답을 위해 인터럽트 시스템의 도움이 필요합니다.
  • ⑥ "소프트 인터럽트"라고 하는 응용 프로그램과 운영 체제(관리 프로그램) 간의 전환을 실현합니다.
  • ⑦ 다중 프로세서 시스템에서 프로세서 간의 정보 교환 및 작업 전환.

그런 다음 인터럽트 프로그램 인터럽트 방법은 인터럽트 기술의 첫 번째 기능을 구현하는 것입니다. 프로그램 중단 방법의 아이디어: CPU는 특정 시간에 특정 주변 장치를 시작하도록 프로그램에 배치한 다음 쿼리 방법과 같이 주변 장치가 준비될 때까지 기다리지 않고 CPU가 현재 프로그램을 계속 실행합니다. 주변 하드웨어가 데이터 전송을 위한 준비 작업을 완료하면 CPU에 능동적으로 인터럽트 요청을 보내 CPU가 스스로 서비스를 수행하도록 요청합니다. 인터럽트에 응답할 수 있는 조건에서 CPU는 실행 중인 프로그램을 일시적으로 중지한 다음 인터럽트 서비스 프로그램을 실행하여 주변 장치에 서비스를 제공합니다. 인터럽트 서비스 프로그램에서는 호스트와 주변 장치 간의 데이터 전송이 완료됩니다. .전송이 완료된 후 CPU는 원래 프로그램을 반환합니다.

I/O 컨트롤러 입장에서 I/O 컨트롤러는 CPU로부터 읽기 명령을 받은 후 외부 장치로부터 데이터를 읽는다. 데이터가 I/O 컨트롤러의 데이터 레지스터로 읽히면 제어 라인을 통해 CPU에 인터럽트 신호를 보내 데이터가 준비되었음을 알리고 CPU가 데이터를 요청할 때까지 기다립니다. I0 컨트롤러는 CPU에서 보낸 데이터 가져오기 요청을 수신한 후 데이터를 데이터 버스에 넣고 CPU의 레지스터로 전송합니다. 지금까지 이 IO 작업이 완료되었으며 I/O 컨트롤러가 다음 I/O 작업을 시작할 수 있습니다.

CPU의 관점에서 CPU는 읽기 명령을 내린 다음 현재 실행 중인 프로그램(프로그램 카운터 및 프로세서 레지스터를 포함한 장면)의 컨텍스트를 저장한 다음 다른 프로그램을 실행합니다. 각 명령 주기의 끝에서 CPU는 인터럽트를 확인합니다. IO 컨트롤러에서 인터럽트가 발생하면 CPU는 현재 실행 중인 프로그램의 컨텍스트를 저장하고 인터럽트 처리를 위해 인터럽트 처리기를 실행합니다. 이때 CPU는 IO 컨트롤러에서 데이터의 워드를 읽어 레지스터로 전송하고 메인 메모리에 저장합니다. 다음으로 CPU는 IO 명령을 실행한 프로그램(또는 다른 프로그램)의 컨텍스트를 복원하고 계속 실행합니다.

이 방법에서는 주 메모리와 주변 장치(외부 메모리도 디스크와 같은 주변 장치로 간주할 수 있음) 간의 데이터 전송이 여전히 워드 단위이지만 CPU는 주변 장치의 완료를 기다릴 필요가 없습니다. 마지막으로 다른 프로그램을 실행할 수 있으며, 주변 장치가 데이터를 전송한 후 CPU에 인터럽트 요청을 보내고 CPU는 주변 장치 데이터가 전송되었음을 알고 반환 처리합니다. 전송된 데이터. 동시에 읽기 명령을 내린 후 다른 작업을 계속하고 반복하십시오. 이 장치는 CPU와 I/O 장치가 병렬로 작동하여 프로그램을 직접 제어하는 ​​방식에 비해 CPU 시간이 약간 절약되고 효율성이 크게 향상되지만 데이터의 각 단어가 메모리와 메모리 사이에 있기 때문에 I/O 컨트롤러 사이의 전송은 CPU를 거쳐야 하므로 인터럽트 구동 방식이 여전히 더 많은 CPU 시간을 소비하게 됩니다.

이 시점에서 프로그램 중단 방법은 종료되어야 하는데 중단이 언급되었으므로 여기서 자리를 잡고 프로그램 중단의 구체적인 프로세스를 알아보겠습니다.

2. 프로그램 중단 작업 과정

(1) 인터럽트 요구

인터럽트 소스는 CPU 인터럽트를 요청하는 장치 또는 이벤트이며 컴퓨터는 여러 인터럽트 소스를 허용합니다. 각 인터럽트 소스가 CPU에 인터럽트 요청을 보내는 시간은 임의적입니다. 인터럽트 이벤트를 기록하고 다른 인터럽트 소스를 구별하기 위해 인터럽트 시스템은 각 인터럽트 소스에 대해 인터럽트 요청 플래그 트리거를 설정해야 하며 상태가 "1"이면 인터럽트 소스에 요청이 있음을 의미합니다. 이러한 플립플롭은 CPU에 집중되거나 다양한 인터럽트 소스에 분산될 수 있는 인터럽트 요청 플래그 레지스터를 형성할 수 있습니다.

마스크 가능한 인터럽트는 INTR 라인을 통해 전송되고 마스크 불가능한 인터럽트는 NMI 라인을 통해 전송됩니다. 마스크 가능한 인터럽트는 가장 낮은 우선 순위를 가지며 인터럽트 오프 모드에서는 응답하지 않습니다. non-maskable 인터럽트는 클록 인터럽트, 정전 등과 같은 긴급하고 중요한 이벤트를 처리하는 데 사용되며 가장 높은 우선 순위를 가지며 내부 예외가 뒤따르며 오프 인터럽트 모드에서도 응답합니다. (이것은 컴퓨터 구성의 원리에 버스에 대한 지식이 포함되어 있으며 버스에 대한 특별한 블로그도 작성하겠습니다.)

(2) 인터럽트 응답 중재

인터럽트 응답 우선 순위는 CPU가 인터럽트 요청에 응답하는 순서를 나타냅니다. 많은 인터럽트 소스가 인터럽트 요청을 하는 시간이 임의적이기 때문에 여러 인터럽트 소스가 동시에 요청을 할 때 인터럽트 중재 논리를 통해 요청에 응답할 인터럽트 소스를 결정해야 합니다.인터럽트 응답의 중재는 일반적으로 장치에 의해 실현된 하드웨어 대기열.

일반적으로 ① 마스크 불가 인터럽트 > 내부 예외 > 마스크 가능 인터럽트, ② 내부 예외의 경우 하드웨어 오류 > 소프트웨어 인터럽트, ③ DMA 인터럽트 요청이 I/O 장치가 전송하는 인터럽트 요청보다 우선 순위가 있음, ④ IO 전송 클래스 인터럽트 요청, 고속 장치는 저속 장치보다 우선하고, 입력 장치는 출력 장치보다 우선하며, 실시간 장치는 일반 장치보다 우선합니다.

여기서 세 번째로 설명하면, DMA 인터럽트 요구는 I/O 디바이스가 송신하는 인터럽트 요구보다 우선하며, 여기서 I/O 디바이스가 송신하는 인터럽트 요구는 프로그램 인터럽트 모드에서 발생하는 인터럽트를 말하며, DMA 인터럽트 요청은 우리가 곧 배울 것입니다. 인터럽트는 세 번째 I/O 제어 모드에서 생성됩니다.

(3) CPU가 인터럽트에 응답하는 조건

CPU는 특정 조건에서 인터럽트 소스가 보낸 인터럽트 요청에 응답하고 특정 작업 후에 인터럽트 서비스 프로그램을 실행합니다. 인터럽트에 응답하는 CPU는 다음 세 가지 조건을 충족해야 합니다.

  • ① 인터럽트 소스에 인터럽트 요청이 있습니다.
  • ②CPU는 인터럽트를 허용하고 인터럽트를 활성화합니다(비정상적이고 마스크할 수 없는 인터럽트에는 이 제한이 적용되지 않습니다).
  • ③ 명령이 실행되었으며(예외는 이에 제한되지 않음) 더 이상 긴급한 작업이 없습니다.

참고: IO 장치의 준비 시간은 임의적이며 CPU는 I/O 인터럽트 요청을 얻기 위해 통합된 순간, 즉 각 명령 실행 단계가 끝나기 전에 인터페이스에 인터럽트 쿼리 신호를 보냅니다. 즉, CPU가 인터럽트에 응답하는 시간은 각 명령 실행 단계의 끝입니다. 여기에 언급된 인터럽트는 I/O 인터럽트만을 의미하며 내부 예외는 이러한 경우에 속하지 않습니다. (이 부분은 명령어 시스템을 연구했다면 이해하기 쉽습니다. 실제로 인터럽트에는 두 가지 유형이 있습니다. 프로그램 실행 중 인터럽트는 내부 인터럽트로 이해할 수 있지만 I/O 인터럽트는 실제로 외부 인터럽트를 참조합니다. 내부 인터럽트는 비정상이라고도 한다.

(4) 인터럽트 응답 프로세스

CPU가 인터럽트에 응답한 후 몇 가지 작업을 수행한 후 인터럽트 서비스 루틴을 실행합니다. 이러한 작업은 하드웨어에 의해 직접 실현되며 이를 암시적 인터럽트 명령이라고 합니다. 인터럽트 암시적 명령어는 명령어 시스템의 실제 명령어가 아니라 기본적으로 하드웨어의 일련의 자동 작업인 가상 명령문입니다. 그것이 하는 일은 다음과 같습니다.

  • ① 인터럽트를 끕니다. CPU가 인터럽트에 응답한 후 프로그램의 중단점과 장면 정보를 먼저 보호해야 하며 중단점과 장면을 보호하는 과정에서 CPU는 상위 인터럽트 소스의 인터럽트 요청에 응답할 수 없습니다. 그렇지 않으면 중단점이나 장면이 완전히 저장되지 않으면 인터럽트 서비스 루틴이 종료된 후 올바르게 복구할 수 없고 현재 프로그램을 계속 실행할 수 없습니다.
  • ② 중단점을 저장합니다. 인터럽트 서비스 루틴이 실행된 후 원래 프로그램이 올바르게 반환될 수 있도록 하려면 원래 프로그램의 중단점(명령어로 직접 읽을 수 없는 PC 및 PSW의 내용)을 스택에 저장하거나 특정 레지스터에서. 예외와 인터럽트의 차이점에 주의하십시오. 예외 명령어는 일반적으로 성공적으로 실행되지 않으며 예외 처리 후에 다시 실행되어야 하므로 중단점이 현재 명령어의 주소입니다. 인터럽트의 중단점은 다음 명령의 주소입니다.
  • ③ 인터럽트 서비스 루틴으로 이어집니다. 인터럽트 소스를 식별하고 해당 (인터럽트) 서비스 루틴 항목 주소를 프로그램 카운터 PC로 보냅니다. 인터럽트 소스를 식별하는 방법에는 하드웨어 벡터 방법과 소프트웨어 쿼리 방법의 두 가지가 있습니다. 이 섹션에서는 보다 일반적으로 사용되는 벡터 인터럽트에 대해 주로 설명합니다.

(5) 인터럽트 인식

예외 및 인터럽트 소스를 식별하는 방법에는 소프트웨어 식별과 하드웨어 식별의 두 가지가 있습니다. 예외와 인터럽트 소스의 식별 방법은 서로 다르며 대부분의 예외는 소프트웨어로 식별하지만 인터럽트는 소프트웨어 또는 하드웨어로 식별할 수 있습니다.

소프트웨어 식별 방법은 CPU가 이상 원인을 기록하기 위해 이상 상태 레지스터를 설정하는 것을 의미합니다. 운영 체제는 통합된 예외 또는 인터럽트 쿼리 프로그램을 사용하여 예외 및 인터럽트 유형을 감지하기 위해 우선 순위에 따라 예외 상태 레지스터를 쿼리합니다.첫 번째 쿼리는 먼저 처리된 다음 커널의 해당 핸들러로 전송됩니다. (먼저 우선 순위에 따라 인터럽트를 판단한다는 의미. 우선 순위가 같으면 발생 전후 시간을 보고 실행할 인터럽트에 해당하는 핸들러를 선택)

하드웨어 식별 방법은 벡터 인터럽트라고도 하며 예외 또는 인터럽트 핸들러의 첫 번째 주소를 인터럽트 벡터라고 하며 모든 인터럽트 벡터는 인터럽트 벡터 테이블에 저장됩니다. 각 예외 또는 인터럽트에는 인터럽트 유형 번호가 할당됩니다. 인터럽트 벡터 테이블에는 유형 번호와 인터럽트 벡터 사이에 일대일 대응이 있으므로 유형 번호에 따라 해당 핸들러를 빠르게 찾을 수 있습니다.

(6) 인터럽트 처리 다이어그램

여기에 이미지 설명 삽입

참고: 장면과 중단점, 이 두 가지 유형의 정보는 인터럽트 서비스 루틴에 의해 파괴될 수 없습니다. 장면 정보는 명령어로 직접 접근할 수 있기 때문에 보통 인터럽트 서비스 프로그램에서 명령어로 스택에 저장 즉, 소프트웨어로 구현하고 중단점 정보는 스택이나 CPU에 의해 지정된 레지스터에 자동으로 저장된다. 인터럽트가 응답할 때 즉, 하드웨어에 의해 구현됩니다.

인터럽트 마스크 워드:

인터럽트 마스크 레지스터(Interrupt Mask Register, IMR)라고도 하는 인터럽트 처리 프로세스의 마스크 워드는 CPU가 응답할 수 있는 인터럽트 신호를 제어하는 ​​데 사용되는 이진 비트 시퀀스입니다. 인터럽트 마스크 워드를 설정하면 일부 인터럽트를 비활성화하거나 특정 조건에서 일부 인터럽트가 응답하도록 허용할 수 있습니다.

CPU가 인터럽트 서비스 루틴을 실행할 때 다른 인터럽트가 현재 프로그램의 실행을 방해하는 것을 방지하기 위해 인터럽트 마스크 워드를 사용하여 다른 인터럽트 신호의 응답을 차단할 수 있습니다. 동시에 유연한 인터럽트 제어를 실현하기 위해 필요에 따라 인터럽트 마스크 워드도 동적으로 변경할 수 있습니다.

3. 다중 인터럽트 및 인터럽트 마스킹 기술

CPU가 인터럽트 서비스 루틴을 실행하는 동안 우선 순위가 더 높은 새로운 인터럽트 요청이 발생했지만 CPU가 새로운 인터럽트 요청에 응답하지 않는 경우 해당 인터럽트를 단일 인터럽트라고 합니다. CPU가 현재 인터럽트 서비스 루틴을 일시 중단하고 새로운 인터럽트 요청을 처리하도록 전환하는 경우 이러한 종류의 인터럽트를 다중 인터럽트라고 하며 인터럽트 중첩이라고도 합니다.

CPU에 다중 인터럽트 기능이 있는 경우 다음 조건이 충족되어야 합니다. ① 인터럽트 서비스 루틴에서 미리 인터럽트 명령을 설정합니다. ② 우선순위가 높은 인터럽트 소스는 우선순위가 낮은 인터럽트 소스를 인터럽트할 수 있는 권한을 가집니다. 인터럽트 처리 우선 순위는 인터럽트 마스킹 기술을 사용하여 동적으로 조정할 수 있는 여러 인터럽트의 실제 우선 순위 처리 순서를 의미 하므로 인터럽트 서비스 루틴의 우선 순위를 유연하게 조정하여 인터럽트 처리를 보다 유연하게 만들 수 있습니다. 인터럽트 마스킹 기법을 사용하지 않으면 처리 우선순위응답 우선순위가 같다. 최신 컴퓨터는 일반적으로 인터럽트 마스킹 기술을 사용합니다. 각 인터럽트 소스에는 마스크 트리거가 있습니다. 1은 인터럽트 소스의 요청이 마스킹됨을 의미하고 0은 정상적으로 적용될 수 있음을 의미합니다. 모든 마스크 트리거는 마스크 워드 레지스터를 형성하기 위해 결합됩니다. 마스크 워드 레지스터의 내용을 마스크 워드 라고 합니다 .

4. DMA 모드

1.DMA

인터럽트 구동 모드에서 I/O 장치와 메모리 간의 데이터 교환은 CPU의 레지스터를 거쳐야 하므로 속도는 여전히
제한적이며 DMA(직접 메모리 액세스) 방식의 기본 아이디어 I/O 장치와 직접 데이터
교환 경로가 메모리 사이에 열려 CPU를 완전히 "해방"합니다. DMA 방식의 특징은 다음과 같습니다.

  • 1) 기본 단위는 데이터 블록입니다.
  • 2) 전송된 데이터는 장치에서 메모리로 또는 그 반대로 직접 전송됩니다.
  • 3) CPU 개입은 하나 이상의 데이터 블록 전송의 시작과 끝에서만 필요하며 전체 데이터 블록의 전송은 DMA 컨트롤러의 제어하에 완료됩니다.

DMA 방식은 그룹 정보를 전적으로 하드웨어적으로 전송하는 제어 방식으로 데이터 준비 단계에서 CPU와 주변기기가 병렬로 동작하는 프로그램 중단의 장점이 있다. DMA 방식은 주변 장치와 메모리 사이에 "직접 데이터 채널"을 열어 정보 전송이 더 이상 CPU를 거치지 않아 데이터 전송 시 CPU의 오버헤드를 줄여주기 때문에 직접 메모리 액세스 방식이라고 합니다. 데이터 전송이 CPU를 거치지 않기 때문에 CPU 사이트 보호 및 복원과 같은 번거로운 작업이 필요하지 않습니다.

이 방법은 디스크, 그래픽 카드, 사운드 카드, 네트워크 카드와 같은 고속 장치의 대용량 데이터 전송에 적합하며 하드웨어 오버헤드가 상대적으로 큽니다. DMA 모드에서 인터럽트의 역할은 오류 및 정상적인 전송이 끝날 때 처리하는 것으로 제한됩니다.
여기에 이미지 설명 삽입

DMA 전송 중에 DMA 컨트롤러는 CPU의 주소 버스, 데이터 버스 및 제어 버스를 인계받으며 CPU의 주 메모리 제어 신호는 사용이 금지됩니다. 그리고 DMA 전송이 끝나면 CPU의 모든 권한이 복원되고 작업이 시작됩니다. DMA 컨트롤러가 시스템 버스를 제어할 수 있어야 한다는 것을 알 수 있습니다.

2. DMA 전송 방식

주기억장치와 IO 장치 사이에 정보를 교환할 때 CPU는 통과하지 못하며 이때 CPU는 주기억장치를 제어할 수 없다. 그러나 I/O 장치와 CPU가 동시에 주기억장치에 접근할 경우 충돌이 발생할 수 있는데, 주기억장치를 효율적으로 사용하기 위해 DMA 제어기와 CPU는 보통 다음 세 가지 방식으로 주기억장치를 사용한다.

  • 1) CPU 메모리 액세스를 중지합니다. I/O 장치가 DMA 요청을 받으면 DMA 컨트롤러는 CPU에 중지 신호를 보내 CPU가 버스를 떠나 DMA가 데이터 블록을 전송할 때까지 주 메모리에 대한 액세스를 중지합니다. 데이터 전송이 끝나면 DMA 컨트롤러는 메인 메모리를 사용할 수 있음을 CPU에 알리고 버스 제어를 CPU로 되돌립니다.
  • 2) 싸이클 횡령(또는 싸이클 횡령). I/O 장치에 DMA 요청이 있는 경우 세 가지 상황이 있습니다. ① CPU가 현재 메모리에 액세스하지 않고(예: CPU가 곱셈 명령을 실행하는 중) I/O 메모리 액세스 요청이 수행됩니다. CPU와 충돌하지 않음, ②는 CPU가 메모리에 액세스하고 있음, 이 때 CPU는 액세스 주기가 끝날 때까지 기다려야 하며, CPU는 버스 점유를 포기함, ③ I/O 및 CPU 요청 메모리 액세스가 동시에 발생하여 메모리 액세스 충돌이 발생하는데, 이때 CPU는 일시적으로 버스 점유를 포기해야 합니다. I/O 메모리 액세스 우선 순위는 CPU 메모리 액세스보다 높음 I/O는 즉각적인 메모리 액세스 없이 데이터를 잃을 수 있기 때문에 I/O 장치는 하나 또는 여러 개의 액세스 사이클을 훔치고 조각을 전송한 후 즉시 버스를 해제합니다. 데이터의 , 단일 단어 전송 방법입니다.
  • 3) DMA와 CPU는 교대로 메모리에 접근한다. 이 방법은 CPU의 작동 주기가 주기억장치 액세스 주기보다 긴 경우에 적합합니다. 예를 들어, CPU의 작동 주기가 1.2us이고 메인 메모리의 액세스 주기가 0.6us 미만인 경우 CPU의 한 주기는 C1과 C2의 두 주기로 나눌 수 있으며 C1은 DMA 액세스 전용이고 C2는 CPU 액세스 전용입니다. 이 방식은 버스이용권의 신청, 설정, 반납 절차가 필요하지 않으며 시분할 방식으로 C1과 C2가 버스이용권을 통제한다.

3. DMA 프로세스

DMA의 데이터 전송 프로세스는 전처리, 데이터 전송 및 후처리의 세 단계로 나뉩니다.

  • 1) 전처리. 일부 필요한 준비 작업은 CPU에서 수행됩니다. 첫째, CPU는 여러 I/O 명령을 실행하여 I/O 장치의 상태를 테스트하고, DMA 컨트롤러에서 관련 레지스터를 초기화하고, 전송 방향을 설정하고, 장치를 시작하는 등의 작업을 수행합니다. 그런 다음 CPU는 IO 장치가 데이터를 보내거나(입력 케이스) 데이터를 받을 준비가 될 때까지(출력 케이스) 원래 프로그램을 계속 실행하고, I/O 장치는 DMA 컨트롤러에 DMA 요청을 보낸 다음 DMA 컨트롤러가 CPU에 DMA 요청을 보냅니다. 데이터를 전송하기 위해 버스 요청(때로는 이 두 프로세스를 총칭하여 DMA 요청이라고 함)을 보냅니다.
  • 2) 데이터 전송. DMA의 데이터 전송은 단일 바이트(또는 워드)를 기본 단위로 할 수 있으며 데이터 블록을 기본 단위로 할 수도 있습니다. 데이터 블록 단위 전송(하드 디스크 등)의 경우 DMA가 버스를 점유한 후의 데이터 입출력 작업은 모두 주기를 통해 구현됩니다. 이 주기는 (CPU를 통해 프로그램을 실행하는 대신) DMA 컨트롤러에 의해 구현된다는 점을 지적해야 합니다. 즉, 데이터 전송 단계는 DMA(하드웨어)에 의해 완전히 제어됩니다.
  • 3) 사후 처리. DMA 컨트롤러는 CPU에 인터럽트 요청을 보내고 CPU는 인터럽트 서비스 프로그램을 실행하여 메인 메모리로 보낸 데이터가 올바른지 확인하고 전송 프로세스에 오류가 있는지 테스트(전송 오류 발생 시 진단 프로그램으로 전송), DMA 계속 사용 여부 결정 기타 데이터 전송 등

여기에 이미지 설명 삽입

4. DMA와 인터럽트 구동 모드의 차이점

  • ①인터럽트 모드는 사이트를 보호하고 복원해야 하는 프로그램의 전환입니다. 반면 DMA 모드는 현재 프로그램을 중단하지 않고 사이트를 보호할 필요가 없으며 전처리를 제외하고 CPU 리소스를 점유하지 않습니다. 그리고 후처리.
  • ② 인터럽트 요청에 대한 응답은 각 명령의 실행이 끝날 때(실행 주기 후)에만 발생할 수 있으며 DMA 요청에 대한 응답은 모든 기계 주기의 끝에서 발생할 수 있습니다(페치, 간접 및 실행 후). 사이클) .
  • ③ 인터럽트 전송 프로세스에는 CPU 개입이 필요합니다. DMA 전송 프로세스에는 CPU 개입이 필요하지 않으므로 데이터 전송 속도가 매우 높아 고속 주변 장치의 그룹 데이터 전송에 적합합니다.
  • ④ DMA 요청의 우선순위가 인터럽트 요청보다 높다.
  • ⑤ 인터럽트 방식은 비정상적인 이벤트 처리 능력이 있는 반면, DMA 방식은 대용량 데이터 전송에 제한이 있다.
  • ⑥ 데이터 전송의 관점에서 인터럽트 방식은 프로그램에 의해 전송되고 DMA 방식은 하드웨어에 의해 전송됩니다.

5. 채널 제어 방법

I/O 채널은 입출력 전용 프로세서를 의미합니다 . I/O 채널 방식은 DMA 방식의 발전으로 CPU의 개입을 더욱 줄일 수 있다. 데이터 블록의 그룹 단위로 제어 및 관리와 관련된 개입. 동시에 CPU, 채널 및 IO 장치의 병렬 작동을 실현하여 전체 시스템의 자원 활용률을 보다 효과적으로 향상시킬 수 있습니다.

예를 들어, CPU가 관련 읽기(또는 쓰기) 작업 및 관련 제어 그룹을 완료하려는 경우 I/O 명령을 I/O 채널에 보내 채널 프로그램의 첫 번째 주소를 제공하기만 하면 됩니다. 채널은 이 명령을 받은 후 채널 프로그램을 실행하여 CPU에서 지정한 I/O 작업을 완료하고 데이터 전송이 끝나면 CPU에 인터럽트 요청을 보냅니다. I/O 채널과 일반 프로세서의 차이점은 채널 명령의 유형이 단일하고 자체 메모리가 없다는 점이며 채널에서 실행되는 채널 프로그램은 호스트의 메모리에 배치됩니다. 즉, 채널은 CPU와 메모리를 공유합니다.

I/O 채널과 DMA 방식의 차이점은 DMA 방식은 전송된 데이터 블록의 크기와 전송된 메모리의 위치를 ​​CPU가 제어해야 하는 반면 채널 방식에서는 이러한 정보가 채널에 의해 제어된다는 것입니다. 또한 각 DMA 컨트롤러는 데이터를 전송하는 하나의 장치 및 메모리에 해당하며 하나의 채널이 여러 장치 및 메모리 간의 데이터 교환을 제어할 수 있습니다.

하드웨어 기술이므로 CPU의 약한 치킨 버전으로 이해하십시오.

호스트의 메모리에서 채널은 CPU와 메모리를 공유합니다.

I/O 채널과 DMA 방식의 차이점은 DMA 방식은 전송된 데이터 블록의 크기와 전송된 메모리의 위치를 ​​CPU가 제어해야 하는 반면 채널 방식에서는 이러한 정보가 채널에 의해 제어된다는 것입니다. 또한 각 DMA 컨트롤러는 데이터를 전송하는 하나의 장치 및 메모리에 해당하며 하나의 채널이 여러 장치 및 메모리 간의 데이터 교환을 제어할 수 있습니다.

그것은 하드웨어 기술 입니다 . CPU의 약한 치킨 버전으로 이해하십시오.
여기에 이미지 설명 삽입

추천

출처blog.csdn.net/weixin_51496226/article/details/131734680