패스트캠퍼스

[패스트캠퍼스 수강 후기] 올인원 패키지 : 컴퓨터 공학 전공 필수👉C언어인강 100% 환급 챌린지 25회차 미션

돌맹이시터 2020. 11. 12. 23:13

 

 

 

환급미션 25일째...

 

 

 

 

컴퓨터 구조 - 입출력 구조 - 입출력 연결과 주소 지정

 

 

 

- 입출력 주소 지정

 

 

각 입/출력장치 , 통신 포트에 고유주소 할당

하나의 입출력 장치에 그 상태나 데이터의 입출력 등 용도에 따라 다수의 주소할당 가능

 

 

 

* 메모리 맵 입출력 (memory mapped I/O)

 

메모리에 부여된 주소 공간의 일부를 입출력 주소공간으로 활용 ( 따로 구분하지 않음 )

•동일한 주소선, 제어선으로 입출력 관리

•지정된 주소값에 의해 데이터 저장공간, I/O장치 구분

•모든 cpu에 대해 구현 가능 but H/W적 분류 접근 구현이 필요

 

 

* 입출력 맵 입출력 (I/O mapped I/O)

독립된 메모리 주소 공간과 입출력 주소 공간을 구분하여 할당

•메모리/입출력 주소를 구분하는 제어선 (M/IO) 사용

•상호 구분되는 명령어 필요 ( 상호 동일한 주소의 경우)

•제어신호를 통해 메모리/입출력 장치에 접근 가능하도록 H/W적 구현이 필요

•모든 cpu가 아닌 I/O용 별도의 명령어와 이를 위한 외부 제어선이 있는 cpu에서만 구현 가능

 

 

 

 

 

- 입출력 버스 할당

 

중앙 제어 버스 vs 분산 제어 버스

 

 

* 중앙제어 버스 시스템

 

 

 

구현 및 관리 용이,

but 제어기의 이상 시 버스 중재 및 활용에 결함 발생 가능

I/O버스에 주로 적용됨

 

 

 

 

* 분산 제어 버스 시스템

 

 

버스상의 모든 장치가 제어 기능을 나누어 실행한다.

시스템 버스로 선호

 

 

 

* 동적 중재 알고리즘

 

장치들의 우선순위를 변경시킬 필요가 있을 경우 적용 가능한 알고리즘을 일컫는다.

 

 

•시간 분할 (time slice) 알고리즘 

 

연속적으로 주어지는 버스 시간을 고정된 길이의 시간분할로 나누고,

라운드 로빈(round-robin)방식으로 각 프로세스에 할당

(프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위로 cpu를 할당하는 방식)

-> 버스에서의 위치에 관계없이 모든 요소들이 동등한 서비스를 받게 된다.

 

 

•폴링(polling) 이용한 버스 시스템

 

폴(poll)라인으로 버스 승인 신호를 대체하여 모든 장치에 연결

버스 제어기는 이 신호를 이용해 각 장치의 주소 결정

지정된 순서에 따라 버스를 할당받는다. (프로그램으로 우선순위 변경 가능)

 

 

•LRU (Least recently used) 알고리즘

 

가장 오랫동안 버스 서비스를 사용하지 못한 장치에 우선권 부여

몇 번의 버스 사이클마다 LRU algorithm에 의해 장치의 우선순위가 계속 변경됨

모든 프로세스가 버스에 접근할 수 있는 기회를 동등하게 부여받을 수 있다.

 

 

•first-come & first-serve

버스 제어기는 각 프로세스의 버스 요구 도착시간 별 저장이 가능한 큐(queue)를 이용해

도착한 순서대로 서비스 제공

 

 

•회전 데이지 체인 (rotating daisy chain) 방식

모든 장치를 연결 (closed loof)하여 차례로 버스 서비스를 제공받는다.

ex) bus busy line

 

 

 

 

- 입출력 수행의 분류

 

 

* 동기 버스에 의한 수행

 

 

 

버스 clock : 버스에 연결된 모든 장치들에 동일하게 적용, 주소와 자료 및 다른 제어선들은 버스 clock을 기준으로 전송된다.

 

•Bus clock ( 0 -> 1 ) : 필요한 장치의 주소 및 제어신호를 버스를 통해 발송, 지정된 장치의 주소 식별

•Bus clock ( 1 -> 0 ) : 데이터 전송 시작

 

별도의 동기용 신호 불필요

 

버스에 연결된 모든 장치는 clock에 맞추어 입출력이 진행되도록 설계

 

 

 

 

* 비동기 버스에 의한 수행

 

 

주소선에 지정된 I/O 장치 주소를 전송

 

1. cpu로부터 I/O 제어기를 통해 해당장치의 Ready 신호 활성 -> I/O 전송 요구 ready 신호 활성 -> Ready 신호에 대한 응답으로 Accept 신호 전송

2. 응답 / 자료 전송 -> data 전송

3. 작업 종료 신호 비활성화

 

 

=> 융통성은 있지만, 획일화된 방식이 아니라 상황에 따라 처리하게 되는 복잡한 구조를 갖는다.

 

 

 

 

 

컴퓨터 구조 - 입출력 구조 - 입출력 수행과 인터럽트 -1

컴퓨터 구조 - 입출력 구조 - 입출력 수행과 인터럽트 -2

 

 

 

- 인터럽트에 의한 I/O

 

 

입출력 전송 (I/O transfer) 구조상 cpu의 interrupt 활용 모드를 나타낸다.

 

 

cpu가 인터럽트 신호를 수신하면

PC (return address) -> stack : 현재 작업 중이던 정보를 stack에 저장한다.

I/O 전송 서비스 루틴으로 제어 변경

벡터 인터럽트인지 비벡터(스칼라) 인터럽트인지 확인한다.

 

 

주변 장치와의 인터페이스를 위해 H/W, S/W 루틴 모두 중요하다.

 

 

 

 

 

 

- 우선 순위 인터럽트

 

 

 

* 입출력 장치와 cpu 간 interrupt 논리

 

cpu와 I/O 장치 사이의 데이터 전송은 cpu에 의해 시작된다.

각 장치는 통신 준비 여부 (제어라인 상태 or 플래그에 의해 확인)에 따라 cpu와 통신 가능

각 디바이스 인터페이스는 플래그가 enable 되었을 때 cpu에 인터럽트를 요청

 

프로세서가 서비스 루틴으로 분기 주소를 선택하는 방법

•vectored interrupt : 인터럽트를 내는 소스 (장치)가 프로세서에게 분기에 대한 정보 제공한다. (interrupt vector)

•Non-vectored interrupt : 분기 주소는 메모리의 고정 위치에 저장되어 있다.

 

인터럽트를 발생한 장치의 선별, 동시에 인터럽트 발생하는 경우 우선순위를 결정해야 하는 문제 발생

 

우선순위 인터럽트는 각 소스에 우선순위를 부여한 인터럽트 시스템을 이르는 용어이다.

•S/W, H/W적으로 처리

•S/W -> 폴링 (polling)

•H/W -> 모든 인터럽트를 고려하기 위해 소요시간이 오래 걸릴 수 있을 경우 하드웨어적으로 해결

 

 

 

 

* daisy-chain 우선순위 인터럽트

 

( INTACK == interrupt acknowledge : 허락신호 , VAD : vector address )

 

끝날 때까지 기다려서 순차적으로 진행

인터럽트를 발생하는 모든 장치를 직렬로 연결한다.

 

 

 

* 병렬 우선순위 인터럽트

 

( IEN == interrupt enable register, INTACK == interrupt acknowledge )

Interrupt register, Mask register - AND gate를 통해 mask register=1 일 때만 요청한 인터럽트 처리된다.

 

 

 

SP <- SP + 1 

: stack pointer, 현재 실행되고 있는 상태의 다음 번지값을 SP에 저장

M[SP] <- PC

: SP에 저장된 기억공간에 현재 PC 값 저장

INTACK <- 1

: interrupt 진행

PC <- VAD

: vector address 값을 PC에 

IEN <- 0

: interrupt enable register값을 0으로 만들어, 인터럽트 기능을 중지 ( 프로세스가 인터럽트 인지 )

Go to fetch cycle

: fetch cycle 진행 (정보를 가져와서 실행)

 

 

 

 

 

 

 

 

 

올인원 패키지 : 컴퓨터 공학 전공 필수👉https://bit.ly/3i4sCVE