-
728x90
현대 컴퓨터 구조의 가장 큰 문제는 무엇일까? CPU, 메모리, 주변장치의
작업 속도
가 다른 것이다. CPU 내부 버스의 속도가 시스템 버스의 속도보다 빠르기 때문에 주변장치의 속도가 CPU의 속도를 따라가지 못한다.컴퓨터의 성능을 향상시키기 위해서는 이러한 속도 차이를 개선함으로써 시스템의 작업 속도를 올리는 것이 중요하다.
1. 버퍼
버퍼
는 두 장치의 속도 차이를 완화하는 역할을 한다. 적정량의 데이터를한꺼번에 옮기는
방식으로 차이를 완화한다.1 크기의 데이터를 5번 옮기는 것과 1 크기의 데이터 5개를 1번 옮기는 것의 차이라고 보면 된다. 요청과 응답이 5번이었던 것이 1번으로 줄면서 속도 차이를 어느 정도 완화할 수 있는 것이다.
P.S. 스풀
CPU
와입출력장치
가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다. 워드로 작업한 내용을 출력할 때 프린터로 출력하도록 지시하고 워드로 계속 작업할 수 있는 이유는스풀러
가 있기 때문이다. 출력 지시한 내용이 스풀러에 저장되어 프린터에 전달되기 때문이다.버퍼는 프로그램들이 공유할 수 있지만 스풀은 배타적이다. 한 인쇄물이 완료될 때까지 다른 인쇄물이 끼어들 수 없는 이유다.
하드웨어 안전 제거
버퍼를 사용하면 버퍼가 다 채워질 때까지 데이터 전송이 지연된다. 따라서 데이터가 다 저장된 것처럼 보여도 아직 버퍼에 남아 전송되지 않았을 수 있다. 이로 인한 데이터 손실을 방지하기 위해 하드웨어 안전 제거 기능을 사용하면 버퍼에 남아 있는 데이터를 USB 등의 저장장치로 보내고 안전하게 연결을 해제할 수 있다.2. 캐시
메모리와 CPU 간의 속도 차이
를 완화하기 위해 데이터를 미리 가져와 저장해두는 임시 저장소다. 버퍼의 일종이라고 볼 수 있는데, 데이터를 미리 가져오는 것을prefetch
라고 한다.캐시는 CPU 안에 존재하며 CPU 내부 버스의 속도로 작동한다. CPU는 메모리에 접근할 일이 생기면 캐시에 먼저 접근해 해당 데이터가 존재하는지 검사한다. 데이터를 찾으면
cache hit
, 데이터를 못 찾으면cache miss
라고 한다.데이터를 못 찾은 경우에는 메모리를 추가로 검사한다. 캐시 히트가 되는 비율을
캐시 적중률
이라고 한다. 일반적으로 90% 정도 된다고 한다. 캐시 적중률을 높이기 위해서는 캐시 크기를 늘리거나 앞으로 많이 사용될 데이터를 잘 예측해서 가져와야 한다.즉시 쓰기와 지연 쓰기
캐시에 있는 데이터가 변경될 경우 메모리의 데이터와의 동기화 작업이 필요하다. 이 작업을 하는 타이밍에 따라 즉시 쓰기와 지연 쓰기로 방식이 나뉜다.
즉시 쓰기
는 캐시의 데이터가 변경되면 바로 메모리의 데이터도 변경한다. 언제나 일치된 상태로 데이터를 유지할 수 있어 예상치 못한 상황에서 데이터의 손실에 대한 걱정은 없지만 잦은 데이터 전송으로 성능이 저하될 수 있다.지연 쓰기
는 변경된 내용을 주기적으로 메모리의 데이터에 반영한다.copy back
이라고도 하는데, 시스템의 성능을 향상시킬 수 있다는 장점이 있지만 캐시와 메모리 사이의 데이터 불일치가 있을 수 있다는 단점이 있다.L1 캐시와 L2 캐시
프로그램의 명령어는 크게 두 가지로 나눌 수 있다.
- 어떤 작업을 할 지 나타내는
명령어
- 작업 대상인
데이터
캐시 또한 크게 두 가지로 나눌 수 있다.
- 명령어와 데이터 구분 없이 모든 자료를 가져오는
일반 캐시
- 명령어와 데이터를 구분하여 가져오는
특수 캐시
위 그림은 레벨별 캐시의 구조를 보여준다. 특수 캐시는 CPU 레지스터에 직접 연결되기 때문에
L1(level 1) 캐시
라고 하고, 일반 캐시는 메모리와 연결되기 때문에L2(level 2) 캐시
라고 한다.3. 저장장치의 계층 구조
캐시의 속도가 빠르다면 왜 캐시의 메모리를 하드 디스크처럼 충분히 늘려서 사용하지 않는 것일까? 비싸기 때문이다. 성능이 좋은 제품일수록 가격이 비싼 것은 당연한 것이다. 그렇기 때문에 적정한 가격으로 컴퓨터를 사용하기 위해서는 지금과 같은 저장장치의 계층 구조가 필요하다.
속도가 빠르고 비싼 저장장치를 CPU 가까운 쪽에, 속도가 느리고 저렴한 대신 용량이 큰 저장장치를 CPU와 먼 쪽에 배치함으로써
적당한 가격, 빠른 속도, 큰 용량
을 동시에 얻을 수 있다.4. 인터럽트
초기의 컴퓨터에는 주변장치가 많지 않았기 때문에 CPU가 입출력장치의 관리까지 맡았다. 주기적으로 입출력장치의 상태를 검사하고 데이터를 가져오는 방식인
폴링 방식
이었는데 CPU가 명령어 해석과 실행 외의 다른 역할까지 해야 해서 작업 효율이 떨어졌다.이에 나온 것이
인터럽트 방식
이다. CPU는 자신의 일만 하고 있다가 입출력장치의 상태에 따라 신호를 받고 그에 따른 대응을 한다. 자세한 과정은 아래와 같다.인터럽트 방식 과정
- CPU가 입출력 관리자에게 입출력 명령을 보냄
- 입출력 관리자는 명령에 따라
데이터를 메모리로
혹은메모리에 있는 데이터를 저장장치로
옮김 - 데이터 전송이 완료되면 입출력 관리자는
완료 신호(인터럽트)
를 CPU에 보냄 - CPU는 하던 작업을 중단하고 옮겨진 데이터 처리
CPU가 어떤 작업이 끝났는지를 판별할 수 있게 하기 위해
인터럽트 번호
를 사용한다.입출력장치의 id
라고 볼 수 있다.또한 여러 인터럽트를 효과적으로 관리하기 위해 여러 개의 인터럽트를 하나의 배열로 만든
인터럽트 벡터
를 사용한다. CPU는 인터럽트 벡터를 통해 동시에 발생한 인터럽트들을 동시에 처리한다.직접 메모리 접근
폴링 방식에서는 CPU가 데이터 입출력까지 담당하기 때문에 메모리나 주변장치에 대한 모든 권한을 가진다. 반면, 인터럽트 방식에서는
입출력 관리자
가 데이터의 입출력을 관리한다.입출력 관리자가 데이터의 입출력을 관리하기 위해서는 CPU의 허락 없이 메모리에 접근할 수 있는 권한이 필요하다. 이 권한을
직접 메모리 접근
이라고 한다.메모리 매핑 입출력
메모리에는 CPU와 입출력 장치가 사용하는 데이터가 섞여 있다. 이를 아무렇게나 관리하면 혼돈이 올 것이기에 메모리 영역을 나누어서 사용하는 것이 필요하다.
- 운영체제 영역
- CPU 작업 영역
- 입출력 작업 영역
요렇게 세 영역으로 메모리를 나누어서 관리하는 기법을
메모리 매핑 입출력(Memory Mapped I/O, MMIO)
이라고 한다.사이클 훔치기
CPU와 입출력장치가 동시에 메모리에 접근할 때 속도가 빠른 CPU가 속도가 느린 입출력장치에게 우선순위를 주어 빠른 입출력이 가능하게 하도록 하는 기법
728x90'운영체제' 카테고리의 다른 글
06. 프로세스 제어 블록과 문맥 교환 (0) 2021.09.20 05. 프로세스의 개요 (0) 2021.09.20 04. 병렬 처리 (0) 2021.09.20 02. CPU와 메모리 (0) 2021.09.20 01. 컴퓨터의 기본구성 (0) 2021.09.20 - 어떤 작업을 할 지 나타내는