우선, 앱 실행 과정을 간단하게 설명하면...
1. 보조기억장치(HDD)에서 앱을 더블클릭하여 실행시킨다.
2. 앱이 주기억장치(RAM)으로 복사된다. (이 과정이 흔히 말하는 ‘로딩'이다.)
3. RAM과 CPU가 연계하여 앱이 실행된다.
(실행 중인 앱을 ‘Process’라고도 한다.)
과정을 좀 더 자세히 살펴보자.
우선, 앱은 프로그래밍 언어로 만들어진 명령어 복합체이다.
요즘에는 C언어, Python, Swift와 같은 사람이 이해하기 수월한 고급언어로 코딩한다.
하지만 CPU는 오직 ‘0’과 ‘1’로 이루어진 기계어만 이해할 수 있다.
그래서 VSCode나 Xcode 같은 IDE 프로그램들이 고급언어를 기계어로 변환해준다.
이 과정을 ‘컴파일'이라고 한다.
RAM의 역할 ?
RAM에는 4가지 영역이 있다.
코드, 데이터, 힙, 스택으로 구성되어 있다.
간단하게 코드 영역과 데이터 영역(데이터, 힙, 스택)으로 구분할 수 있겠다.
코드 영역은 앱을 실행시키면 앱의 코드가 저장되는 영역이다.
물론 컴파일되어 기계어로 저장된다.
이 때, 앱 코드 상의 값과 명령은 모두 각각의 주소에 배정되어 저장된다.
(예를 들면, ‘10001, 데이터' 또는 ‘10002, 명령어' 등과 같이 순차적으로 저장된다.)
CPU의 역할 ?
CPU에는 제어장치와 연산장치가 있다.
우선 제어장치가 RAM의 코드 영역의 주소를 참조하여 순서대로 한 줄씩 적절히 제어한다.
(아래 과정은 '이러한 과정이 있구나~'라고만 대충 보고 넘기자.)
제어장치에서 명령 코드의 주소가 PC(프로그램 카운터)에 입력되고,
MAR(메모리 주소 레지스터)가 주소를 참조하여 RAM의 해당 명령 코드를 불러온다.
그리고 MBR(메모리버퍼 레지스터)은 이 명령 코드를 IR(명령 레지스터)로 전달하고
이어서 ID(명령어 해독기)로 전달되어 연산장치로 넘겨준다.
연산장치에서는 ACC(누산기)와 ALU(산술논리장치)가 실질적으로 명령 코드를 연산하여 RAM의 데이터 영역에 저장한다.
즉, RAM의 코드 영역이 CPU의 제어장치와 연산장치를 통해 실행되고,
그 결과는 다시 RAM의 데이터 영역에 저장된다.
(이 과정이 반복되면서 앱이 실행된다.)
참고
- RAM의 영역
- RAM에서의 4가지 영역인 코딩, 데이터, 힙, 스택 영역은 물리적으로 또는 하드웨어적으로 분리되어 있지 않다.
- OS가 적절히 나누어서 관리하고, 이는 데이터 종류에 따라 최적의 효율성을 위한 메모리 구조이다.
- 당연하겠지만 RAM에는 항상 운영체제(OS)가 실행되고 있다.
- RAM과 ROM
- ROM(Read Only Memory)은 비휘발성 메모리로 RAM과 같은 메모리 영역이다.
- 컴퓨터 전원을 킬 때 자가점검(CPU, RAM)을 진행하고, ROM-BIOS(기본 입출력 활성화)와 부팅(OS를 RAM에 올림) 기능을 실행한다.
- Cashe
- CPU와 RAM은 BUS(선)로 이루어져 있는데, 물리적인 연결이다보니 메모리를 전달하는 과정에서 성능이 느려진다.
- 이를 대비하여 CPU 내 메모리를 저장하여 바로 사용할 수 있는 작은 저장공간이 있는데, 그것이 Cashe(캐시메모리)이다.
- 어셈블리언어(저급언어)
- 고급언어가 탄생하기 전에 사람이 알아볼 수 있게만 만든 어셈블리 언어가 있었다.
- 어셈블리 언어는 기계어와 1대1 매칭이다. (기계어 한 줄 = 어셈블리 언어 한 줄)
- 고급언어는 기계어와 1대 1 매칭이 아니다.
- 레지스터는 CPU 내부에 있는 저장장치라고 생각하면 이해하기 쉽다.
- 흔히 말하는 CPU 스펙인 2.0GHz는 1초에 20억번의 사이클을 할 수 있다는 말이다.
- 사이클은 코드 영역의 한 코드가 아니라 CPU 내부의 제어 및 연산 작업 단위를 말한다.
- 듀얼코어나 쿼드코어는 CPU의 개수를 의미한다.
'Computer Science' 카테고리의 다른 글
[CS] 데이터 표현과 단위 (0) | 2022.07.10 |
---|