기독교엔 성경이 있고
문학엔 돈키호테가 있으며
서양철학엔 국가가 있다
그리고…
컴퓨터 공학엔
⌜cs:app.⌟
Computer Systems: A Programmer's Perspective
라는…
상당히 웅장한 이름을 가진
컴퓨터 공학의 바이블이라 칭할만한 책이 있다
번역이 좀 아쉬운게 흠이다만…
원문을 읽으면 알수 있듯이
내용자체는
컴공의 바이블이라 불릴 정도의
방대하고 기술적인 내용이 들어있다
그리고 난 이 책이 이해가 안되기에
적당히 정리해가며 기록을 남기려 한다
1단원 ㅈ밥이라 안남겼다
그건 알아서 읽어라 ㅇㅇ
보통 컴퓨터는 메모리에 비트로 직접 접근 하지 않는다
그야 비효율적이니까
그 대신 8비트(1바이트)로 묶어 사용한다
우유 30개씩 반에 배달하지
하나씩 배달하진 않는 것처럼
아무튼, 메모리의 각 바이트는 고유 주소로 식별되며, 이 주소들을 일컫어 가상 주소 공간 (virtual address spcae)라 부른다
이는 개념적 이미지고
실제 구현은 하드웨어와 소프트웨어들에 의해 하나의 거대배열로 보이게 한다
프로그램 객체들을 관리하는데에는
여러 메커니즘이 두루 사용되고
이는 전부 가상 주소 공간 내에서 이루어진다
책에서는 그에 대한 예시로
C언어에서 포인터의 값이라는 것을 활용해
바이트의 가상 주소를 알 수 있고
접근하는 기계어 코드도 그에 따라 다르게 생성 가능 하다고 한다
그치만
실제 생성된 기계어 프로그램에는
데이터 타입에 대한 정보 없이
각 프로그램 객체를 단순한 바이트들의 블록으로 취급한다
프로그램 자체도 바이트들의 연속으로 간주하며 말이다
우리가 각 데이터들을 고급언어(C, Python 등)로 볼때에
타입과 구조에 따라 분리하는 방면
컴퓨터에서는 단순히 바이트 배열이라는 걸 말한다
간단히 말해 고급 언어에서의 의미와
실제 기계 동작 간에는
추상화와 해석의 차이가 있다… 라는 거다
벌써 쉽지 않다…
요약 : 메모리는 8비트로 묶이고 가상 주소 공간에 고유 주소가 있다
그치만 실제 컴퓨터에선 이거 없고 우리가 코딩하기 편하라 부여한 개념이다
하나의 바이트는 8비트로 구성된다
그리고 이는 이진수와 10진수로는 표현하기
불편하다
그렇기에 16진수를 사용한다!
16진수의 장점 중 하나는 이진수 변환이 간단하다는 거다
16진수 하나당 정확히 4비트로 갈라지니 말이다
그렇기에 관련된 표도 하나 첨가한다
읽으라고 넣은 건 아니고 전문적으로 보이려고 넣었다
| Hex digit | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| ——— | —- | —- | —- | —- | —- | —- | —- | —- |
| Decimal | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| Binary | 0000 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 |
Hex digit | 8 | 9 | A | B | C | D | E | F |
---|---|---|---|---|---|---|---|---|
Decimal | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
Binary | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
외워두면 좋다는데…
당연히 좋겠지 ㅅㅂ라고 하지 말고
가능하면 외워보자
이진수 변환 예시 :
16진수: 1 7 3 A 4 C
이진수: 0001 0111 0011 1010 0100 1100
그리고 16진수 10진수 변환법과 예시
x를 16으로 계속 나눠서, 몫 q와 나머지 r를 구한다
x = q × 16 + r
가 되며, r은 가장 덜 중요한 자리(least significant digit)에 해당한다.
이 과정을 q가 0이 될 때까지 반복하면 전체 16진수를 얻을 수 있다.
예를 들어, 10진수 314,156을 16진수로 바꾸면:
314,156 ÷ 16 = 19,634 ... 나머지 12 (C)
19,634 ÷ 16 = 1,227 ... 나머지 2 (2)
1,227 ÷ 16 = 76 ... 나머지 11 (B)
76 ÷ 16 = 4 ... 나머지 12 (C)
4 ÷ 16 = 0 ... 나머지 4 (4)
16진수 표현은 0x4CB2C
(위에서 아래로 읽어야 함)
반대로 16진수를 10진수로 변환
0x7AF의 10진수 값:
7 × 16² + 10 × 16¹ + 15 × 16⁰
= 7 × 256 + 10 × 16 + 15
= 1,792 + 160 + 15
= 1,967
요약 :
컴퓨터에선 16진수를 선호한다
2진수 변환도 쉽고 8비트에 어울린다