4T2F / ThinkBig

🌟씽크빅 스터디🌟
5 stars 1 forks source link

컴퓨터 구조와 관련하여 CPU, RAM, 저장장치의 역할과 상호 작용에 대해 설명해주세요. #35

Open bdrsky2010 opened 8 months ago

bdrsky2010 commented 8 months ago
bdrsky2010 commented 7 months ago

컴퓨터 구조와 관련하여 CPU, RAM, 저장장치의 역할과 상호 작용에 대해 설명해주세요.

📖 폰 노이만 컴퓨터 구조

오늘 날의 컴퓨터는 모두 폰 노이만 컴퓨터 구조를 따르고있습니다. 폰 노이만 구조는 중앙처리장치(CPU), 메모리, 프로그램 세 가지 주요 요소로 구성됩니다. CPU와 메모리는 하드웨어 상으로 서로 분리되어 있으며 버스를 통해 데이터와 명령어를 주고받습니다. 이러한 구조에서 CPU는 메모리에 저장된 명령어를 가져와(fetch) 명령어를 해석(decode)하고, 실행(execute)하며 결과를 저장(store)합니다. 또한 폰 노이만 구조는 명령어를 순차적으로 처리하기 때문에 명령어가 한 번에 하나씩 실행됩니다.

📖 컴퓨터 하드웨어의 구성

컴퓨터는 중앙처리장치(CPU), 주기억장치(RAM), 입출력장치, 보조기억장치(저장장치)로 구성이 됩니다. 주기억장치는 전력이 끊기면 데이터를 잃어버리는 휘발성이기 때문에 데이터를 영구적으로 보관하려면 보조기억장치(저장장치)에 저장을 해야합니다.

📖 메모리(주기억장치)

image

컴퓨터가 이해하는 정보는 명령어와 데이터입니다. 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 하드웨어입니다. 즉, 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 합니다.

이때 컴퓨터가 빠르게 작동하기 위해서는 메모리 속 명령어와 데이터의 위치는 잘 정돈되어 있어야 합니다. 그래서 메모리에는 저장된 값에 빠르고 효율적으로 접근하기 위해 주소(address)라는 개념이 사용됩니다. 현실에서도 우리가 주소를 확인하고 원하는 위치로 이동할 수 있듯이 컴퓨터에서도 주소로 메모리 내 원하는 위치에 접근할 수 있습니다.

다음 그림은 숫자 3과 4를 더하는 과정에서 메모리 내부의 상태를 표현한 예시입니다. 물론 실제로는 메모리에 이와 같이 저장되지는 않습니다. image 메모리에 대해 요약을 하자면

  1. 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 한다.
  2. 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.
  3. 메모리에 저장된 값의 위치는 주소로 알 수 있다.

📖 CPU

CPU는 컴퓨터에서 두뇌의 역할을 합니다. CPU는 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석 및 실행하는 하드웨어입니다.

image

📁 1. CPU(중앙 처리 장치)의 구성

1) CPU

📁 3. 연산장치

산술 논리 장치라고도 하며, 연산에 필요한 자료를 받아서 실제로 산술 연산 및 논리 연산을 수행하는 장치

배타적 논리합은 수리 논리학에서 주어진 2개의 명제 가운데 1개만 참일 경우를 판단하는 논리연산으로 약칭으로 XOR, EOR, EXOR라고도 쓴다.

📖 저장장치(보조기억장치)

CPU(중앙처리장치)에서 실행할 프로그램이나 데이터를 영구적으로 저장할 수 있는 장치입니다. 메모리(주기억장치)에 비해 속도는 느리지만 용량이 크고 비용이 저렴합니다. 하드 디스크, SSD, USB 등과 같은 저장 장치가 보조기억장치의 일종이며, 컴퓨터 전원이 꺼져도 컴퓨터에 파일이 남아있는 이유는 파일을 보조기억장치에 저장했기 때문입니다.

📖 CPU, RAM, 저장장치의 상호 작용

image image

bdrsky2010 commented 7 months ago

📖 캐시 메모리의 개념과 종류, 역할에 대해 설명해주세요.

캐리 메모리는 속도가 빠른 장치와 느린 장치 사이에서 속도 차이에 따른 병목 현상을 줄이기 위한 범용 메모리입니다.

image

대표적으로 속도가 빠른 CPU 코어와 속도가 느린 메모리 사이에서 속도 차이에 따른 병목 현상을 완화하는 역할을 합니다. CPU는 메모리에 저장된 데이터를 읽어오는데, 자주 사용하는 데이터를 캐리 메모리에 저장하면 그 데이터를 다시 사용할 때는 메모리가 아닌 캐리 메모리에서 읽어올 수 있어 빠르다.

네트워크에서 캐시는 로컬에 파일을 미리 받아놓고, 그 내용을 보거나 웹서버에서도 매번 로딩해야 하는 파일들을 미리 로딩해두고 응답을 주기도 한다. 데이터 베이스를 매번 확인해야 하는 경우에도 캐리 서버를 이용한다면 빠른 응답을 받을 수 있습니다.

📁 캐시 메모리 Level

CPU에는 이러한 캐시 메모리가 2 ~ 3개 정도가 사용됩니다. 이를 L1, L2, L3 캐리 메모리라 하며, 여기서 L은 'Level'을 의미합니다. 이는 속도와 크기에 따라 분류한 것으로 L1 캐시는 일반적으로 CPU 칩 안에 내장되어 데이터 사용 및 참조에 가장 먼저 사용됩니다. L1 캐시는 보통 8 ~ 64KB 정도의 용량으로 CPU가 가장 빠르게 접근하게 되며, 여기서 데이터를 찾지 못하면, 이제 L2 캐시 메모리로 넘어갑니다.

image

L2 캐시 메모리의 용도와 역할은 L1 캐시와 비슷하지만 속도는 그보다 느립니다. 일반적으로 64KB~4MB 정도가 사용됩니다. CPU 제품마다 약간은 다르겠지만, 일반적으로 L2 캐시는 CPU 회로에 별도의 칩으로 내장됩니다.

L3 캐시 메모리도 동일한 원리로 작동합니다. 요즘 웬만한 프로세서에는 L2 캐시 메모리로 충분히 커버할 수 있기 때문에 L3 캐시 메모리를 달고 있지 않습니다. 예를 들어, 인텔 코어 듀오나 쿼드에는 L3 캐시 메모리가 없지만 코어 i7에는 8MB가 장착돼있습니다. 물론 없는 것보다 성능이 좋겠지만, L1/L2 캐시 메모리 정도만 CPU 성능에 직접적인 영향을 미치기 때문에 L3 캐리메모리는 크게 신경 쓰지 않는 것이 추세이며, 참고로 이 L3 캐시 메모리는 CPU가 아닌 메인보드에 내장되는 경우가 많습니다.

📁 캐시 메모리의 성능

CPU가 필요한 데이터가 캐리 메모리 내에 존재하는 경우 'Cache Hit'라 하며 접근하고자 하는 데이터가 없을 경우 'Cache Miss'라고 합니다. 이러한 원하는 데이터가 있을 수도 있고 없을 수도 있는데, 이 때 원하는 데이터가 캐리 메모리에 존재할 확률을 'Hit Ratio'라고 합니다

  • 적중(Cache Hit): CPU가 주기억장치 메모리에 접근하기 전에 캐시 메모리에서 원하는 데이터를 찾은 경우
    • 적중률(Hit Ratio) = Cache Hit 횟수 / 전체 메모리 참조 횟수 * 100
  • 부적중(Cache Miss): CPU가 요청한 데이터가 캐시 메모리에 없어 주기억장치에서 데이터를 찾은 경우
    • 부적중률(Miss Ratio) = 1 - 적중률(Hit Ratio)
    • Miss Penalty: Miss가 발생하여 주기억장치에서 데이터를 가져오는 시간
    • Cold Miss: 해당 메모리 주소를 처음 불러서 발생한 Miss
    • Conflict Miss: 캐시 메모리에 A와 B 데이터를 저장해야하는, A와 B가 같은 캐시 메모리 주소에 할당되어 있어서 발생한 Miss
    • Capacity Miss: 캐시 메모리의 공간이 부족해서 발생한 Miss

CPU에서 필요로 하는 데이터가 캐리 메모리에 있어서 참고할 수 있을 확률이 높을 수록 캐리 메모리의 성능이 높아집니다.

📁 캐시 메모리의 지역성(Localty Of Reference)

CPU에서 명령어를 수행하며 캐시 메모리를 참조하게 되는데, 이 때 적중률(Hit Ratio)이 지역성을 갖습니다. 지역성 이라는 것은 프로세스들이 기억장치 내의 정보를 균일하게 접근하는 것이 아니라 어느 순간에 특정부분을 집중적으로 참조하는 것을 말합니다. 지역성은 메모리의 위치와 접근 시간에 따라 공간적, 시간적인 특성을 보입니다.

시간적 지역성(temporal locality of reference)

특정 데이터가 한 번 접근되었을 경우, 가까운 미래에 다시 한 번 데이터에 접근할 가능성이 높은 것을 시간적 지역성이라고 합니다. 메모리 내의 같은 주소에 여러 차례 읽기, 쓰기를 수행할 경우 상대적으로 작은 크기의 캐시를 사용해도 효율성을 좋게 할 수 있습니다.

공간적 지역성(spatial locality of reference)

한 번 참조한 메모리의 가까운 메모리를 다시 참조하게 되는 성질을 말합니다. CPU 캐시 혹은 디스크 캐시의 경우 한 메모리 주소에 접근할 때 그 주소뿐 아니라 해당 블록을 전부 캐시에 가져오게 됩니다. 이 때 메모리 주소를 오름차순이나 내림차순으로 접근한다면, 캐시에 이미 저장된 같은 블록의 데이터를 접근하게 되므로 캐리의 효율성이 크게 향상됩니다.

순차적 지역성

데이터가 기억장치에 저장된 순서대로 인출되고 실행될 가능성이 높은 현상을 말합니다.

Hsungjin commented 7 months ago

메모리 관련 추가 질문사항 입니다. 메모리에는 물리적 메모리와 가상 메모리 이렇게 두가지 개념이 있는걸로 알고있는데 혹시 이에 대해 자세히 설명해주실수 있나요?

ha-nabi commented 7 months ago

캐시 메모리의 각각의 레벨(L1, L2, L3) 이 CPU 성능에 어떻게 영향을 미치는지 궁금합니다

withseon commented 7 months ago

주기억장치(메모리)의 할당 또한 중요하다고 생각되는데, 주기억장치의 할당 방법에는 무엇이 있을지 궁금합니다.

JooYoungNoh commented 7 months ago

iOS에서 코드 짤 때 어떤 경우에 캐시 메모리를 사용하나요?

bdrsky2010 commented 7 months ago

메모리 관련 추가 질문사항 입니다. 메모리에는 물리적 메모리와 가상 메모리 이렇게 두가지 개념이 있는걸로 알고있는데 혹시 이에 대해 자세히 설명해주실수 있나요?

물리적 메모리는 말 그대로 주기억 장치의 메모리를 말하고, 가상 메모리는 상대적으로 적은 용량의 주기억 장치를 보완하기 위해 보조기억장치의 일부분을 가상의 메모리로서 사용을 하는 것을 말합니다.

운영체제 내에서 프로그램을 주기억장치에 올리는 과정에서 필요한 만큼의 일부분만 물리적 메모리에 올리고 나머지 부분은 가상 메모리라는 이름으로 보조기억장치(예: HDD, SSD 등)에 올리게 됩니다.

사용자가 프로그램을 실행하여 CPU에서 요구 페이징이 들어와 보조기억장치에서는 일부분은 주기억장치에, 일부분은 보조기억장치의 가상 메모리에 프로세스의 데이터가 올라가게 됩니다. CPU에서 원하는 데이터가 물리 메모리에 없는 경우 페이지 부재라는 인터럽트가 발생하게 되는데 운영체제 내에서 인터럽트 핸들링으로 가상 메모리에서 데이터를 가져오게 됩니다. 이 페이지 부재라는 인터럽트가 자주 발생하게되면 운영체제의 성능이 저하될 수 있어 현재 우리가 사용하는 운영체제에는 성능의 저하가 크게 일어나지 않도록 다양한 페이지 교체 알고리즘이 존재하며 페이지 교체 알고리즘까지 설명하기엔 너무 길어져 참고 정도로만 읽어주시면 감사하겠습니다.

bdrsky2010 commented 7 months ago

캐시 메모리의 각각의 레벨(L1, L2, L3) 이 CPU 성능에 어떻게 영향을 미치는지 궁금합니다

각각의 레벨의 숫자는 올라갈 수록 속도는 느려지며 데이터를 적재할 수 있는 용량은 커집니다.

다만, L3 캐시 메모리의 경우 여러 코어가 공유해서 사용하는 캐시 메모리로서 멀티 코어를 가진 프로세서를 사용하는 경우에는 L2 캐시 메모리에 비교해도 큰 성능차이가 나진 않습니다.

성능에 대한 영향의 경우,

L1 캐시 메모리에서 데이터를 찾지 못하게되면 L2 캐시 메모리에서 데이터를 찾게되고 L2 캐시 메모리에서 데이터를 찾기 못하게되면 L3 캐시 메모리에서 데이터를 찾게됩니다.

데이터를 찾지 못할수록 CPU에서 데이터를 처리하는 속도가 늦어지기 때문에

연산 처리속도에 대한 CPU의 성능저하가 일어날 수 있습니다.

bdrsky2010 commented 7 months ago

주기억장치(메모리)의 할당 또한 중요하다고 생각되는데, 주기억장치의 할당 방법에는 무엇이 있을지 궁금합니다.

저는 하드웨어를 설명했는데 왜이리 소프트웨어적인 질문들이 마구 들어오는 지 잘 모르겠지만 설명해보겠습니다.

메모리에 할당 방식은 크게 연속 할당, 불연속 할당 크게 두 가지로 나뉘며 세부적으로 여러 할당 방식이 존재합니다.

연속 할당

고정분할

고정분할방식은 메모리를 고정된 크기만큼 나눠 프로세스를 적재하는 방식으로 동시에 메모리에 올릴 수 있는 프로세스의 수가 고정되어 있어 융통성이 떨어집니다.

또한 고정분할방식에는 외부 단편화와 내부 단편화가 발생할 수 있습니다. 외부 단편화: 고정크기로 정해진 메모리 안에서 할당되고 남는 메모리 내부 단편화: 프로세스 사이사이에 존재하는 남는 메모리

가변분할

가변분할방식은 메모리에 적재되는 프로세스의 크기에 따라 메모리를 동적으로 나눕니다. 프로세스가 할당되고 해제되고 하는 과정에서 남는 메모리가 생겨 내부 단편화가 일어날 수 있습니다.

이러한 내부 단편화가 일어날 경우 효율을 높이기 위해 메모리에 프로세스를 할당해주는 방법이 크게 3가지가 존재합니다.

불연속 할당

불연속 할당 방식은 프로세스를 메모리의 여러 공간에 분산되게 할당하는 방식으로 보통 페이지 단위로 메모리에 할당 및 해제가 이뤄집니다.

대표적인 방법으로는 페이징, 세그먼테이션, 페이지 세그먼테이션이 존재합니다.

페이징

페이징 기법은 가상 메모리를 동일한 사이즈의 페이지 단위로 나눠서 페이지 단위로 불연속하게 프로세스를 할당합니다. 프로세스가 나뉜 페이지에 맞게 떨어지지 않을 수 있어 내부 단편화가 일어날 수 있습니다. 페이지 정보는 페이지 테이블에 존재하고 논리 메모리에 저장된 페이지가 어느 위치에 존재하는 지 테이블을 통해 알 수 있습니다.

세그먼테이션

페이지 세그먼테이션

양이 너무 많아 나중에 다시 제대로 올리겠습니다.

bdrsky2010 commented 7 months ago

iOS에서 코드 짤 때 어떤 경우에 캐시 메모리를 사용하나요?

너무 다양합니다. 캐시 메모리 자체는 자주 접근 하는 데이터를 캐시 라는 메모리에 저장해두고 빠르게 접근하기 위한 방식이기 때문에 저희가 자주 사용하는 캐싱은 앱 내 데이터베이스 캐싱 혹은 이미지 캐싱 정도가 자주 사용되는 것 같습니다.