현대 컴퓨터 구조의 문제는 CPU와 메모리, 주변 장치의 작업 속도가 다르다는 것이다.
이런 장치 간 속도 차이를 개선하고 시스템의 작업 속도를 올리기 위해 개발된 기술을 알아볼 것이다.
1 버퍼
버퍼 : 버퍼는 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 한다.
데이터를 하나씩 전송하는 것 보다, 데이터를 모아 한꺼번에 전송하면 적은 노력으로 많은 양의 데이터를 옮길 수 있다. 이렇게 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 장치가 버퍼이다.
스풀 : 소프트웨어적인 버퍼로 대표적인 예시는 프린터의 스풀러이다.
스풀러는 인쇄할 내용을 순차적으로 출력하는 소프트웨어이다.
인쇄할 내용을 하드디스크의 스풀러 영역에 저장하고 워드 프로세스는 다른 작업을 할 수 있다.
하드웨어 안전 제거 : 버퍼에 있는 아직 옮겨지지 않은 데이터를 USB 등의 저장장치로 보내고 USB의 전원을 차단하여 안전하게 제거할 수 있도록 해준다.
2 캐시
2.1 캐시의 개념
캐시는 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장하는 임시 장소이다. 캐시는 버퍼의 일종으로 CPU가 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓는다. 이 작업을 미리 가져오기(prefetch)라고 한다.
캐시는 메모리의 내용 중 일부를 미리 가져오고, CPU는 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아본다. 있다면 캐시 히트(hit)라고 하고, 없다면 메모리에 가서 직접 찾아야 하는데 이를 캐시 미스(miss)라고 한다.
캐시가 히트되는 비율을 캐시 적중률이라고 하며 보통 90퍼센트이다.
2.2 즉시 쓰기와 지연 쓰기
캐시에 있는 데이터가 변경되었을 때 메모리에 있는 원래 데이터도 변경해야 한다.
즉시 쓰기 : 캐시의 데이터가 변경될 때 메모리에 즉시 반영하는 방식이다. 빈번한 데이터 전송으로 속도가 느려지지만, 데이터를 잃어버리지 않는다.
지연 쓰기 : 변경된 내용을 모아서 주기적으로 반영하는 방식으로 카피백(copy back)이라고도 한다. 시스템의 성능은 향상되지만 메모리와 캐시 사이의 불일치가 있을 수 있다.
2.3 L1 캐시와 L2 캐시
프로그램의 명령어는 크게 어떤 작업을 할 지 나타내는 명령어 부분과, 작업 대상인 데이터 부분으로 나눌 수 있다. 캐시는 모든 자료를 가져오는 일반 캐시, 명령어와 데이터를 구분하는 특수 캐시라는 두 가지 레벨로 구분된다.
명령어 캐시는 명령어 레지스터와, 데이터 캐시는 데이터 레지스터와 연결되어 있다.
이 두 캐시는 CPU 레지스터에 직접 연결되어 L1 캐시라고 부르며, 일반 캐시는 메모리와 연결되어 L2 캐시라고 부른다.
3 저장장치의 계층 구조
저장장치의 계층구조(Storage Hierarchy)는 속도가 빠르고 값이 비싼 저장장치를 CPU 가까운 쪽에 두고, 값이 싸고 용량이 큰 저장장치를 반대쪽에 배치하여 적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻는 방법이다.
4 인터럽트
4.1 인터럽트의 개념
CPU가 모든 입출력에 관여하면 작업 효율이 떨어진다. 이 문제를 해결하기 위한 방식이 인터럽트 방식이다.
인터럽트 방식은 CPU의 작업과 저장장치의 데이터 이동을 독립적으로 운영해서 시스템의 효율을 높인다.
즉 데이터의 이동이 있는 동안 CPU는 다른 작업을 할 수 있다.
4.2 인터럽트 방식의 동작 과정
1) CPU가 입출력 관리자에게 입출력 명령을 보낸다.
2) 입출력 관리자는 명령받은 데이터를 이동한다.
3) 데이터 전송이 끝나면 입출력 관리자는 완료 신호를 CPU에 보낸다.
이 완료 신호를 인터럽트라고 한다. 인터럽트를 받으면 CPU는 하던 일을 중단하고 옮겨진 데이터를 처리한다. 이렇게 하던 작업을 중단하고 처리해야 하는 신호라서 인터럽트라고 한다.
다양한 장치 중에 어떤 장치의 작업이 끝났는지 알리기 위해 인터럽트 번호를 사용한다.
4.3 직접 메모리 접근
메모리는 CPU만 접근 권한을 가진 작업 공간이라 입출력 관리자는 접근이 불가능하다. 따라서 CPU의 허락 없이 접근할 수 있는 권한이 필요한데 이 권한을 직접 메모리 접근(DMA)라고 한다.
4.4 매모리 매핑 입출력
직접 메모리 접근을 사용하면 메모리가 복잡해진다. 이를 위해 메모리를 나눠 사용하는 방법이 도입되었다.
CPU의 메모리 공간과 직접 메모리 접근을 통한 데이터 공간을 분리한다. 이렇게 메모리의 일정 공간을 입출력에 할당하는 기법을 메모리 매핑 입출력이라고 한다.
'프로그래밍 이론 & 책 > 운영체제' 카테고리의 다른 글
[운영체제] 3.1 프로세스의 개요 (0) | 2020.05.22 |
---|---|
[운영체제] 2.4 병렬 처리 (0) | 2020.05.21 |
[운영체제] 2.2 CPU와 메모리 (0) | 2020.05.21 |
[운영체제] 2.1 컴퓨터의 기본 구성 (0) | 2020.05.21 |
[운영체제] 1.3 운영체제의 구조 (0) | 2020.05.20 |