본문 바로가기

공부생각/전산잡지식

[전산잡지식] 버퍼 (Buffer)



대충 임시기억장치이다. 라는

뭐 이런식으로 정의는 알았었지만,
솔직히 이게 어떻게 쓰이는지 친절하게 설명을 받은 적이 없어
이렇게 적어본다.

혹시 나 같은 사람 있으면 읽고 가시겠지..


1. Buffer ( 버퍼 )

버퍼란 놈은 임시로 저장해두는 곳이라고 생각하면 된다. 요놈을 사용하면 전체적인 시스템의 속도도 빨라 질 수 있는데, 임시 저장한다고 속도가 빨라져? 벙쪄있지말고 좀더 읽어보아. 버퍼를 회로도에서 보면 빠져나간 값이 또 다시 들어오고 또 빠져나가고, 일종의 루프를 그리는 것을 알 수 있다. 그럼 버퍼를 왜 사용해 줄까?

버퍼가 임시로 저장해 두는 곳이라고 하면, 분명 임시로 저장함이 필요한 구석이 있으니까 만들었겠지.

예를 들어 보자.

x = 1 + 3 ;
x = x * x ;
x = x- y();

이런식의 연산이 세줄 있다 지자. 이 연산의 결과값 x 를 구하기 위해서는 세줄의 연산을 해야 하는데 세번째 줄에 보면 y() 라는 함수도 수행해야 되는 것을 볼 수 있다. 자 여기서 우리는 일단 두개의 컴퓨터를 사용함을 가정으로 하고, 한 컴퓨터는 한가지 연산만을 수행할 수 있다. (쓰래드라고 생각하면 되겠지만 혹시 쓰레드를 이해못하는 사람이 있을까봐)

(버퍼가 없을경우)
A컴퓨터가 첫번째 줄 연산을 수행하고있다. 
B컴퓨터가 y()를 수행해서 결과값을 받았다.
A컴퓨터가 두번째연산을 수행하고있다.
B컴퓨터의 y()값이 아직 전달이 되지 않아 아무것도못한다.
A컴퓨터가 세번째연산을 수행한다.
B컴퓨터가 y()값을 전달한다.
A컴퓨터가 결과값을 낸다.
B컴퓨터는 이제 계산을 완료했으니 다른일을 할 수 있다.

(버퍼가 있을경우)
A컴퓨터가 첫번째 줄 연산을 수행하고있다. 
B컴퓨터가 y()를 수행해서 결과값을 받았다.
A컴퓨터가 두번째연산을 수행하고있다.
B컴퓨터가 y()의 결과값을 임시로 어떤 공간에 저장해두고 자기 할일한다.
A컴퓨터가 세번째연산을 수행한다.
A컴퓨터가 아까 B컴퓨터가 저장한 버퍼에서 y()값을 받는다.
A컴퓨터가 결과값을 낸다.
B컴퓨터는 아까부터 y()를 끝내고 계속 자기할 일 하고 있다.



자 여기서 보면 버퍼가 없을때는 위에 있는것 처럼 "기다리는" 경우가 생긴다. 이렇게 기다리는 경우가 생기면 전체적인 시스템이 느려지게 되는데 이걸 막는게 버퍼다.


사람을 예로 들면 공장에서 벨트에 붙어서 사람이 한부품씩 조립해서 다음으로 넘기는 시스템으로 시계를 만들고 있다. 여기서 뒷사람이 작업이 느리면 앞사람이 작업을 끝낸다음에 끝낸 결과물을 넘기려고 손을 건내고 기다려야 한다. 하지만 팔이 아프다 -_- 작업도 느리고. 차라리 그 시간에 옆에 놔둘께 그거 끝나고 가져가, 하고나서 다음 부품을 조립하고 있다면 속도가 그만큼 빨라지는거다.


그냥 뭐 그렇다고 비얌비얌