2-3.[os] 컴퓨터 성능 향상 기술
현대 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변장치의 작업 속도가 다르다는 것이다.
CPU > 메모리 > 하드디스크
시스템 버스: 메인보드 내 메모리와 주변장치
내부 버스: CPU 내 레지스터,산술논리 연산장치, 제어장치
버퍼
- 일정량의 데이터를 모아 옮기면서 속도의 차이를 완화하는 장치
- 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할
- 귤을 하나씩 옮기는 것보다 바구니에 담아서 옮기는 게 더 빠름
하드디스크의 메모리 버퍼
- 예) 하드디스크의 용량이 1TB, 디스크의 회전 속도가 7500rpm, 버퍼의 용량이 32MB
소프트웨어적인 버퍼
- 동영상 스트리밍
- 네트워크에서 데이터가 들어오는 시간과 플레이어가 재생되는 시간의 속도 차이 -> 버퍼에 넣어 끊김 방지
스풀
- CPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼
- 프린터의 스풀러
- 인쇄할 내용을 순차적으로 출력, 출력 명령을 내린 프로그램과 독립적으로 동작
- 스풀러가 없다면? -> 인쇄가 끝날 때까지 워드 사용 불가
버퍼: 프로그램들이 버퍼를 공유, 어떤 데이터든 버퍼만 차면 이동
스풀러: 한 인쇄물이 완료될 때까지 다른 인쇄물이 못 끼어듦 -> 배타적
- 버퍼가 다 채워질 때까지 데이터 전송 지연된다!
- 버퍼를 비우지 않았는데 하드웨어를 제거하면 일관성이 무너진다(USB 뽑기, 전원 버튼으로 끄기)
캐시
- CPU가 앞으로 사용할 것으로 예상되는 메모리의 데이터를 미리 가져와 저장해두는 임시 장소
- 필요한 데이터를 모아 한꺼번에 전달히는 버퍼의 일종
- CPU 안에 있고 CPU 내부 버스의 속도로 작동
- 메모리의 시스템 버스 속도는 느리다
- 캐시는 빠른 속도로 작동하는 CPU와 느린 속도로 작동하는 메모리 사끼에서 두 장치의 속도 차이를 완화
- CPU는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아본다
- cache hit: 캐시에서 원하는 데이터를 찾음
- cache miss: 캐시에 원하는 데이터가 없음 -> 메모리로 감
- cache hit ratio: 캐시 적중률
- 캐시 크기↑ 캐시 적중률↑ 컴퓨터 성능↑
- 예) 인텔 i7 캐시 메모리 4MB < 8MB
- 앞으로 많이 사용될 데이터를 가져오기
- 지역성 이론: 가까운 데이터가 멀리 있는 데이터보다 사용될 확율이 높다. 이미 사용되었다면 다음에도 또 사용될 것
즉시 쓰기(write through):
- 캐시에 있는 데이터가 변경되면 즉시 메모리에 반영하는 방식
지연 쓰기(write back, copy back):
- 캐시에 있는 데이터가 변경되면 주기적으로 반영
- 전송횟수↓ 시스템 성능↑
- 메모리와 캐시의 불일치↑
- 협업 중일 때 데이터 읽으려 하면 일관성이 깨짐
- 전원 꺼지면 데이터 잃어버림
- 일반 캐시: 명령어와 데이터의 구분없이 가져옴
특수 캐시: 명령어와 데이터를 구분하여 가져옴
L1 캐시: 명령어 캐시, 데이터 캐시: CPU 레지스터에 직접 연결
- L2 캐시: 메모리와 연결
웹 브라우저 캐시: ‘앞으로 다시 방문할 것을 예상하여 지우지 않은 데이터
ex) 로고나 버른등의 작은그림
저장장치의 계층 구조
- 최고의 성능? (비용 깨짐)
- 하드디스크 -> SSD 교체 (가격 10배)
- 메모리 size = 하드디스크 size
- 캐시↑ -> 캐시 적중률↑
저장장치의 계층 구조(storage hierarchy)
- 속도가 빠르고 값이 비싼 저장장치를 CPU 가까운 쪽에 두고
- 싸고 용량이 큰 저장장치를 멀리 둔다
- -> 적당한 가격으로 빠른 속도와 큰 용량을 얻음
- 데이터 일관성 유지하는게 문제(지연쓰기)
인터럽트
- 옛날 - 주변장치가 많이 없었음 폴링(polling): CPU가 직접 입출력장치에서 데이터를 가져온다 옛날 방식 (요즘은 명령어 해석과 실행)
인터럽트(interrupt):
- 입출력 관리자에게 데이터 전송을 지시
데이터 입출력이 이루어지는 동안 CPU가 다른 작업을 할 수 있다 (주방보조)
CPU가 입출력 관리자에게 입출력 명령을 보냄
- 입출력 관리자는 명령받은 데이터를 CPU -> 메모리 / 메모리 -> 저장장치로 옮김
- 인터럽트: 완료 신호를 CPU에게 보낸다
인터럽트 = 완료 신호
- CPU는 입출력 관리자에게 작업 지시를 내리고 다른 일을 하다가 완료 신호를 받으면 하던 일을 중단하고 옮겨진 데이터를 처리
- 하던 작업을 중단하고 처리해야 하는 신호
인터럽트 번호(interrupt number): 어느 주변장치의 작업이 끝났는지 알려주는 고유 번호
인터럽트 벡터(interrupt vector): 여러 개의 인터럽트를 하나의 배열로 만듦
인터럽트
- 입출력 요청
- 데이터 전송
- 인터럽트 발생
직접 메모리 접근(Direct Memory Access, DMA)
- (보통 CPU만 메모리에 접근 권한 있음)
- 입출력 관리자에게는 CPU의 허락 없이 메모리에 접근할 수 있는 권한
- 인터럽트 방식의 필수요소
- CPU가 사용하는 데이터와 입출력 장치가 사용하는 데이터 분리
- 메모리 매핑 입출력: 메모리 일정 공간을 입출력에 할당하는 기법
- CPU가 사용하는 메모리 공간과 직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간을 분리
사이클 훔치기(cycle stealing):
- CPU와 직접 메모리 접근이 동시에 메모리에 접근하려한다면?
- 보통 CPU가 양보함
- CPU 입장에서는 직접 메모리 접근이 사이클(순서)를 훔쳐간 것