시프 복습 시-작!
정보를 비트로 나타내기
컴퓨터에서는 정보를 왜 이진수로 표현하는가?
-
전압의 높고 낮음을 이용하여 정보의 입력을 받는다.
- 바이트(Byte) = 8비트(Bit)
- 한 바이트가 표현할 수 있는 최대 십진수 값: 255
- 0~(28-1)까지 표현가능하다.
- 16진수로 표현하면 FF16, C에서는 0xFF16로 표현.
바이트 기반 메모리 주소표현
- 한 프로그램은 가상 메모리를 갖고, 가상 메모리로 표현된 주소를 갖고 연산을 수행한다.
- 따라서, 각각의 프로그램들은 메모리를 통째로 자신이 사용한다고 취급하지만, 사실은 그렇지 않다(페이징 등의 방식을 사용).
- 실행 중인 프로그램을 프로세스라고 한다.
- 시스템은 이러한 프로세스들에게 적절히 주소 공간을 제공한다.
- 각 프로세스는 다른 프로세스에 영향을 주어서는 안된다.
- 컴파일러와, 런타임 시스템이 그러한 메모리 할당을 제어한다.
Word
- Word size: 정수형 data 표현 시 사용되는 크기
- Machine마다 다를 수 있다.
- 32bit, 64bit라는 식으로 표현한다.
- 메모리의 주소도 한 word를 이용하여 표현된다.
- 32bit machine 이라면, 최대 메모리 주소는 232-1이고, 한 메모리 slot당 1B이므로 최대 메모리 크기는 232B = 4GB이다.
- 64bit machine 이라면, 최대 메모리 주소는 264-1이고, 한 메모리 slot당 1B이므로 최대 메모리 크기는 264B = 16EB(엑사바이트)이다.
워드 기반 메모리 주소표현
- 실제로 주소는 word size만큼 끊어서 사용한다.
데이터 크기
- 컴퓨터와 컴파일러는 다양한 데이터 형식을 지원한다.
- 경우에 따라 서로 다른 형식과 크기로서 표현한다.
Byte Ordering
- 주소가 작은 곳에서부터 바이트 데이터를 차례로 놓는다 --> Big Endian
- 주소가 큰 곳에서부터 바이트 데이터를 차례로 놓는다 --> Little Endian
- Example. 0x12345678일 때(오른쪽으로 갈 수록 주소값이 크기 증가)
- Big Endian: 12, 34, 56, 78
- Little Endian: 78, 56, 34, 12
C에서의 문자열 표현
- Character의 배열
- Endian 방식과는 무관하게 메모리 주소 낮은 곳에서부터 순서대로 들어가 있음(배열이기 때문에).
- ASCII를 따른다. 7bit. 1bit는 Parity Check를 위해 사용한다(아마도?).
코드의 기계어 표현
- 프로그램은 instruction의 집합체.
- 산술연산(Arithmetic Operation), 조건부 분기(Conditional Branch), 메모리 읽기/쓰기
- 이러한 instruction은 Byte로서 표현된다. 즉, 프로그램도 Byte Sequence이다.
- RISC: Reduced Instruction Set Computer. 각 instruction의 크기가 정해져 있다.
- Sun, MIPS등에서 사용
- CISC: Complex Instruction Set Computer. 각 instruction의 크기가 가변적이다.
- Intel 계열 CPU에서 사용
- RISC: Reduced Instruction Set Computer. 각 instruction의 크기가 정해져 있다.
- Machine 간에 instruction 통일이 되어 있지 않다.
비트 수준 연산
불 대수(Boolean Algebra)
- 몬지알지?
C에서의 비트 수준 연산
- 비트 간 OR, AND, XOR, NOT이 지원됨.
- 피연산자가 뭐가 되었건, 비트 벡터로 인식하여 비트수준의 연산을 수행한다.
C에서의 논리 연산
- OR, AND, NOT이 지원됨.
- 피연산자가 0이냐, 아니냐를 따져 논리값을 계산한다. 따라서 항상 0 아니면 1이 결과값
Shift 연산
- 비트 수준으로, 자리를 옮기는 연산
- 왼쪽으로 1회 Shift하면 그 값이 2배가 된다.
- 오른쪽 Shift시, 2가지 방식이 있다.
- Logical Shift: 앞 쪽을 0으로 채운다.
- Arithmetic shift: 앞 쪽을 제일 앞의 비트 값과 같도록 채운다.