Search
๐Ÿ’ฟ

07 : Address Spaces

course
last review
2023/04/11
mastery
rookie
progress
not started
date
2023/03/23
4 more properties
Previous chapter

Early Systems

0๋ถ€ํ„ฐ ๋งฅ์Šค๊นŒ์ง€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.
๋‚ฎ์€๋ฒˆ์ง€์—๋Š” OS๋ฅผ ์˜ฌ๋ฆฌ๊ณ  ๊ทธ ์ดํ›„์—๋Š” ์‘์šฉ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.
โ€ข
์ด ๊ฒฝ์šฐ์—๋Š” ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ์ผ ๊ฒƒ์ด๋‹ค.
โ€ข
๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ๋ฆฌ๋Š” ํ™˜๊ฒฝ๊ณผ๋Š” ์ž˜ ๋งž์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค.
์ด์™€ ๊ฐ™์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค ๋Œ๋ฆฐ ์ดํ›„ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ๋ฆฌ๋Š” ๋ฐฉ์‹์„ batched job์ด๋ผ๊ณ  ํ•œ๋‹ค.

Multiprogramming and Time Sharing

์‹œ๊ฐ„์ด ํ๋ฅด๋ฉฐ IO๊ธฐ๋ฐ˜์˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ Early System์˜ ๊ตฌ์กฐ๋กœ์จ๋Š” CPU์˜ ํ™œ์šฉ๋„๊ฐ€ ๋‚ฎ์•„์ง€๋Š” ๋ฌธ์ œ์ ์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค.
๋˜ํ•œ ์„ฑ๋Šฅ ์ง€ํ‘œ๋“ค์˜ ๊ด€์ ์œผ๋กœ ๋ดค์„ ๋•Œ๋„ ๋‹ค์–‘ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์„ ์œ„ํ•ด ์ข‹์€ ์„ฑ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ์ง€ ๋ชปํ–ˆ๋‹ค.

Multiprogramming

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์„ ์ด์•ผ๊ธฐ ํ•œ๋‹ค.
์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ๋Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ์ •๋œ ์ž์›์„ ๋ถ„๋ฐฐํ•ด์ฃผ๊ธฐ ์œ„ํ•œ Time Sharing ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. (Round Robin ,CFS ๋“ฑ๋“ฑ)
โ€ข
๊ฐ ํ”„๋กœ์„ธ์Šค๋ณ„๋กœ ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์Šฌ๋กฏ์„ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ.
โ€ข
Context Switch๊ฐ€ ์ผ์–ด๋‚  ๋•Œ ์›๋ž˜ ์‹คํ–‰ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋‹ค์Œ ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ต์ฒดํ•˜๊ธฐ ์œ„ํ•œ Fast Accessible Memory ๊ณต๊ฐ„์„ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
Early Systems๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ Disk์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์šฉ์„ ์ €์žฅํ•ด์•ผ ํ•˜๋ฏ€๋กœ, Context Switch ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์งˆ ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
โ€ข
๋‹ค๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šฌ๋กฏ์ œ๋Š” ์š”์ฆ˜์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ถ”์„ธ
โ—ฆ
๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž‘๊ฒŒ ํ•œ์ •๋˜์–ด ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์„ฑ๋Šฅ์„ ์ตœ๋Œ€ํ•œ ๋‚ด๊ธฐ ํž˜๋“ค๋‹ค.
โ—ฆ
Protection Issue : ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•œ ๋‚ด์šฉ์ด ๋ฌผ๋ฆฌ๋ฉ”๋ชจ๋ฆฌ์— ๊ณต์กดํ•˜๋Š”๋ฐ, ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚ด์šฉ์— ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•ด์•ผํ•œ๋‹ค.

Address Spaces

์‘์šฉํ”„๋กœ๊ทธ๋žจ์€ ์–ด๋Š ๊ณณ์— ํ• ๋‹น๋˜์„œ ์‹คํ–‰๋ ์ง€ ๋ชจ๋ฅด๋”๋ผ๋„ ํ•ญ์ƒ ์ผ์ • ์–‘๋งŒํผ ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋จ์ด ๋ณด์žฅ๋˜๊ณ , ๊ทธ ์•ˆ์— ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์™€ ํž™, ์Šคํƒ์ด
๋‘ ๊ฐ€์ง€ Abstraction์„ ์ œ๊ณต
โ€ข
์–ด๋Š ์Šฌ๋กฏ์— ์žˆ๋˜ 0~64kb๊นŒ์ง€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” Transparency
โ€ข
๊ทธ ์™ธ์˜ ๊ณต๊ฐ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” Protection

Virtual Memory

์šฐ๋ฆฌ ์šด์˜์ฒด์ œ์˜ Address Space์˜ ํŠน์ง•
โ€ข
์ƒ๋‹นํžˆ ํฐ ์–ด๋“œ๋ ˆ์Šค ์ŠคํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •(32bit : 2^32๋ฐ”์ดํŠธ VA space, 64bit : 2^64๋ฐ”์ดํŠธ VA space)ํ•˜๊ณ  ๊ฐ ํ”„๋กœ์„ธ์Šค์— ๊ทธ๋งŒํผ ํ• ๋‹น๋˜์–ด์žˆ์Œ.
Transparency
โ€ข
VA๋Š” ๊ฐ๊ฐ์˜ ๊ฐœ์ธ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋ฉฐ ๊ทธ ๊ณต๊ฐ„์„ ๋…์ ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์žฅํ•จ.
Efficiency
โ€ข
Time : ํ”„๋กœ๊ทธ๋žจ์ด ๋Š๋ ค์ง€์ง€ ์•Š์•„์•ผ ํ•จ. ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ํฌ์ง€ ์•Š์•„์•ผ ํ•จ.
โ€ข
Space : ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€์ƒํ™”๋ฅผ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋„ˆ๋ฌด ์ปค์ง€์ง€ ์•Š์•„์•ผ ํ•จ.
Protection
โ€ข
ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ๋…๋ฆฝ

Virtual Address

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]){ printf("location of code : %p\n", (void *) main); //ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ์‹œ์ž‘์ฃผ์†Œ printf("location of heap : %p\n", (void *) malloc(1));//mallocํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅผ๋•Œ return๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์— ๋Œ€ํ•œ ์ฃผ์†Œ int x = 3; printf("location of stack : %p\n", (void *) &x);//local variable์ด stack์— ํ• ๋‹น. -> ๋ชจ๋“  local var์ด stack์— ํ• ๋‹น๋˜์ง€๋Š” ์•Š์œผ๋‚˜ ์ฃผ์†Œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ stack์— ์ €์žฅ๋จ. return x; }
Assembly
๋ณต์‚ฌ
result
location of code : 0x1095afe50 location of heap : 0x1096008c0 location of stack : 0x7fff691aea64
Assembly
๋ณต์‚ฌ

Type of Memory

Stack
โ€ข
ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ local var์„ ํ• ๋‹นํ•ด์•ผํ•  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์กฐ์ž‘ํ•˜๋„๋ก ๋˜์–ด์žˆ์Œ.
โ€ข
ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๋ฐ˜ํ™˜๋ ๋•Œ ๋‚ด๋ถ€์ ์œผ๋กœ ์Šคํƒ์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„ฃ์–ด์คŒ.
โ€ข
์‘์šฉํ”„๋กœ๊ทธ๋žจ ์ž…์žฅ์—์„œ๋Š” ๋ช…์‹œ์  ์กฐ์ž‘์ด ์•„๋‹Œ ์ปดํŒŒ์ผ๋Ÿฌ์— ์˜ํ•ด implicitly managed๋œ๋‹ค.
Heap
โ€ข
๋ช…์‹œ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ†ตํ•ด์„œ ํž™์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋จ.

Memory API

void *malloc(size_t size)
C
๋ณต์‚ฌ
โ€ข
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝœ(์‹œ์Šคํ…œ ์ฝœ์ด ์•„๋‹ˆ๋‹ค!)
โ—ฆ
ํž™์˜ ๋ฉ”๋ชจ๋ฆฌ ํ’€์ด ์œ ๋™์ ์ด๋ฏ€๋กœ ์‹œ์Šคํ…œ ์ฝœ
โ€ข
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ•˜๊ธฐ ์œ„ํ•œ ์ง„์งœ ์‹œ์Šคํ…œ ์ฝœ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
โ—ฆ
brk
โ—ฆ
sbrk
โ€ข
mallocํ•จ์ˆ˜๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ—ฆ
๋ฌผ๋ก  brk์™€ sbrk๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•จ.
void free(void *)
C
๋ณต์‚ฌ
โ€ข
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝœ

Common Errors

โ€ข
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์žŠ๋Š” ๊ฒฝ์šฐ
โ—ฆ
Segmentation fault
char *src = โ€œhelloโ€; char *dst; //oops! unallocated -> garbage value strcpy(dst, src); //segfault and die
C
๋ณต์‚ฌ
char *src = โ€œhelloโ€; char *dst = (char *)malloc(strlen(src) + 1 ); strcpy(dst, src); //work properly
C
๋ณต์‚ฌ

Main Quest : How to Virtualize Memory

๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์˜ Address space๋Š” ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๋ณด์žฅํ•ด์ฃผ๊ณ , ๊ทธ ์–ด๋“œ๋ ˆ์Šค ์ŠคํŽ˜์ด์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ๋„‰๋„‰ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๋Š”๊ฐ€?
์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€์ƒํ™”๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”๋กœ ํ•˜๋Š” ์œ ์—ฐ์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ œ๊ณตํ•˜๋Š”๊ฐ€? ํ”„๋กœ๊ทธ๋žจ์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜์— ๋Œ€ํ•œ ์ œ์–ด๋ฅผ ์–ด๋–ป๊ฒŒ ์œ ์ง€ํ•˜๋Š”๊ฐ€? ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ์–ด๋–ป๊ฒŒ ์ ์ ˆํžˆ ์ œํ•œํ•˜๋Š”๊ฐ€?
์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฃฐ ๊ธฐ๋ฒ•์€ ํ•˜๋“œ์›จ์–ด ์ฃผ์†Œ ๋ณ€ํ™˜(hardware-based address translation) ํ˜น์€ ๊ทธ๋ƒฅ ์ฃผ์†Œ๋ณ€ํ™˜(address translation)
์ฃผ์†Œ๋ณ€ํ™˜์„ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด๋Š” ๊ฐ€์ƒ์ฃผ๋ฅผ ๋ฌผ๋ฆฌ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ๋ฅผ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋กœ ์žฌ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ฃผ์†Œ๋ฅผ ๋ณ€ํ™˜ํ•œ๋‹ค.
ํ•˜๋“œ์›จ์–ด๋งŒ์œผ๋กœ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ€์ƒํ™”๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค. ์šด์˜์ฒด์ œ์˜ ๋„์›€์ด ๋Š˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ์˜ ๋นˆ ๊ณต๊ฐ„๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ณณ์„ ํ•ญ์ƒ ํŒŒ์•…ํ•ด์•ผํ•˜๊ณ , ์ด๋ฅผ ์ œ์–ดํ•  ์ค„ ์•Œ์•„์•ผ ํ•œ๋‹ค.
์ฆ‰ ์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์ด ์ž์‹ ์˜ ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์†Œ์œ ํ•˜๊ณ  ๊ทธ ์•ˆ์— ์ž์‹ ์˜ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋Š” ํ™˜์ƒ์„ ๋งŒ๋“ ๋‹ค.

Assumption

1.
๋‹น๋ถ„๊ฐ„ ์‚ฌ์šฉ์ž ์ฃผ์†Œ ๊ณต๊ฐ„์€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ์— ์—ฐ์†์ ์œผ๋กœ ๋ฐฐ์น˜๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
2.
๋…ผ์˜๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์†Œ๊ณต๊ฐ„์˜ ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
3.
์ฃผ์†Œ ๊ณต๊ฐ„์€ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค ์ž‘์œผ๋ฉฐ ๊ฐ ์ฃผ์†Œ์˜ ํฌ๊ธฐ๋Š” ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
์Šค์ผ€์ฅด๋ง๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ๊ฐ€์ •์„ ํ•ด๊ธˆํ•ด๋‚˜๊ฐˆ ๊ฒƒ์ด๋‹ค.

Example

void func(){ int x = 3000; x = x + 3; //์šฐ๋ฆฌ๊ฐ€ ๊ด€์‹ฌ์žˆ๋Š” ์ฝ”๋“œ
C
๋ณต์‚ฌ
๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’์„ ํƒ‘์žฌํ•˜๊ณ , 3์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ์งง์€ ์ฝ”๋“œ๋‹ค.
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ๊ฒƒ์ด๋‹ค.
movl 0x0(\%ebx), \%eax ; 0+ebx๋ฅผ eax์— ์ €์žฅ addl \$0x03 \$eax ; eax ๋ ˆ์ง€์Šคํ„ฐ์— 3์„ ๋”ํ•œ๋‹ค. movl \%eax 0x0(\%ebx) ; eax๋ฅผ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ.
Assembly
๋ณต์‚ฌ
x์˜ ์ฃผ์†Œ๋Š” eax๋ ˆ์ง€์Šคํ„ฐ์— ๋“ค์–ด์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ , ์ด ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ movl๋กœ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ์— ๋„ฃ๋Š”๋‹ค.
๋ฉ”๋ชจ๋ฆฌ์ ์ธ ์ธก๋ฉด์—์„œ ์ด๋ฅผ ๋‹ค์‹œ ๋ฐ”๋ผ๋ณด๋„๋ก ํ•˜์ž.
instruction์ฝ”๋“œ๋Š” ์ƒ๋‹จ 128๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์œ„์น˜ํ•ด์žˆ๋‹ค.
๋ณ€์ˆ˜ x์˜ ๊ฐ’์€ ์ฃผ์†Œ 15KB(์Šคํƒ)์— ์œ„์น˜ํ•œ๋‹ค.
๊ทธ๋ฆผ์—์„œ x์˜ ์ดˆ๊ธฐ ๊ฐ’์€ 3000์ด๋‹ค.
์œ„ ๋ช…๋ น์–ด๊ฐ€ ์‹คํ–‰๋˜๋ฉด ํ”„๋กœ์„ธ์Šค์ด ๊ด€์ ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์ด ์ผ์–ด๋‚œ๋‹ค.
1.
์ฃผ์†Œ 128์˜ ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜์ž…
2.
์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰(์ฃผ์†Œ 15KB์—์„œ ํƒ‘์žฌ)
3.
์ฃผ์†Œ 132์˜ ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜์ž…
4.
์ด ๋ช…๋ น์–ด ์‹คํ–‰(๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ์—†์Œ)
5.
์ฃผ์†Œ 135์˜ ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜์ž…
6.
์ด ๋ช…๋ น์–ด ์‹คํ–‰(15KB์— ์ €์žฅ)
ํ”„๋กœ๊ทธ๋žจ ๊ด€์ ์—์„œ ์ฃผ์†Œ๊ณต๊ฐ„์€ ์ฃผ์†Œ 0๋ถ€ํ„ฐ ์ตœ๋Œ€ 16KB๊นŒ์ง€๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ๋Š” ์ด ๋ฒ”์œ„ ๋‚ด์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.
๊ทธ๋Ÿผ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ 0์ด ์•„๋‹Œ ๊ณณ์— ์œ„์น˜์‹œํ‚ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
์ •๋‹ต! ์Šฌ๋กฏ์ œ๋กœ ์šด์˜ํ•˜๋ฉด ๋œ๋‹ค! ๊ฐ ์Šฌ๋กฏ๋‹น ํ”„๋กœ์„ธ์Šค์— ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฝ‚์œผ๋ฉด ๋œ๋‹ค.
๋งˆ์น˜ 2000๋…„๋Œ€ ์ดˆ๋ฐ˜์— ์žˆ๋˜ ๋น„๋””์˜ค๊ฒŒ์ž„์˜ ๋ฉ”๋ชจ๋ฆฌ์นด๋“œ์™€ ์œ ์‚ฌํ•จ.

Dynamic Relocation

ํ•˜๋“œ์›จ์–ด ๊ธฐ๋ฐ˜ ์ฃผ์†Œ ๋ณ€ํ™˜์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ์ฒซ๋ฒˆ์งธ ์‚ฌ๋ก€๋ฅผ ์„ค๋ช…ํ•ด์•ผํ•œ๋‹ค.
50โ€™s ํ›„๋ฐ˜์— ์‹œ๋ถ„ํ•  ์ปดํ“จํ„ฐ๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ ๋ฒ ์ด์Šค์™€ ๋ฐ”์šด๋“œ(base and bound)๋ผ๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค. ๋˜ํ•œ ์ด ๊ธฐ์ˆ ์€ ๋™์  ์žฌ๋ฐฐ์น˜๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.
๋ฒ ์ด์Šค์™€ ๋ฐ”์šด๋“œ๋Š” ๊ฐ๊ฐ ๋Œ€์‘ํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
โ€ข
๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ : ์ž์‹ ์ด ์›ํ•˜๋Š” ์œ„์น˜์— ์ฃผ์†Œ๊ณต๊ฐ„์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
โ€ข
๋ฐ”์šด๋“œ ๋ ˆ์ง€์Šคํ„ฐ : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ณต๊ฐ„์— ์นจ๋ฒ”ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š”๋‹ค.
์œ„ ์˜ˆ์—์„œ ์šด์˜์ฒด์ œ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฌผ๋ฆฌ์ฃผ์†Œ 32KB์— ์ €์žฅํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๊ณ  ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์ด ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•œ๋‹ค.
physical address - virtual address + base
Assembly
๋ณต์‚ฌ
ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ€์ƒ์ฃผ์†Œ๋‹ค!
ํ•˜๋“œ์›จ์–ด๋Š” ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ์˜ ๋‚ด์šฉ์„ ์ด ์ฃผ์†Œ์— ๋”ํ•ด ์ตœ์ข… ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
์ด์ „ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์ฐธ์กฐํ•ด๋ณด์ž.
128: movl 0x0(%ebx), %eax
Assembly
๋ณต์‚ฌ
ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(PC)๋Š” 128๋กœ ์„ค์ •๋œ๋‹ค. ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ด ๋ช…๋ น์–ด๋ฅผ ๋ฐ˜์ž…ํ•  ๋•Œ ๋จผ์ € PC ๊ฐ’์„ ๋ฒ ์ด์Šค ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’ 32KB์— ๋”ํ•ด 32896์„ ๋งŒ๋“ ๋‹ค.
๊ฐ€์ƒ์ฃผ์†Œ์—์„œ ๋ฌผ๋ฆฌ์ฃผ์†Œ๋กœ์˜ ๋ณ€ํ™˜์ด ์‹คํ–‰ ์‹œ์— ์ผ์–ด๋‚˜๊ณ , ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์„ ์‹œ์ž‘ํ•œ ์ดํ›„์—๋„ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ์ด๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ์žฌ๋ฐฐ์น˜๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.

Summary : Hardware Support

Next chapter