Chase
Contents:
  1. Memory Access, Memory Load & store
2 May 2024

Memory Access, Memory Load & store

์ง€๋‚œ ํฌ์ŠคํŒ…์—์„œ โ€˜์ปดํ“จํ„ฐ ๋‚ด ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ญํ• ๊ณผ ์ข…๋ฅ˜โ€™๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ์˜ ๊ธฐ๋ณธ ๋™์ž‘์€ โ€˜I/O์™€ ์ธํ„ฐํŽ˜์ด์Šคํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ธฐ, ์“ฐ๊ธฐ, ๊ธฐํƒ€ ๋™์ž‘(operate๋ผ๊ณ  ์นญํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค..)โ€™์ž…๋‹ˆ๋‹ค.

โ€‹

โ€‹

0

โ€‹

Memory๋ฅผ ์–˜๊ธฐํ•˜๊ธฐ์ „์— ISA, ์–ด์…ˆ๋ธ”๋ฆฌ์–ด์— ๋Œ€ํ•ด ์งง๊ฒŒ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” Programming Language ์ค‘์— ๊ฐ€์žฅ Low level์ด์—์š”.

โ€œ๊ฐ’์„ ๋ถˆ๋Ÿฌ์™€โ€

โ€œ๊ฐ’์„ ์ €์žฅํ•ดโ€

โ€œ๊ฐ’๋ผ๋ฆฌ ๋”ํ•ดโ€

์ด๋Ÿฐ ๋‹จ์ˆœ ์—ฐ์‚ฐ๋“ค์ด ํ•ฉ์ณ์ ธ์„œ High Level Language์˜ command ํ•œ ์ค„์ด ๋‚˜์˜ค๋Š”๊ฑฐ์—์š”.

โ€‹

๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๋Š” Programming, script ์–ธ์–ด๋Š” High Level Language๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์€ Compiler ์ด์ „ ์Šคํ…๊นŒ์ง€๋งŒ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์ˆ˜์ •์„ ํ•˜๊ณ ,

Assembler, Linker, Loader๋Š” ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ง์ ‘ ์ž‘์„ฑ๊ณผ ์ˆ˜์ •์„ ํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค.(๊ทนํ•œ์˜ ์ตœ์ ํ™”, ๋””๋ฒ„๊น… ํ•„์š”์‹œ ๋ณด๊ธด ํ•จ.)

์•„, ๊ทธ๋ฆฌ๊ณ  ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋Š” ํ”„๋กœ์„ธ์„œ ์ œ์กฐ์‚ฌ๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , RISC๋ƒ CISC๋ƒ์—๋”ฐ๋ผ ๊ตฌ์กฐ๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

โ€‹

RISC๊ฐ€ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์— ์œ ๋ฆฌํ•œ Pipeline์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฆ˜ ๋Œ€์„ธ์š”. ๊ทธ๋ž˜์„œ ์ด ๊ธ€๋„ RISC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

โ€‹

โ€‹

1

2

์ฐธ๊ณ ๋กœ Compiler๋Š” ๋ณดํ†ต โ€˜Debug mode, Release modeโ€™๊ฐ€ ์žˆ์–ด์š”.

Debug mode๋Š” code ์ž์ฒด์—์„œ ๊ทธ๋Œ€๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ณ€ํ™˜์„ ํ•˜๋Š” ๋ฐ˜๋ฉด, release mode๋Š” ์ฝ”๋“œ ์ตœ์ ํ™”๋ฅผ ๊ฑฐ์นœ ํ›„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ณ€ํ™˜์„ ํ•ฉ๋‹ˆ๋‹ค.

โ€‹

โ€‹

Memory์— Loadํ•˜๊ณ  Storeํ•˜๋Š” ๊ธฐ๋ณธ ๋‹จ์œ„๋Š” Bit (1๊ณผ 0), Byte๋Š” (8bit), word๋Š” ์ œ์กฐ์‚ฌ๋งˆ๋‹ค ๊ธฐ์ค€์ด ์ข€ ๋‹ค๋ฅด์ง€๋งŒ bit๋‚˜ byte์˜ ๋ฌถ์Œ์ด๊ณ ,

์ด ๋‹จ์œ„๋Œ€๋กœ Load & Storeํ•˜๋„๋ก ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

3

0, 1, 2, 3, 4, 5, 6, 7โ€ฆ ๊ฐ’์„ โ€˜์™ผ์ชฝ๋ถ€ํ„ฐ ์ €์žฅ(Big-endian)ํ•˜๋Š”์ง€ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ(Little-endian)๋ถ€ํ„ฐ ์ €์žฅํ•˜๋Š”์ง€โ€™๋„ ์ œ์กฐ์‚ฌ๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , ํ†ต์‹ ๋ฐฉ๋ฒ•๋งˆ๋‹ค ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (๋‹ค ์žฅ๋‹จ์ ์ด ์žˆ๋Š”๋ฐ, ์ €ํ•œํ…Œ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๋‚ด์šฉ์ด๋ผ ๊ธฐ์–ต์ด ์•ˆ๋‚˜๋„ค์š”โ€ฆใ…Žใ…Ž)

๊ทธ๋ž˜์„œ ์†Œ์ผ“ํ†ต์‹ ์„ ํ•˜๊ฑฐ๋‚˜, ์ž„๋ฒ ๋””๋“œ ์‹œ์Šคํ…œ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ์–ด๋–ค ์ˆœ์„œ๋กœ Load/Storeํ•˜๋Š”์ง€ ์•Œ์•„๋‘ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โ€‹

โ€‹

4

์•„๋ž˜ C์–ธ์–ด ์ฝ”๋“œ๋กœ ์ž์‹ ์˜ endian ํ‘œ๊ธฐ ๋ฐฉ์‹์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๊ฐ€ โ€˜78563412โ€™๋กœ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค๋ฉด ๋ฆฌํ‹€ ์—”๋””์•ˆ

๊ฒฐ๊ณผ๊ฐ€ โ€˜12345678โ€™๋กœ ์ถœ๋ ฅ๋˜์—ˆ๋‹ค๋ฉด ๋น… ์—”๋””์•ˆ

โ€‹

int i;

int test = 0x12345678;

char* ptr = (char*)&test; // 1 ๋ฐ”์ดํŠธ๋งŒ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ƒ์„ฑํ•จ.

for (i = 0; i < sizeof(int); i++)

{

printf(โ€œ%xโ€, ptr[i]); // 1 ๋ฐ”์ดํŠธ์”ฉ ์ˆœ์„œ๋Œ€๋กœ ๊ทธ ๊ฐ’์„ ์ถœ๋ ฅํ•จ.

}

โ€‹

โ€‹

โ€‹

์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ+๋™์ž‘๋ฐฉ์‹์ด ๋Œ€๊ฐ• ๋‹ค ์„ค๋ช…๋˜์–ด์žˆ์œผ๋‹ˆ ์ž์„ธํžˆ ์ฝ์–ด๋ณด์„ธ์š”!

โ€‹

5

โ€‹

โ€‹

โ€‹

6

โ€‹

โ€‹

Processor๊ฐ€ Memory์—์„œ ์–ด๋–ค Address์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ฌ์ง€ ๋ฐฉ๋ฒ•์„ โ€˜Memory Accessโ€™๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

Memory Access๋Š” Direct์™€ Indirect ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์š”.

โ€‹

์ฒ ์ˆ˜๊ฐ€ ๊ฐ€์ง„ ๊ฐ’์„ Load ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ,

Direct : ์ฒ ์ˆ˜์˜ ์ขŒํ‘œ์— ๊ฐ€์„œ ๊ฐ’ Load

Indirect : ์ฒ ์ˆ˜์˜ ์œ„์น˜๋ฅผ ๊ฐ–๊ณ ์žˆ๋Š” ์˜ํฌ์—๊ฒŒ ์ ‘๊ทผ

โ€‹

7

โ€‹

โ€‹

โ€‹

์กธ๋ ค์„œ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์ ์Šต๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•˜์‹  ๊ฒƒ ์žˆ์œผ๋ฉด ๋Œ“๊ธ€ ๋‹ฌ์•„์ฃผ์„ธ์š”.

ํ•ด์‹œํƒœ๊ทธ :