와드의 블로그

Chapter 2. 컴퓨터의 구조와 성능 향상 본문

CS/운영체제

Chapter 2. 컴퓨터의 구조와 성능 향상

Ward 2021. 10. 21. 15:28

1. 컴퓨터의 기본 구성

1-1. 하드웨어의 구성

컴퓨터는 CPU, 메모리, 버스, 입력 장치, 출력 장치, 저장 장치로 구성된다.

CPU, 메모리, 버스는 컴퓨터의 필수 장치이고 나머지를 주변 장치라 한다.

  • CPU: CPU는 명령어를 해석하여 실행하는 장치이다.
  • 메모리: 작업에 필요한 프로그램과 데이터를 저장하는 장소이다.
  • 버스: 데이터들이 지나다니는 통로이다.
  • 입력 장치: 외부의 데이터를 컴퓨터로 입력하는 장치이다.
  • 출력 장치: 컴퓨터에서 처리한 결과를 사용자가 원하는 형태로 출력하는 장치이다.
  • 저장 장치: 저장 장치는 메모리보다 느리지만 저렴하고 용량이 크며, 전원 온오프와 상관없이 데이터를 영구히 저장한다.
  • 메인보드: CPU와 메모리 등 다양한 부품을 연결하는 판으로 다양한 부품이 버스로 연결된다.

1-2. 폰노이만 구조

폰노이만 구조는 CPU, 메모리, 입출력 장치, 저장 장치가 버스로 연결되어 있는 구조이다.

폰노이만 구조의 가장 중요한 특징은 모든 프로그램은 메모리에 올라와야 실행할 수 있다는 것이다.

2. CPU와 메모리

2-1. CPU의 구성과 동작

① CPU의 기본 구성

  • 산술 논리 연산 장치(ALU): 데이터의 산술 연산과 논리 연산을 수행한다.
  • 제어 장치(Control Unit): CPU에서 작업을 지시하는 부분이다.
  • 레지스터: CPU 내에서 데이터를 임시로 보관하는 곳이다.

② CPU의 명령어 처리 과정

CPU는 0과 1로 이루어진 기계어를 인식한다.

프로그래밍 언어로 작성된 코드는 컴파일러를 이용하여 기계어로 변환된다.

CPU의 제어 장치는 기계어로 변환된 명령어를 해석하여 제어 신호를 보내고 CPU 내의 데이터 흐름을 조절하여 명령을 수행한다.

③ 레지스터의 종류

  • 데이터 레지스터(DR): CPU가 명령어를 처리하는 데 필요한 일반 데이터를 임시로 저장하는 범용 레지스터이다.
  • 주소 레지스터(AR): 데이터 또는 명령어가 저장된 메모리의 주소를 저장한다.
  • 프로그램 카운터(PC): 다음에 실행할 명령어의 위치 정보를 저장한다.
  • 명령어 레지스터(IR): 현재 실행 중인 명령어를 저장한다.
  • 메모리 주소 레지스터(MAR): 메모리 관리자가 접근해야 할 메모리 주소를 저장한다.
  • 메모리 버퍼 레지스터(MBR): 메모리 관리자가 메모리에서 가져온 데이터를 임시로 저장한다.
  • 프로그램 상태 레지스터(PSR): 연산 결과(양수, 음수 등)를 저장한다.

④ 버스의 종류

  • 제어 버스: 제어 장치와 연결된 버스로, CPU가 메모리와 주변장치에 제어 신호를 보내기 위해 사용한다.
  • 주소 버스: 메모리 주소 레지스터와 연결된 버스로, 메모리나 주변장치에 데이터를 읽거나 쓸 때 위치 정보를 보내기 위해 사용한다.
  • 데이터 버스: 메모리 버퍼 레지스터와 연결된 버스로, 데이터의 이동이 양방향으로 이루어진다.

2-2. 메모리

① 메모리의 종류

메모리는 읽거나 쓸 수 있는 램(RAM)과 일기만 가능한 롬(ROM)으로 구분된다.

램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉜다.

② 부팅

폰노이만 구조의 컴퓨터에서는 모든 프로그램은 실행되려면 메모리에 올라와야 한다.

운영체제도 프로그램이므로 실행되려면 메모리에 올라와야 한다.

컴퓨터를 켰을 때 운영체제를 메모리에 올리는 과정을 부팅이라고 한다.

사용자가 컴퓨터의 전원을 켜면 롬에 저장된 바이오스가 실행되어 주요 하드웨어가 제대로 작동하는지 확인하고 부트스트랩 프로그램을 메모리로 가져와 실행한다.

부트스트랩 프로그램이 운영체제를 메모리로 가져와 실행한다.

3. 컴퓨터 성능 향상 기술

현대 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변장치의 작업 속도가 다르다는 것이다.

이러한 장치 간 속도 차이를 개선하고 시스템의 작업 속도를 올리기 위해 여러 기술들이 개발되었다.

3-1. 버퍼

① 버퍼의 개념

버퍼(buffer)는 속도에 차이가 있는 두 장치 사이에서 그 차이를 완화하는 역할을 한다.

느린 입출력 장치에서 데이터를 읽을 때마다 하나씩 전송하면 작업량에 비해 실제로 전송되는 데이터의 양은 매우 적다.

그러나 일정량의 데이터를 모아 한꺼번에 전송하면 적은 노력으로도 많은 양의 데이터를 옮길 수 있다.

이렇게 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 장치가 버퍼이다.

② 스풀

스풀(spool)은 CPU와 입출력 장치가 독립적으로 동작하도록 고안된 소프트웨어적인 버퍼이다.

프린터에 사용되는 스풀러가 대표적인 예이다.

3-2. 캐시

① 캐시의 개념

캐시(cache)는 메모리와 CPU 간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 가져와 저장해 두는 임시 장소이다.

캐시는 메모리의 데이터 중 일부를 가져오고, CPU는 메모리에 접근해야 할 때 캐시를 먼저 방문하여 원하는 데이터가 있는지 찾아본다.

캐시에 원하는 데이터가 있는 경우를 캐시 히트라고 하고 없는 경우를 캐시 미스라고 한다.

② 즉시 쓰기와 지연 쓰기

CPU가 캐시에 있는 데이터를 변경하면 변경된 데이터를 메모리에 반영해 주어야 한다.

이때 즉시 쓰기 방식과 지연 쓰기 방식이 있다.

  • 즉시 쓰기(write through): 캐시에 있는 데이터가 변경되면 즉시 메모리에 반영하는 방식이다. 메모리와의 빈번한 데이터 전송으로 인해 성능이 느려진다.
  • 지연 쓰기(write back): 캐시가 변경된 내용을 모아서 주기적으로 반영하는 방식이다. 메모리와의 데이터 전송 횟수가 줄어들어 시스템의 성능을 향상시킬 수 있지만 메모리와 캐시의 데이터 불일치가 발생할 수 있다.

3-3. 저장 장치의 계층 구조

컴퓨터는 다음과 같은 저장 장치의 계층 구조로 CPU의 작업 속도를 높일 수 있다.

상위 계층일수록 속도가 빠르고 용량이 작고 가격이 비싸다.

하위 계층일수록 속도가 느리가 용량이 크고 가격이 싸다.

 

3-4. 인터럽트

① 인터럽트의 필요성

CPU는 여러 입출력 장치들과 데이터를 주고 받는다.

CPU에 비해 주변 장치들은 속도가 느리기 때문에 CPU가 입출력 장치의 일처리를 기다리게 되면 작업 효율이 떨어진다.

인터럽트 방식은 CPU의 작업과 저장 장치의 데이터 이동을 독립적으로 운영할 수 있게 해 줘서 시스템의 효율을 높인다.

② 인터럽트 방식의 동작 과정

입출력 관리자가 CPU에게 보내는 신호를 인터럽트라고 한다.

인터럽트를 이용하여 CPU가 입출력 장치와 데이터를 주고받는 과정은 다음과 같다.

  1. CPU가 입출력 관리자에게 입출력 명령을 보낸다.
  2. 입출력 관리자는 명령받은 데이터를 메모리에 가져다 놓거나 메모리에 있는 데이터를 저장장치로 옮긴다.
  3. 데이터 전송이 완료되면 입출력 관리자는 완료 신호를 CPU에 보낸다.

③ 직접 메모리 접근

입출력이 필요할 때 CPU는 입출력 관리자에게 입출력 요청을 보내고 자신이 하던 일을 계속한다.

명령을 받은 입출력 관리자는 CPU가 요청한 데이터를 메모리에 저장해야 하는데 입출력 관리자는 메모리에 대한 접근 권한이 없어서 데이터를 메모리에 저장할 수 없다.

따라서 입출력 관리자에게는 CPU에게 허락 없이 메모리에 접근할 수 있는 권한이 필요한데 이러한 권한을 직접 메모리 접근이라 한다.

④ 메모리 매핑 입출력

직접 메모리 접근(direct memory access; DMA)을 사용하면 CPU가 사용하는 데이터와 직접 메모리 접근을 통해 들어온 데이터가 섞여서 관리하기 어려워진다.

CPU가 사용하는 메모리 공간과 직접 메모리 접근을 통해 들어오거나 나가는 데이터를 위한 공간을 분리하여 관리하는 것을 메모리 매핑 입출력이라고 한다.

⑤ 사이클 훔치기

CPU와 직접 메모리 접근이 동시에 메모리에 접근하려 하면 CPU가 메모리 사용 권한을 양보한다.

CPU의 작업 속도보다 입출력 장치의 속도가 느리기 때문에 CPU가 직접 메모리 접근에게 메모리 사용 권한을 양보한다.

이것을 사이클 훔치기라고 한다.

4. 병렬 처리

4-1. 병렬 처리의 개념

병렬 처리(parallel processing)는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식이다.

여러 개의 명령을 동시에 처리하는 병렬 처리는 코어가 여러 개인 CPU는 물론이고 코어가 하나인 CPU에서도 작동 가능하다.

4-2. 병렬 처리 시 고려사항

  • 상호 의존성이 없어야 병렬 처리가 가능하다.
  • 각 단계의 시간을 거의 일정하게 맞춰야 병렬 처리가 원만하게 이루어진다.
  • 전체 작업 시간을 몇 단계로 나눌지 잘 따져보아야 한다.

4-3. 병렬 처리 기법

① 명령어가 실행되는 과정

CPU에서 명령어를 처리하는 과정 전체를 하나의 쓰레드(thread)라고 하며, 쓰레드의 각 단계는 CPU의 클록과 연동되어 한 클록에 한 단계씩 처리된다.

CPU가 명령어를 실행하는 과정은 다음과 같다.

  • 명령어 패치(instruction fetch; IF): 다음에 실행할 명령어를 명령어 레지스터에 저장한다.
  • 명령어 해석(instruction decode; ID): 명령어를 해석한다.
  • 실행(execution; EX): 명령어를 실행한다.
  • 쓰기(write back; WB): 실행된 결과를 메모리에 저장한다.

② 파이프라인 기법

파이프라인 기법은 CPU의 사용을 극대화하기 위해 명령을 겹쳐서 실행하는 방법으로, 하나의 코어에 여러 개의 쓰레드를 사용하는 것이다.

파이프라인 기법에서는 명령어를 여러 단계로 분할한 후, 각 단계를 동시에 처리하는 하드웨어를 독립적으로 구성한다.

파이프라인 기법에는 여러 가지 문제가 있는데 이를 파이프라인의 위험이라고 한다.

  • 데이터 위험: 데이터 의존성이 때문에 발생하는 위험이다.
  • 제어 위험: 분기문 같은 명령에서 PC 값을 변화시켜 발생하는 위험이다.
  • 구조 위험: 서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 위험이다.

③ 슈퍼스칼라 기법

슈퍼 스칼라 기법은 파이프라인을 처리할 수 있는 코어를 여러 개 구성하여 복수의 명령어가 동시에 실행되도록 하는 방식이다.

④ 슈퍼 파이프라인 기법

슈퍼 파이프라인 기법은 파이프라인의 각 단계를 세분하여 한 클록 내에 여러 명령어를 처리할 수 있게 한 것이다.

한 클록 내에 여러 명령어를 실행하면 다음 명령어가 빠른 시간 안에 시작될 수 있어 병렬 처리 능력이 높아진다.

 

⑤ 슈퍼 파이프라인 슈퍼스칼라 기법

슈퍼 파이프라인 슈퍼스칼라 기법은 앞의 병렬 처리 기법을 모두 합쳐 놓은 것이다.

⑥ VLIW 기법

VLIW 기법은 CPU가 병렬 처리를 지원하지 않을 경우 소프트웨어적으로 병렬처리를 지원하는 방법이다.

VLIW 기법에서는 동시에 수행할 수 있는 명령어들을 컴파일러가 추출하고 하나의 명령어로 압축하여 실행한다.

 

참조자료: 「쉽게 배우는 운영체제」 조성호

'CS > 운영체제' 카테고리의 다른 글

Chapter 4. CPU 스케줄링  (1) 2024.03.30
Chapter 3. 프로세스와 스레드  (0) 2024.03.25
Chapter 1. 운영체제의 개요  (0) 2021.10.20