-
05. 컴퓨터 성능 향상 기술운영체제 2022. 8. 8. 20:49
버퍼(Buffer)
버퍼는 입출력 장치와 응용 프로그램 사이에 데이터가 전송되는 동안 데이터를 임시로 저장하는 메모리 공간입니다.
그리고 송신자와 수신자 간의 전송 속도 차이 때문에 생기는 문제들을 해결하기 위해 나온 방법이 버퍼링입니다.
즉, 전송에서 생기는 딜레이를 줄이기 위해 각각의 입력을 주 기억 장치 별도의 공간에 데이터를 저장해놓고,
일정한 이벤트가 발생하면 버퍼에 있는 데이터들을 출력하게 됩니다.

출처) https://knkky.tistory.com/45 일반적으로 사용되는 버퍼링 방식은 이중 버퍼링으로, 입력 버퍼와 출력 버퍼 두 가지를 사용합니다.
- 입력 버퍼 : 사용자의 입력을 일시적으로 입력 버퍼에 저장합니다.
- 출력 버퍼 : 입력 버퍼가 가득 차게 되면 입력 버퍼를 비움과 동시에 출력 버퍼를 채우고,
출력 버퍼의 데이터를 출력합니다.

검색창으로 예시를 들면,
우리가 검색할 때 검색 창에 입력하는 공간이 입력 버퍼가 되고,
검색 버튼을 누르면 버퍼에 있는 데이터들이 비워지면서
그 데이터로 검색하게 되는 것이죠.
버퍼링을 사용하지 않는다면 CPU는 입출력이 발생할 때마다 속도가 느린 I/O 연산을 수행해야 하기 때문에
전체적인 프로그램 수행 속도에 영향을 받게 됩니다.
따라서, 버퍼를 사용하면 CPU는 I/O 연산 이후 입출력이 진행되는 동안 다른 동작을 수행할 수 있게 됩니다.
스풀(SPOOL)
스풀은 버퍼와 다르게 하드디스크의 일부를 사용하는 방식입니다.
스풀을 적용하는 것을 스풀링이라고 하며, 이는 운영체제에 내장된 스풀러가 담당해 수행합니다.
대표적으로 스풀링이 활용되는 곳은 프린터입니다.

출처) https://kes3583.medium.com/pdf-%ED%8C%8C%EC%9D%BC%EC%9D%B4-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%97%90%EC%84%9C-%EC%9D%B8%EC%87%84%EA%B0%80-%EC%95%88%EB%90%A0%EB%95%8C-%EC%8A%A4%ED%92%80%EB%A7%81-%EC%97%90%EB%9F%AC-6fdab97c34f8 인쇄를 명령하면 하드디스크의 스풀 공간에 스풀 파일(출력 파일)을 만들고,
스풀 파일을 하나씩 프린터로 보내 출력합니다.
버퍼와 스풀은 먼저 들어온 데이터를 먼저 내보내기 때문에 FIFO 방식입니다.
따라서, 버퍼와 스풀은 큐 자료구조로 이루어져 있습니다.
캐시(Cache)
CPU가 주 기억 장치에 접근하는데 걸리는 시간은 CPU의 연산 속도에 비해 상당히 오래 걸립니다.
이러한 *오버헤드를 줄이는 역할을 하는 것이 캐시 메모리입니다.
*오버헤드 : 어떤 처리를 하기 위해 들어가는 간접적인 처리 메모리 또는 시간

출처) https://ssoonidev.tistory.com/35 캐시는 주 기억 장치와 CPU 사이에서 데이터를 일시적으로 저장하는 고속 메모리입니다.
CPU와 비슷한 속도로 동작하여 전송 속도 차이로 생기는 오버헤드를 줄입니다.
캐시의 특징은 아래와 같습니다.
- 기억 장치 참조의 국부성 :
프로그램을 사용할 때 실제 사용되는 데이터는 전체 용량에 비해 일부만 사용됩니다.
따라서 캐시에는 자주 사용되는/될 데이터가 저장되어 펑균 기억 장치 접근 시간을 줄입니다. - 버퍼에 저장된 데이터는 유일한데 비해, 캐시는 데이터의 복사본을 저장합니다.
- 메모리 계층 구조 중 가장 빠르며 CPU의 속도에 근접합니다.
캐시의 성능은 적중률(hit ratio)에 의해 결정됩니다.
CPU가 찾고자 하는 데이터를 캐시에서 찾으면 적중(hit), 아니면 부적중(miss)이라고 합니다.
※ 캐시 적중률 = (캐시 적중 횟수) / [ (캐시 적중 횟수) + (캐시 부적중 횟수) ] × 100
폴링(Polling)
폴링은 어떤 장치나 프로그램이 충돌 회피나 동기화 처리를 위해
다른 장치의 상태를 지속적으로 체크하는 방법을 말합니다.
웹이나, 실시간으로 사용자와 상호작용해야 하는 시스템에서 사용합니다.
루프문 안에서 주기적으로 외부 입력을 감시하는 방식으로 사용되며,
주기가 짧으면 오버헤드 또는 트래픽이 증가하고,
주기가 길면 실시간성이 떨어진다는 단점이 있습니다.
인터럽트(Interrupt)
인터럽트는 프로그램을 수행 중인 컴퓨터 시스템에 예기치 않은 긴급 상황이 발생할 때,
그것을 먼저 처리하는 방식을 말합니다.
운영체제에서 각종 응급 상황에 대처할 수단을 제공해주는 처리 방법이며,
자원의 할당과 회수 정책, 각종 스케줄링 기법에서 사용되는 필수적인 방법입니다.
인터럽트가 발생하면 아래의 과정으로 인터럽트가 처리됩니다.
- CPU가 프로그램을 실행하는 도중 인터럽트가 발생합니다.
- 인터럽트 처리 :
커널이 현재까지의 프로그램 수행 상태 정보를 주 기억 장치의 일정 영역에 저장합니다. - 인터럽트 서비스 :
인터럽트 벡터에서 해당 인터럽트를 처리하는 동작을 찾아 인터럽트를 해결합니다.
인터럽트 벡터 : 인터럽트 시 해야할 일을 담아놓은 테이블 - 인터럽트 서비스가 완료되면 저장했던 프로그램 수행 상태 정보를 복구합니다.
- 프로그램 수행을 재개합니다.
인터럽트의 종류에는 6가지가 있습니다.
- 입출력 인터럽트 :
입출력 장치가 입출력 시작/테스트/정지 또는 에러가 발생했을 때 CPU에 요청하는 인터럽트입니다. - 외부 인터럽트 :
프로그램의 외적인 요인(입출력 장치, 타이밍 장치, 전원 등)에 의해 발생하는 인터럽트입니다. - 슈퍼바이저 호출(SVC) :
프로그래머가 프로그램 내에 SVC 명령어를 삽입, 실행할 때 발생하는 인터럽트입니다. - 프로그램 검사 인터럽트 :
불법적인 명령이나 데이터의 잘못 사용으로 발생하는 인터럽트입니다.
> devide by 0, 보호된 기억 장소 침범, 불법적인 명령어 수행, 스택의 오버/언더플로 등이 있습니다. - 기계 검사 인터럽트 :
컴퓨터 자체 내의 기계적인 장애나 에러 때문에 발생하는 인터럽트입니다. - 재시작 인터럽트 :
사용자가 다시시작 버튼이나 Ctrl+Alt+Delete 버튼을 눌렀을 때 발생하는 인터럽트입니다.
'운영체제' 카테고리의 다른 글
07. PCB와 Context Switching (0) 2022.08.10 06. 프로세스와 스레드 (0) 2022.08.10 04. 레지스터 (0) 2022.08.08 03. 컴퓨터 구조 (0) 2022.08.08 02. 커널 (0) 2022.08.08 - 입력 버퍼 : 사용자의 입력을 일시적으로 입력 버퍼에 저장합니다.