Memory model
Physical memory
- DRAM chips can read/write 4, 8, 16 bits
- DRAM modules can read/write 64 bits
Programmer's view of memory
• Conceptually very large array of bytes 굉장히 큰 공간을 연속적으로 할당받고 있다
• Stored-program computers: keeps program codes and data in memory
• Running programs share the physical memory
• OS handles memory allocation and mangement
word size
• Nominal size of integer-valued data
- Including addresses (= pointer size)
• Machines use 32 bits (4 bytes) words
- Limits addresses to 4GB
- Becoming too small for memory-intensive applications
32b 컴 -> 가상공간 2^32 -> 4GB
• Most current systems use 64 bits (8 bytes) words
- Potential address space ~ 1.8 X 1019 bytes (18 Exabyte)
- x86-64 machines support 48-bit addresses: 256 Terabytes <- Intel 64b CPU + OS 사용시
• Machines support multiple data formats
- Fractions or multiples of word size
- Always integral number of bytes
Data Representations
2^64 -> 8B 필요
1byte는 8bit.
1byte는 16진수 두 글자 들어감
Word-level Memory Access
Addresses specify byte locations / 메모리에는 전부 다 address가 있음
• Address of first byte in word
• Addresses of successive words differ by 4 (32-bit) or 8 (64-bit)
• Usually, addresses should be aligned to the word boundary
4B, 8B로 OS가 쉽게 관리하기 위해 워드 단위로 메모리 조각 관리
access는 1B 단위로도 ㄱㄴ
Byte Ordering
How should bytes within multi-byte word be ordered in memory?
• Big Endian
Least significant byte has highest address / 높은 address 쪽으로
MSB부터 차례대로 높은 쪽으로 저장된다고 생각하자
• Little Endian 반대로!!!
Least significant byte has lowest address
끝~0
LST부터 차례대로 높은 쪽으로 저장된다고 생각하자
//0D0C0B0A
• Problem when the binary data is communicated over a network between different machines
binary data를 주고받을 때 메모리 저장하는 방식이 달라서 맞춰주어야
Byte Ordering Example (2)
Disassembly
• binary machine code -> text
• Generated by program that reads the machine code
0x12ab 값이
pad to 32bits : 0x000012ab
split into bytes : 00 00 12 ab
메모리 저장에는 reverse : ab 12 00 00 // little endian 반대로
C -> 어셈블리어 -> 기계어
Byte Ordering Example (3)
What is the output of this program?
• Solaris/SPARC: big endian 12 34 56 78
• Linux/x86: little endian 78 56 34 12
#include <stdio.h>
union {
int i;
unsigned char c[4];
} u;
int main () {
u.i = 0x12345678;
printf ("%x %x %x %x\n", u.c[0], u.c[1], u.c[2], u.c[3]);
}
Representing Integers
int A = 15213; // 3B6D
빅엔 00 00 3B 6D
리엔 6D 3B 00 00
리엔 6D 3B 00 00 00 00 00 00
int B = -15213
빅엔 93 C4 FF FF
리엔 FF FF C4 93
Representing Pointers
Different compilers & machines assign different locations to objects
int *P = &B;
P 저장?
Representing Strings
Represented by array of characters • Each character encoded in ASCII format
- Standard 7-bit encoding of character set
- Character "0" has code 0x30
- Digit i has code 0x30+i
• String should be null-terminated
- Final character = 0x00 = '\0'
- Not '\n'
Compatibility
• Byte ordering not an issue
문자열을 한 바이트 한 바이트 들의 배열로 취급됨
각 바이트를 하나씩 연속해서 저장
한 바이트 내에서는 바이트 오더링 필요없음
따라서 똑같이 저장됨
string 형태로 주고받으면 됨
-str 문자열은 char 배열이기 때문에 바이트를 하나씩 연속해서 저장한다. 따라서 Endian 형식과 상관이 없다.
'전공 > 시스템프로그래밍' 카테고리의 다른 글
[04] Floating Point (0) | 2022.10.28 |
---|---|
[03-3] Integer(정수) / Representing and Manipulating Integers (0) | 2022.10.28 |
[08] ASM1 (0) | 2022.10.25 |
[07] Introduction to IA-32 (0) | 2022.10.09 |
[03-2] Integer(정수) / Representing and Manipulating Integers (0) | 2022.10.04 |