헷갈렸던 내용을 복기하며 기록하는 포스팅이라 자세하지 않을 수 있습니다.
인풋과 아웃풋이란?
메인 메모리와 IO 장치에 들어 있는 메모리 사이에 데이터를 복사해 오는 작업을 말한다.
2의 보수
2의 보수 표현법은 아래와 같은 절차를 따른다.
- 모든 비트에
NOT
연산을 취한다. (0001 비트가 1110이 된다.) - 1을 추가한다. (0001 -> 1110 -> 1111)
즉 위와 같은 절차를 따르면 10진수 -1의 2진수 표현법은 1111이 된다.
2의 보수 체계는 1의 보수 체계나 다른 음수 표현법과 달리 0을 표현하는 방법이 하나라는 장점이 있다.
IEEE 부동소수점 표현법
S
: 부호exponent
: 지수fraction
: 가수
32비트와 64비트 체제에서 부호는 공통적으로 1bit, 지수부는 8bit / 11bit, 가수부는 23bit / 52bit를 가진다.
왜 번거롭게 이런식으로 저장하나 싶겠지만 큰 범위의 값을 표현하기 위해서 필요하다. 고정 소수점 방식에서는 정수부와 소수부로 나누어 각각 고정된 공간을 차지해 낭비가 심하지만, 부동 소수점 방식에서는 가수부 내에서 전체 실수를 표현하기 때문에 공간 낭비가 적다.
한 실수를 예로 부동 소수점을 변환해보자.
-0.75
- 음수이므로
S
는 1 - 전 포스팅에서 말한 이진수로 변환하는 과정을 거치면 아래 사진과 같이 나타난다.
- 왼쪽으로 밀어 1.1 x 2^-1이 되도록 한다.
- fraction은
100000..00
, 지수는 -1이므로bias (127)
을 더해126
을 만들고, 이를 이진수로 표현하면01111110
이다. - 그러므로
1011111101000...00
가 된다.
bias를 쓰는 이유는 지수가 음수가 될 수도 있는 케이스가 있기 때문이다. 이를 활용해 지수가 127보다 작으면 음수, 크면 양수라고 판정할 수도 있다.
32비트 운영체제에서 최대 메모리 크기가 4GB인 이유?
항상 의문이었다. 개발자 지망생인데 이런 것도 맨날 헷갈려서야 안되겠지만, 비트와 바이트가 너무 헷갈린다.
어찌되었건 의문은, 32비트 CPU에서 주소 레지스터의 크기가 32bit니, 표현할 수 있는 메모리 범위는 2^32개다. 그래서 2^32, 4,294,967,296개의 주소 공간을 쓸 수 있다.
여기까지 알겠는데 갑자기 그래서 4GB라는게 이해가 안되서.. 나랑 같은 고민을 하고 계신 분이 있길래 참고했다. 나의 의식의 흐름도 이러했다.
- 32비트? 2의 32승은 4,294,967,296. 그래 알겠다.
- 그러면 4,294,967,296bit는 536,870,912byte다.
- 이는 524,288kb다.
- 이는 대충 512MB다..?
???? 뇌정지가 심하게 왔었다. 하지만 실상은 간단했다.
나는 메모리 주소값을 가지고 있는 각 칸을 멋대로 1비트로 정의했었다.
하지만 주소 한 칸의 크기가 1byte이므로 4,294,967,296byte로 생각해야 한다.
중요하게 리마인드해야 할 것은 주소 1개의 크기는 1byte라는 점이다.
참고 문헌
☕ 실수 표현(부동 소수점) 원리 한눈에 이해하기 (tistory.com)
'◎ CS > 컴퓨터구조' 카테고리의 다른 글
[CS] 캐시 메모리의 총정리 (Direct Mapping Cache를 중점으로) (0) | 2024.04.15 |
---|---|
1. 비트, 논리 연산, 비트 표현 (2) | 2024.03.11 |
자기계발 블로그