Kirby [컴퓨터 구조, 운영체제] 입출력장치, 운영체제 시작하기
Dev/CS

[컴퓨터 구조, 운영체제] 입출력장치, 운영체제 시작하기

ragabys 2023. 10. 10.

버퍼 VS 캐시

흔히 동영상 등을 많이 볼 때 쓰는 단어인 버퍼링(Buffering)은, 전송률이 높은 장치와 낮은 장치 사이 주고 받는 데이터를

버퍼 메모리라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법이다. 다른 말로는 큐라고도 한다.

두 시스템 간의 속도 차이 문제를 극복하기 위해 사용하는 기법이라는 점에서 캐시와 유사하지만, 몇 가지 차이점이 존재한다.

1. 사용 목적

캐시는 속도가 빠른 장치의 유휴 시간을 최대한 사용하는 것을 목적으로 하며, 속도가 빠른 장치가 사용할 데이터를 어느 정도

미리 준비해 속도가 빠른 장치를 최대한 활용하는 것을 목적으로 한다.

반면 버퍼는 보통 속도가 빠른 장치에서 느린 장치로의 데이터 전송 과정에서의 데이터 손실 문제를 해결하기 위해 사용되며,

속도가 빠른 장치에서 보낸 데이터를 버퍼 메모리에 저장해뒀다가 느린 장치(보통 I/O 장치)로 옮기는 형식으로 주로 사용된다.

 

2. 데이터의 유지

캐시의 경우 속도가 빠른 장치가 자주 접근하는 데이터를 캐시 메모리에 모아두어 효율을 높이는 형식이므로,

캐시 메모리에 할당된 데이터는 계속해서 사용된다.

반면 버퍼의 경우 캐시에 비해서 처리하는 데 필요한 리소스 크기가 큰 편이고, 데이터 전송을 위해 임시로 저장하는

메모리 공간이기 때문에, 전송이 끝난 뒤에는 담겨있던 데이터를 폐기한다는 차이점이 존재한다. 

 

캐시 VS 쿠키 
캐시와 쿠키는 공통적으로 웹 서버 정보를 저장하기 위해 사용한다는 특징이 있다.
하지만 사용 목적, 삭제 방식에 있어서 차이가 존재한다.
캐시는 웹 페이지의 빠른 렌더링을 보장하기 위해 사용하는 반면,
쿠키는 사용자 인증을 목적으로 사용된다.
또한 캐시는 사용자에 의해 수동으로 삭제되는 반면 쿠키는 일정 시간이 지나면 자동으로 삭제된다.

 

입출력 방법

입출력 작업을 수행하기 위해 CPU와 장치 컨트롤러는 정보를 주고 받아야 한다. 이를 위한 방식으로는

크게 3가지가 있다.

  1. 프로그램 입출력
  2. 인터럽트 기반 입출력
  3. DMA 입출력

 

1. 프로그램 입출력

프로그램 속 명령어로 입출력장치를 제어하는 방법으로, 입출력장치의 주소 공간을 접근하는 방식에 따라

메모리 맵 입출력 방식과 고립형 입출력 방식이 존재한다.

 

1)메모리 맵 입출력(Memory mapped I/O)

한 주소 공간을 메모리에 접근하기 위한 주소 공간과, 입출력장치에 접근하기 위한 주소 공간으로 간주하는 방식이다.

같은 주소 공간을 접근하는 방식이기 때문에 CPU가 메모리에 접근하는 명령어나 입출력장치에 접근하는 명령어가

크게 다를 필요가 없다는 특징이 있다.

 

2)고립형 입출력(Isolated I/O)

메모리를 위한 주소 공간과 입출력장치를 위한 주소 공간을 별개로 보는 방식으로, 입출력장치에 접근하기 위해서는

입출력 전용 명령어를 사용해야 한다는 특징이 있다. 이 때 사용하는 입출력장치 주소 공간을 포트라고도 한다.

 

3)메모리 맵 입출력 vs 고립형 입출력

메모리 맵 입출력(Memory mapped I/O 고립형 입출력(Isolated I/O)
메모리 주소 공간과 입출력장치 주소 공간이 같음 메모리와 입출력장치가 분리된 주소 공간을 갖게됨
입출력장치 주소 공간으로 인한 사용가능한 메모리 주소가 감소 모든 주소 공간을 메모리가 사용 가능
메모리와 입출력장치에 동일한 형태의 명령어 형식 사용 가능 입출력장치에 사용가능한 별도의 명령어 형식이 존재
메모리와 입출력장치 주소 공간은 동일 별도의 입출력장치 주소 공간을 포트라고 함
크기가 상대적으로 작음 시스템 버스를 더 많이 사용하기 때문에 크기가 상대적으로 큼
주소공간에서 입출력장치는 메모리로 취급되기 때문에 비교적 간단한 논리 메모리와 입출력장치를 모두 제어하기 위해 필요한 논리로 인해 비교적 복잡함

 

2. 인터럽트 기반 입출력

장치 컨트롤러가 입출력 작업을 끝낸 뒤 CPU에 인터럽트 요청 신호를 보내면, CPU는 I/O 인터럽트 서비스 루틴을 실행하고

이를 인터럽트 기반 입출력이라고 한다. 이 때 인터럽트 간 우선순위가 존재하고,

우선순위에 따라 다른 인터럽트 서비스 루틴이 실행중이더라도 우선순위가 높은 인터럽트 발생 시 해당 인터럽트 서비스 루틴을

먼저 처리하고 진행 중이었던 인터럽트 서비스 루틴을 마저 실행한다.

 

다만 항상 우선순위대로 I/O 인터럽트 서비스 루틴을 실행하는 것은 아니다.

플래그 레지스터 속 컨트롤 플래그(Control flag - CPU의 동작상태를 제어하는 flag) 중 하나인

Interrupt enable Flag(IF)가 1로 세팅된 경우는 순차적으로 인터럽트 서비스 루틴이 실행되며,

Interrupt enable Flag가 0으로 세팅되거나(활성화 상태), 1으로 세팅되어도(비활성화 상태) 무시할 수 없는 인터럽트인

NMI(Non-Maskable Interrupt) 발생 시 우선순위대로 I/O 인터럽트 서비스 루틴을 실행한다.

이 때 우선순위대로 다중 인터럽트를 처리하기 위해 프로그래머블 인터럽트 컨트롤러(PIC)라는 하드웨어 장치를 사용한다.

 

3. DMA 입출력

DMA란 직접 메모리 접근(Direct Memory Access)로, DMA 컨트롤러를 시스템 버스에 연결하여 CPU를 거치지 않고

메모리와 입출력장치 간의 데이터를 주고 받는 입력 방식이 DMA 입출력 방식이다.

다만 DMA 또한 CPU와 같은 공용 자원인 시스템 버스를 이용하고, CPU로부터 일시적으로 시스템 버스를 허용받아 이용하며,

이를 사이클 스틸링(cycle stealing)이라고 한다.

만약 입출력장치가 많은 경우, 이러한 사이클 스틸링이 자주 일어나 CPU가 시스템 버스를 온전히 이용할 수 없는 문제가

발생하기 때문에, DMA 컨트롤러와 입출력장치를 연결한 입출력 버스를 따로 구성하여

CPU와 DMA가 연결된 시스템 버스의 사용 빈도를 줄인다.

 

 

References

캐시메모리와 버퍼메모리의 차이

Difference between Cache and Cookie

Memory mapped I/O and isolated I/O

혼자 공부하는 컴퓨터 구조+운영체제(강민철 저, 한빛미디어)

댓글