[OS] 3. 컴퓨터 성능 향상 기술
컴퓨터 성능 향상 기술
- 현대 컴퓨터의 구조의 문제
- CPU 와 메모리/주변 장치의 작업 속도가 다르다.
- CPU 는 CPU 내부 버스로 연결되어 있고, 메모리/주변 장치는 시스템 버스로 연결되어있다.
- 따라서 CPU 에 비해 메모리가 느린 것은 물론이고 프로그램과 데이터를 보관하는 하드디스크의 속도는 더욱 느리다.
- 컴퓨터 성능 향상 기술은 이러한 장치 간의 속도 차이를 개선하고 시스템 작업 속도를 위해 개발된 기술들이다.
- 주기억장치
- 보조기억장치
- 입출력장치
- 마이크, 스피커, 프린터, 마우스, 키보드
- 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치를 의미
버퍼(Buffer)
- 버퍼는 CPU 와 보조기억장치에서 입출력 작업 속도 차이를 극복하기 위해 사용되는 임시 저장소이다. 즉 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 한다.
- 느린 입출력장치에서 데이터를 읽을 때마다 하나씩 전송하면 작업량에 비해 실제로 전송되는 데이터의 양이 매우 작다.
- 버퍼를 사용하여 일정량의 데이터를 모아 한꺼번에 전송하면 적은 노력으로 많은 양의 데이터를 옮길 수 있다.
- 즉 보조기억장치는 주기억장치의 버퍼에 데이터를 쌓아 일정 데이터가 쌓였을 때 한 번에 보내는 방식을 취함으로 CPU 의 성능 낭비를 최소화한다.
- e.g 계란을 하나씩 옮기는 것보다 바구니에 여러 개 담아 옮기는 것이 더 빠르다.
- 버퍼는 여러 프로그램이 공유해서 사용 가능하다.
- 버퍼의 종류
- 하드디스크의 메모리 버퍼
- 동영상 스트리밍
- 네트워크에서 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도 차이가 발생하면 동영상이 끊긴다.
- 이러한 현상을 방지하기 위해 동영상의 일부 부분을 버퍼에 넣은 후 실행한다.
- 하드웨어 안전 제거
- 버퍼를 사용하면 버퍼가 다 채워질 때 까지 저장장치 간에 데이터 전송이 지연된다.
- USB 같은 외부 저장장치에 데이터를 복사한 후 바로 제거하면, 버퍼 때문에 아직 저장되지 않은 데이터가 유실될 수 있다.
- 하드웨어 안전 제거를 사용하면, 버퍼에 있는 아직 옮겨지지 않은 데이터를 USB 등의 저장장치에 보내고 USB 의 전원을 차단하여 안전하게 제거할 수 있다.
스풀(SPOOL, Simultaneous Peripheral Operation On-Line)
- 스풀은 CPU 와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다.
- 다른 프로그램과 공유를 허용하지 않기 때문에 한 프로그램의 스풀 사용이 끝나야 다른 프로그램을 사용할 수 있다.
- 스풀은 CPU 명령을 하드디스크나 대용량 저장매체에 저장하여 그 명령을 프린터와 같은 주변장치로 전달하여 처리하는 방식이다.
- 이를 통해 주변장치는 자신의 속도에 맞춰 작업을 효율적으로 처리할 수 있다.
- 스풀러(Spooler): 인쇄할 내용을 순차적으로 출력하는 소프트웨어로, 출력 명령을 내린 프로그램과 독립적으로 동작한다.
- 워드프로세서로 작업하고 프린터로 출력할 때, 스풀러가 없다면 모든 출력을 워드가 알아서 처리해야하므로 인쇄가 끝날 때 까지 워드를 사용할 수 없다.
캐시(Cache)
- 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해두는 임시장소다.
- 즉 캐시 메모리는 속도가 빠른 장치와 느린 장치에서 발생하는 병목 현상을 줄이기 위한 메모리이다.
- 캐시는 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종으로 CPU 가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓는다.(= prefetch)
- 하드웨어 : CPU 내에 위치한 캐시
- 소프트웨어 : 웹 브라우저 캐시
- 캐시 동작 원리
- 캐시는 CPU 안에 있으며 CPU 내부 버스로 동작한다.
- 메모리의 경우 시스템 버스로 동작하기 때문에 CPU 보다 느리다.
- 캐시는 CPU 와 메모리 사이에서 두 장치의 속도를 완화해준다.
- 캐시 관련 용어
- 캐시는 메모리의 내용 중 일부를 미리 가져오고, CPU 는 메모리에 접근해야할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾는다.
- 캐시 히트라면 그 데이터를 바로 사용하고, 캐시 미스라면 메모리로 가서 데이터를 찾는다.
- 캐시 히트(cache hit): 캐시에서 원하는 데이터를 찾음
- 캐시 미스(cache miss): 캐시에서 원하는 데이터를 찾지 못함
- 캐시 적중률(cache hit ratio): 캐시 히트가 되는 비율. 일반적으로 약 90%이다.
- 캐시 적중률 높이기
- 컴퓨터의 성능을 향상하려면 캐시 적중률이 높아야 한다.
- 캐시의 크기를 늘린다.
- 캐시의 크기가 커지면 더 많은 데이터를 미리 가져올 수 있으므로 캐시 적중률이 올라간다.
- 앞으로 많이 사용될 데이터를 가져온다.
- 지역성이론(locality) : 현재 위치에 가까운 데이터가 멀리 있는 데이터보다 사용될 확률이 더 높다는 이론
- 즉시 쓰기와 지연 쓰기
- 캐시는 메모리에서 데이터를 임시로 가져온 것이기 때문에, 캐시에 있는 데이터가 변경되면 메모리에 있는 원래 데이터를 변경해야한다.
- 캐시의 변경된 데이터를 메모리에 반영하는데는 즉시 쓰기 방식과 지연 쓰기 방식이 있다.
- 즉시 쓰기
- 캐시의 데이터가 변경되면 바로 메모리에 반영하는 방식
- 메모리와의 빈번한 데이터 전송으로 인해 성능이 느리지만, 메모리의 최신값이 항상 유지되어 급작스러운 정전에도 데이터를 잃어버리지 않는다.
- 지연 쓰기
- 캐시의 데이터가 변경되면 변경된 내용을 모아서 주기적으로 반영하는 방식. copyback 이라고도 불린다.
- 메모리와의 데이터 전송 횟수가 줄어들어 시스템의 성능을 향상시킬 수 있으나 메모리와 캐시 사이의 불일치가 발생할 수 있다.
- L1캐시와 L2캐시
- L1 캐시
- 프로세서와 가장 가까운 캐시 로, IC 와 DC 로 나뉜다. CPU 레지스터에 직접 연결되어 있다.
- IC(Instruction Cache) : 메모리에서 text 영역의 데이터를 다루는 캐시
- DC(Data Cache) : 메모리에서 text 영역을 제외한 모든 데이터를 다루는 캐시
- L2 캐시
- 명령어와 데이터 구분 없이 모두 가져오며 메모리에 연결되어 있어 용량이 크다.
- 또 캐시는 일반 캐시와 특수 캐시로 분류된다.
- 일반 캐시
- 명령어와 데이터의 구분없이 모든 자료를 가져온다.
- 메모리와 연결되기 때문에 L2 캐시다.
- 특수 캐시
- 명령어와 데이터를 구분하여 가져온다. 즉 명령어 캐시와 데이터 캐시를 구분한다.
- CPU 레지스터에 직접 연결되기 때문에 L1 캐시다.
- 웹브라우저 캐시
- 방문했던 사이트의 데이터를 보관하여 재방문시 속도를 높인다.
- 너무 많은 데이터가 캐시에 보관되어있으면 웹 브라우저의 속도를 떨어뜨릴 수 있으므로 가끔 캐시를 비워줘야한다.
저장장치의 계층 구조 (storage hierarchy)
- 최고의 성능을 내는 컴퓨터를 구성하고 싶다면?
- 저장장치로 느린 하드디스크 대신 SSD 같은 빠른 플레시 메모리 사용
- 메모리를 하드디스크 만큼 확장
- 캐시를 크게 늘려 적중률을 높힌다.
- 그러나 위의 방법은 비용이 너무 많이든다. 대신 저장장치의 계층 구조를 사용할 수 있다.
- 속도가 빠르고 값이 비싼 장치를 CPU 가까운 곳에 두고, 값이 싸고 용량이 큰 저장장치를 반대쪽에 배치하여 빠른 속도와 큰 용량을 동시에 얻는 방법이다.
- 계층 구조
- CPU 와 가까운 곳에 레지스터나 캐시를 배치하여 CPU 가 작업을 빨리 진행할 수 있게 한다.
- 메모리에서 작업한 내용을 하드디스크와 같이 저렴하고 용량이 큰 저장장치에 영구적으로 저장한다.
인터럽트(Interrupt)
- 인터럽트란 CPU 가 특정 기능을 수행하는 도중에 다른 연산을 처리하기 위해 사용하는 기능이다.
- 즉 CPU 의 작업과 저장장치의 데이터 이동을 독립적으로 운영함으로써 시스템의 효율을 높인다.
- 데이터의 입출력이 이루어지는 동안 CPU 가 다른 작업을 할 수 있다.
- CPU 를 사용하기 전에 거쳐야 하는 업무가 완료되었을 때 CPU 에 알림을 줌으로써, CPU 가 무작정 연산이 끝날 때까지 기다리는 시간을 없애는 기술이 인터럽트이다.
- 인터텁트 방식의 동작 과정
- CPU 가 입출력 관리자에게 입출력 명령을 보낸다.
- 입출력 관리자는 명령받은 데이터를 메모리에 가져다놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
- 데이터 전송이 완료되면 입출력 관리자는 완료신호(인터럽트)를 CPU 에 보낸다.
- CPU 는 다른 일을 처리하다가 인터럽트 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리한다.
- 인터럽트 번호(Interrupt Number)
- 많은 주변장치 중 어떤 것의 작업이 끝났는지 CPU 에게 알려주는 번호
- 인터럽트 벡터(Interrupt Vector)
- CPU 가 입출력 관리자에게 여러 개의 입출력 작업을 동시에 시킨 뒤, 해당 작업이 동시에 완료되면 그 때마다 인터럽트를 여러 번 사용해야한다. 이는 매우 비효율적이다.
- 여러 개의 인터럽트를 하나의 배열로 만든뒤, CPU 가 인터럽트 벡터를 받으면 완료된 인터럽트 작업을 동시에 처리한다.
직접 메모리 접근(Direct Memory Access)
- 입출력 관리자가 CPU 의 허락없이 메모리에 접근할 수 있는 권한
- 메모리는 CPU 만 접근 권한을 가진 작업 공간이다.
폴링(Polling)
- Loop()문 내에서 반복적으로 외부 입력을 감시하는 문법(절차지향적).
- 소프트웨어 구현이 간편하다는 장점이 있다.
- CPU 가 직접 입출력장치에서 데이터를 가져오거나 내보내는 방식 (초기의 컴퓨터 시스템에서 사용)
- CPU 가 입출력 장치의 상태를 주기적으로 검사하여 일정한 조건을 만족할 때 데이터를 처리한다.
- CPU 가 명령어 해석과 실행이라는 본래 역할 외에 모든 입출력까지 관여해야하므로 작업 효율이 떨어진다.
- 인터럽트와 하드웨어적 구성은 비슷하지만, 폴링은 Loop문을 돌면서 감시하는 문법이라면, 인터럽트는 이벤트가 발생 했을 시에만 값을 변경하는 용도로 사용된다.
병렬 처리(Parallel Processing)
- 동시에 어러 개의 명령을 처리하여 CPU 의 성능을 향상시키는 방식이다.
- 파이프라인 기법
- 하나의 코어에서 여러 개의 스레드를 이용
- 스레드(thread) : CPU 에서 처리되는 작업 단위
- CPU 멀티스레드라고도 불린다.
- 슈퍼스칼라 기법
- 여러 개의 코어를 사용(e.g 듀얼코어)하여 복수의 명령어를 동시에 실행
- 현재는 코어가 8개인 옥타코어(octa-core)가 대중화 되었다.
- 병렬 처리시 고려사항
- 상호 의존성이 없어야한다.
- 각 단계의 시간을 거의 일정하게 맞춰야한다.
- 전체 작업 시간을 몇단계로 나눌지 잘 따져야한다.
- 병렬처리의 깊이(depth of parallel processing) 작업을 N 개로 쪼갰을 때의 N
- 보통 병렬처리의 깊이를 10~20 정도로 한다.
맨 위로 이동 ↑
댓글 남기기