프로그래밍공부(Programming Study)/운영체제(OS)

CPU와 메모리 기본 개념

Chann._.y 2024. 9. 23.
728x90

CPU메모리는 컴퓨터 시스템에서 매우 밀접하게 연결되어 있지만, 각각의 역할은 다릅니다. 프로그램이 실행되는 동안 CPU와 메모리는 서로 협력하여 작업을 처리합니다. CPU는 연산을 담당하는 장치이며, 메모리는 데이터와 명령어를 저장하고 관리하는 장치입니다. 각 상황에서 언제 CPU를 사용하고 언제 메모리를 사용하는지 명확히 설명해드리겠습니다.


1. CPU는 언제 사용되는가?

CPU는 프로그램이 실행될 때 연산과 명령어 처리를 담당합니다. 즉, 프로세서가 실제로 일을 하는 순간에는 CPU가 사용됩니다. CPU는 프로그램의 논리적 흐름을 처리하고, 다양한 명령을 빠르게 수행합니다.

CPU 사용 시점:

  • 연산을 수행할 때: 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 비교, 조건문 처리 등의 논리 연산을 처리할 때 CPU가 사용됩니다.
  • 프로그램 명령어 실행: CPU는 프로그램에서 제공하는 명령어(명령어 집합)를 순차적으로 실행합니다. 예를 들어, 함수 호출, 조건문 처리, 루프 실행 등의 명령어들이 CPU에서 처리됩니다.
  • 제어 흐름 관리: 분기(조건문, if-else), 함수 호출, 루프 같은 프로그램의 흐름 제어를 처리할 때 CPU가 필요합니다.
  • 데이터 이동: CPU는 메모리와 데이터를 주고받으며, 레지스터와 같은 고속 메모리에서 처리할 데이터를 가져와 계산을 수행하고 다시 메모리로 보냅니다.
  • 인터럽트 처리: I/O 장치에서 발생하는 인터럽트(하드웨어 신호)를 처리할 때 CPU는 해당 요청에 대응하여 작업을 처리합니다.

예시:

  • 프로그램이 변수에 값을 더하거나 곱할 때, CPU는 그 계산을 수행합니다.
  • 루프가 실행될 때, CPU는 반복적으로 명령어를 실행하며 그 흐름을 제어합니다.

2. 메모리는 언제 사용되는가?

메모리는 프로그램이 실행될 때 데이터와 명령어를 저장하고, CPU가 해당 데이터에 접근할 수 있도록 하는 역할을 합니다. CPU가 필요한 데이터를 처리하려면, 그 데이터가 메모리에 있어야 합니다.

메모리 사용 시점:

  • 프로그램 데이터 저장: 모든 변수, 객체, 함수 등의 데이터는 메모리에 저장됩니다. CPU가 작업을 수행하기 위해 필요한 값과 데이터는 먼저 메모리에 로드됩니다.
  • 프로그램 명령어 저장: 프로그램이 실행되면, 명령어(코드)가 메모리에 저장됩니다. CPU는 이 명령어를 메모리에서 읽어와 처리합니다.
  • 데이터 읽기/쓰기: 프로그램은 메모리에서 데이터를 읽거나 저장할 때 메모리를 사용합니다. 예를 들어, 변수에 값을 저장하거나, 배열을 업데이트하는 작업은 메모리에서 이루어집니다.
  • 함수 호출 및 반환: 함수가 호출되면 함수의 매개변수지역 변수가 메모리(주로 스택)에 저장되고, 함수가 종료되면 메모리에서 제거됩니다.
  • I/O 작업 처리: 파일 읽기, 네트워크 통신, 사용자 입력 등과 같은 I/O 작업은 데이터가 메모리로 들어오고, 다시 나가는 과정에서 메모리를 사용합니다.

예시:

  • 프로그램에서 어떤 값을 변수에 저장하거나 읽을 때, 그 데이터는 메모리에서 관리됩니다.
  • 배열, 리스트, 객체와 같은 데이터 구조는 메모리에 저장되고, CPU가 이를 처리할 때 해당 데이터를 메모리에서 가져옵니다.

3. CPU와 메모리의 협업

CPU와 메모리는 항상 함께 작동합니다. 즉, CPU는 연산과 명령어 처리를 담당하고, 메모리는 그 연산에 필요한 데이터와 명령어를 저장하는 역할을 합니다.

CPU와 메모리 간 상호작용 과정:

  1. 명령어를 읽어옴: CPU는 메모리에서 프로그램의 명령어를 읽어와 실행합니다. 명령어는 메모리에 저장되어 있으며, CPU는 이를 하나씩 가져와 처리합니다.
  2. 데이터 읽기: 연산을 수행하기 위해 CPU는 필요한 데이터를 메모리에서 읽어와 레지스터에 로드한 후, 연산을 수행합니다.
  3. 연산 수행: CPU는 데이터를 이용해 연산을 수행합니다. 예를 들어, 두 수를 더하거나 비교하는 연산을 처리합니다.
  4. 결과 저장: 연산 결과는 다시 메모리로 저장됩니다. 계산된 값을 메모리에 다시 쓰거나, 다른 작업을 위해 보관할 수 있습니다.
  5. 메모리로부터 데이터 교환: 이 과정에서 메모리의 데이터가 변경될 수 있으며, CPU는 프로그램 흐름을 계속해서 진행합니다.

예시: 덧셈 연산의 경우

  • 1단계: CPU는 메모리에서 덧셈 연산에 대한 명령어를 읽어옵니다.
  • 2단계: 두 숫자는 메모리에 저장되어 있으며, 메모리에서 이 숫자를 읽어와 CPU의 레지스터에 로드합니다.
  • 3단계: CPU는 레지스터에서 가져온 두 숫자를 더합니다.
  • 4단계: 계산된 결과는 메모리에 저장됩니다.

4. CPU와 메모리 사용의 구체적 예시

1) 변수 선언과 사용

int a = 10;
int b = 20;
int c = a + b;
  • 메모리 사용: ab라는 변수는 메모리에 저장됩니다. a = 10, b = 20은 메모리에 각각 저장된 값을 의미합니다.
  • CPU 사용: c = a + b 명령어가 실행되면 CPU는 메모리에서 ab의 값을 읽어와 연산(덧셈)을 수행하고, 그 결과를 다시 메모리에 저장합니다.

2) 함수 호출

int multiply(int x, int y) {
    return x * y;
}
  • 메모리 사용: 함수가 호출되면 매개변수 xy는 메모리에 저장됩니다. 함수 실행이 끝나면, 그 메모리 영역은 해제됩니다.
  • CPU 사용: x * y 연산은 CPU에서 처리됩니다. CPU는 메모리에서 xy 값을 읽어와 곱셈을 수행한 후, 그 결과를 반환합니다.

3) 파일 읽기

BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
String line = reader.readLine();
  • 메모리 사용: 파일의 데이터를 메모리에 로드합니다. 이 경우 line 변수는 메모리에 저장되고, 파일의 내용이 해당 변수로 로드됩니다.
  • CPU 사용: 파일 데이터를 읽고, 그 데이터를 처리하는 작업은 CPU가 처리합니다.

5. CPU와 메모리의 차이와 협력 관계

  • CPU는 실제 연산을 수행하고, 프로그램의 흐름을 제어하며, 명령어를 실행하는 역할을 합니다.
  • 메모리데이터명령어를 저장하며, CPU가 이 데이터를 이용해 작업을 처리할 수 있도록 제공합니다.

CPU와 메모리는 서로 협력하여 프로그램이 원활하게 실행될 수 있도록 하며, 프로그램이 처리해야 할 데이터는 메모리에 저장되고, CPU는 이를 처리하는 역할을 맡습니다.

728x90

댓글