에디의 우당탕탕 코딩공장

프로그램은 어떻게 동작하는 걸까?

by 인턴 에디
📌 모두의 코드 C  글을 읽고 작성하였습니다.

1. 명령어 처리

CPU( Central Processing Unit )

중앙 처리 장치

CPU는 명령어를 처리하는 조그마한 반도체이다. 

컴퓨터의 모든 명령어들은 CPU에서 처리되는데, 명령어를 실행하기 위해서는 

1. 명령어 읽기

2. 연산된 결과 저장하기

두 가지 조건이 필요하다.

 

CPU는 간단하게 내부에는 ALU(연산장치) , Register(레지스터), 제어장치(CU)가 있다.

여기서, Register(레지스터)는 CPU에 16개 밖에 없다. → 데이터를 저장해 놓을 공간이 매우 부족하다.

✔ 64Bit CPU일 경우 각 레지스터에 64Bit의 데이터를 담을 수 있다.

 

2. 명령어 저장 및 불러오기

RAM( Random Access Memory )

 

임의 접근 메모리

따라서, 우리는 RAM이라는 저장 공간 역할하는 장치를 통해 데이터를 저장한다.

CPU는 램에 실행할 명령어들을 저장해 놓고 있다가, 연산을 수행할 때 램에서 읽어들인다.

하지만, RAM은 휘발성 메모리이기 때문에, 전원이 공급되지 않는다면 메모리에 저장되어 있는 데이터는 모두 날라간다.

 

SSD와 HDD

전기 공급 없이도 데이터를 안정적으로 보관 할 수 있지만, 램과 비교했을 때 데이터를 읽어들이는 작업은 훨씬 느리다.


 

전체적인 개요

1. 하드 디스크에서 저장되어 있는 프로그램의 위치를 찾아서 램에 복사 해놓는다.

2. CPU는 랩에서 명령어를 읽어들여서 실행을 한다.

 

CPU에서 RAM에 접근하는 속도도 그리 빠른 편은 아니다.

아래 표를 보면, 대략 비교가 가능하다.

1CPU 사이클 0.4 나노초 1초
L1 캐시 접근 0.9 나노초 2초
L2 캐시 접근 2.8 나노초 7초
L3 캐시 접근 28 나노초 1분
RAM 접근 ~100 나노초 4분
일반 SSD 접근 50~150 마이크로초 1.5일~4일
일반 하드디스크 접근 1~10 밀리초 1~9달

 

표를 보면 CPU사이클 다음으로 빠른 것이 L1 캐시 접근이라고 되어 있는데, CPU는 빠르게 데이터를 레지스터에 불러올 수 있는 저장 공간으로 캐시( Cache )라는 것을 사용한다.

 

Cache( 캐시 )

캐시는 3개의 계층으로 이루어져있다.

L1 > L2 > L3로 지금 가장 필요한 데이터를 L1 캐시에 넣고, 중요도에 따라 필요성이 낮을 수록 L2, L3 캐시에 배치된다.

캐시에 대한 자세한 내용은 나중 포스팅에서 다룰 예정이다.

 

3. 명령어 작성

CPU가 램에서 데이터를 읽기 위해서는 램의 어디에서 데이터를 읽어들일지 말해주어야한다.

RAM에 있는 모든 데이터는 1바이트 단위로 0번을 시작으로 고유의 주소 (address)가 부여되어 있다.

 

0X1234 주소에 3이라는 값을 저장하라는 명령을 했을 경우
0X1234 주소의 4바이트 공간에 3을 저장하라는 명령을 했을 경우

 

4. 명령어 읽기

프로그램 실행 시 운영체제가 데이터를 렘에 불러온다.

프로그램은 하나만 실행되는 것이 아니고, 동시에 여러개 실행될 수 도 있다.

실제 RAM에는 여러가지 프로그램이 각각의 구역에 뒤엉켜있다.

 

5. 가상 메모리 VS 물리 메모리

CPU에서 원하는 위치에 데이터를 쓰거나 가져오기 위해서는 메모리의 주소값을 전달해야하는데, RAM에서 여러가지 프로그램을 사용하고 있을 경우, 지정한 공간을 사용할 수 있다고 보장해줄 수 없다.

따라서, CPU에서는 메모리를 효율적으로 관리하기 위해 특별한 메커니즘을 제공하는데, 이것이 가상 메모리와 물리 메모리다.

가상 메모리 : CPU가 참조하는 메모리 주소 값

물리 메모리 : 실제 메모리의 주소값

CPU가 보는 메모리는 사실 가상 메모리고, 실제로는 일정한 크기의 조각들로 쪼개어져서 메모리의 각기 다른 영역에 대응되어 있다.

변환이 되는 최소의 메모리 단위 = 페이지( page )

어떻게 변환을 수행할지 기록한 테이블을 페이지 테이블( Page Table )이라고 하고, 이러한 변환 방식을 페이징( Paging )이라고 한다.

블로그의 정보

에디의 우당탕탕 코딩 공장

인턴 에디

활동하기