티스토리 뷰
본 포스팅은 "프로그래머가 몰랐던 멀티코어 CPU 이야기" 를 읽고 주인장의 생각을 정리한 게시글 입니다.
책정보, 프로그래머가 몰랐던 멀티코어 CPU 이야기 : 네이버 책 (naver.com)
1. 컴퓨터의 메모리
컴퓨터구조 혹은 운영체제에 대해서 배울때면 항상 빠짐없이 등장하는게 메모리에 대한 이야기입니다.
https://computerscience.chemeketa.edu/cs160Reader/_images/Memory-Hierarchy.jpg
뭐 위와같은 계층도는 다들 알고 있을 것이라고 생각합니다.
이때 C, Python등의 프로그래밍 언어에서는 변수의 주소를 얻을 수가 있습니다.
#include <stdio.h>
int main()
{
int temp;
printf("Memory Address : 0xc%x", &temp);
return 0;
}
/*
Memory Address : 0x9e47fec4
*/
하지만, 위와같은 주소는 실제 주소가 아니라 가상 주소입니다.
2. 가상메모리
32비트 운영체제는 하나의 프로그램(프로세스)가 0~32bit = 4294967296개의 메모리 주소를 가질 수 있는 운영체제입니다.
프로그램 하나가 최대 32bit = 2^32 = 4GB만큼의 메모리를 사용한 다고 할 수 있죠.
그럼 64비트 = 2^64 = ??? 너무 크네요. 여턴 매우 큽니다. 이런 크기의 물리메모리를 일반 사용자가 가지고 있는 경우는 없다고 볼 수 있습니다.
하지만 요즘 사용하는 컴퓨터는 대부분 핸드폰, 컴퓨터 할것 없이 모두 64bit 운영체제를 쓰고 있죠.
프로그램을 여러개 띄울 경우, N*64비트 크기의 메모리 사용할 수가 있기 때문에, 이 크기의 물리메모리를 준비되어야 할 것으로 생각이 됩니다.
이런 물리적인 한계를 극봅하기 위해 존재하는것이 가상메모리 입니다.
가상 메모리 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)
운영체제 상에서, Process들은 각자의 가상메모리를 가지고 있고, 이 가상메모리가 Process끼리 겹치지 않게 물리메모리와 Mapping되는 형태로 구성되어있습니다.
이렇게되면 이제 Process간 메모리가 겹쳐서 컴퓨터가 죽는 문제가 방지가 됩니다.
(이를 통해서 운영체제의 안정성이 향상되게 되죠)
2_1. 페이지(Page)
하지만 그래도 진짜 하나의 프로그램이 접근할 수 있는 주소의 범위는 여전히 0~2^64까지로 너무 넓습니다.
이를 효율적으로 사용하기 위해서 Memory를 4KB단위로 페이지로 나누고, 가상주소의 페이지와 물리주소의 페이지를 Mapping합니다.
그렇게되면, 물리주소는 2^64bit / 2^16 = 2^48bit의 페이지 주소를 관리하면 되기 때문에 상대적으로 그 양이 주는것을 알 수 있습니다.
그리고 이러한 페이지를 효율적으로 사용하기 위해서 CPU내에 Page Table을 관리하는 TLB(Translation Lockaside Buffer)라는 캐시를 통해서 가상메모리의 Page를 고속으로 물리메모리 Page로 변환시켜 데이터에 접근합니다.
2_2. Page In/Out
메모리 계층에서 볼 수 있듯, 메모리는 SSD보다 빠르지만 용량이 작습니다.
이때 가상메모리로 Mapping될 물리메모리가 부족할 경우 물리메모리에서 사용 빈도가 낮은 Data를 SSD와 같은 보조저장장치로 이동시킵니다.
Page단위로 메모리<->SSD간에 데이터의 이동이 발생하고, 이를 Page Out/In이라고 부릅니다.
(메모리 <-> SSD간 데이터가 이동하기 때문에, 메모리가 부족하면 속도저하가 발생하는 원인이 됩니다.)
Page Out/In이 발생하더라도 운영체제가 이 정보를 가상메모리에 Mapping해 주기 때문에, 프로그래머는 해당 데이터가 메모리에 있는지, SSD에 있는지 신경쓰지 않아도 되는 큰 장점이 됩니다.
번외. 최근 가상메모리
최근 갤럭시나 다른 기타 중국 스마트폰을 보면 RAM Plus와 같은 이름으로 물리메모리 외에 추가로 메모리를 확보한다!
라는 기능들이 있습니다. 이러한 기능들은 모두 가상메모리 기술은 기반으로 하고 있습니다.
8GB 램을 12GB처럼? 갤럭시 시리즈에 적용된 ‘램 플러스’ 기술 이모저모 (donga.com)
물리메모리가 부족할 경우 Page In/Out을 통해서 스마트폰의 리프레시를 방지하는 방법이라고 볼 수 있습니다.
사실 별거 없고, 백그라운드에서 돌던 앱이 물리메모리가 부족하면 앱이 자동으로 꺼져야 할 것을 페이지를 압축해서 In/Out 시키는 방법으로 구현된다고 합니다.
하지만 해당 기술이 도입되기 이전의 스마트폰에도 지원하는것을 보면, SOC/CPU에서 지원하는 별도의 하드웨어가 추가된 것이 아니라 기존의 가상메모리를 안드로이드 커널단에서 확장한 것으로 추정됩니다.
'컴퓨터과학 > CPU' 카테고리의 다른 글
명령어 파이프라인(1편) (0) | 2022.06.03 |
---|---|
CPU동작(BackEnd) (0) | 2022.06.02 |
CPU동작(FrontEnd) (0) | 2022.05.12 |
CPU의 성능 지표(CPI, IPC, Clock...) (0) | 2022.05.11 |
RISC과 CISC (0) | 2022.05.09 |
- Total
- Today
- Yesterday
- AVX
- 알고리즘
- hash
- Python
- git
- Search알고리즘
- 프로그래머스
- heap
- 이분탐색
- 코딩테스트
- prime number
- 분할정복
- Greedy알고리즘
- GDC
- 자료구조
- 완전탐색 알고리즘
- Sort알고리즘
- 동적계획법
- C++
- 컴퓨터그래픽스
- stack
- SIMD
- 병렬처리
- 사칙연산
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |