머리말
글을 쓰게 된 이유
- 슬랙에서 32비트에 관련된 질문이 올라와서 이에 대한 답변을 정리하면서 블로그를 올리게 되었다.
질문과 답변
질문
표현의 단위와 용량이 헷갈리고 잘 이해가 안갑니다. 32bit 는 4byte인데, 32bit 레지스터는 2^32로 42억개의 주소를 가질 수 있습니다. 그런데 4byte는 영문 4글자정도 표현이 고작인데 42억개의 주소를 가질 수 있는 용량인 게 무엇인가요?
나의 답변
CPU와 메모리의 구조
- 이건 컴퓨터 구조에 대해 좀 알아야 이해할 수 있을 것 같습니다. CPU와 메모리의 구조가 어떻게 작동하는지를 봐야할 것 같아요.
- 한번 그림을 그려봤는데 우선 32비트 아키텍처는, CPU의 레지스터가 처리하는 "주소값의 길이"가 32비트여서 $2^{32}$가지로 표현이 가능합니다. 전구가 32개로 일렬로 나열되어 있어서 꺼짐/켜짐으로 표현할 수 있는 경우의 수라 생각하시면 됩니다.
- 이진법 32자리는 너무 길어서 편의상 4자리씩 묶어 8자리의 십육진법으로 표현하면 0x00000000 ~ 0xffffffff까지의 메모리 주소를 표현할 수 있죠. (맨앞의 0x는 이 수가 십육진법이라는 뜻입니다.)
- 그렇다면 메모리(RAM)에서 그 주솟값 하나하나에 1byte의 데이터를 표현할 수 있기에, $32bit * 1byte = 2^2 * 2^{10 + 10 + 10} * 1 byte = 4GB$의 메모리를 가질 수 있습니다.
- 따라서 약 42억 개의 주소를 가질 수 있으면서, 4GB에 해당하는 메모리를 가질 수 있습니다
실제 예시(C언어)
- 이제 실제 예시를 들어볼게요.C언어에서 정수 a에 10을 저장했다고 하고, 이를 접근한다고 가정할게요. (C언어에서 int는 4byte입니다)
int a = 10;
- 그렇다면 레지스터가 임의의 주솟값 0x00012fae의 데이터에 접근하고자 하면 메모리(이후 RAM)의 주솟값 0x00012fae에 있는 주소로 찾아갑니다.
- (정확히는 int가 4byte라 1byte로 한번에 표현이 안되기에 시작 주소입니다.)
- 그러면 0x00012fae ~ 0x00012fb2까지 십진수 10에 해당하는 4byte의 정보가 0x0000000a로 저장됩니다.
- 이를 4개씩 나누어 00, 00, 00, 0a 이렇게 저장됩니다.
꼬리말
정리와 복습의 중요성
- 어렴풋이 알고 있는 개념을 설명하기 위해 직접 그려 보고 정리하면서 더 명확하게 32비트 아키텍처를 알 수 있었다.
'CS 기초' 카테고리의 다른 글
[논리 회로] NOT과 OR, AND, XOR의 구현 (0) | 2023.03.31 |
---|
댓글