week 05 {swjungle} {malloc-lab}


README

ํŒ€์›๋“ค๊ณผ ์ „๋žต์„ ์„ธ์› ๋‹ค. CSAPP ์ฑ…์„ ๋”ฐ๋ผ ์ฝ๋Š”๊ฒƒ์ด ์ผ์ฃผ์ผ์˜ 80%๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ , ๋”ฐ๋ผ์„œ ์ฑ•ํ„ฐ๋ฅผ ๋‹ค ๊ฐ™์ด ๊ณต๋ถ€ํ•˜๋˜, ๋ฐœํ‘œํ•˜๊ณ  ์‹ถ์€ ์ฑ•ํ„ฐ๋ฅผ ๋”ฐ๋กœ ๋” ๊ณต๋ถ€ํ•˜์—ฌ ๋งค์ผ๋งค์ผ ๋ฐœํ‘œํ•˜๋Š” ์‹์œผ๋กœ ์ง„ํ–‰๋  ๊ฒƒ ๊ฐ™๋‹ค. ์ผ๋‹จ ๊ธˆ์š”์ผ์€ ํฌ๊ด„์ ์ธ ๋‚ด์šฉ์„ ๋‹ค๋ฃฐ ์˜ˆ์ •. ๋ฌด์—‡๋ฌด์—‡์ด ์žˆ๋Š”์ง€, ์–ด๋–ค ์ฑ•ํ„ฐ๋ฅผ ์ค‘์ ์ ์œผ๋กœ ์ฝ์„ ๊ฒƒ์ธ์ง€, ์ง€์‹์„ ํŒ€์›๋“ค๊ณผ ์‹ฑํฌ ๋งž์ถ”๋Š” ๊ฒƒ์ด๋‹ค.

Daily Dump

09/07 ๋ชฉ ~ 09/08 ๊ธˆ
๋ฐ€๋ฆฐ ์ฑ… ๋ถ€๋ถ„ ์ฝ๊ณ  ๋ฐœํ‘œ ์ค€๋น„ ํ•˜๊ธฐ

09/09 ํ† 
โญ๏ธ 9.9. Dynamic Memory Allocation ๋ฐœํ‘œ @์•ˆ์ƒ์–ธ

09/10 ์ผ
7. Linking {CSAPP} ๋ฐœํ‘œ @์ตœ์Šนํ˜„

09/11 ์›”
์‹œ์Šคํ…œ ์ฝœ ๋ฐœํ‘œ @์ด์ธ๋ณต

09/12 ํ™”

09/13 ์ˆ˜

malloclab

syscall @์ด์ธ๋ณต

user mode by programmer VERSUS previledge mode by kernel

์ค‘๊ฐ„์— ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ์ธํ„ฐ๋ŸฝํŠธ or ์‹œ์Šคํ…œ ์ฝœ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์ปค๋„์ฝ”๋“œ์ชฝ์œผ๋กœ ์‹คํ–‰ ํ๋ฆ„์ด ์˜ฎ๊ฒจ๊ฐ”๋‹ค๊ฐ€ ๋‹ค์‹œ ๋Œ์•„์˜ด.

CPU์˜ ์ƒํƒœ๋ฅผ ์ €์žฅ. ๋‚˜์ค‘์— ์‹คํ–‰์„ ์ด์–ด๊ฐ€์•ผ ํ•˜๋‹ˆ๊นŒ.

WHY syscall?

๋ถ€ํŒ…ํ•˜๋ฉด BIOS ํ™”๋ฉด ๋‚˜ํƒ€๋‚˜๊ณ , Power self test? ๊ฐ™์€๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ •์ƒ์ธ์ง€ ํ™•์ธํ•˜๊ณ  ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜ (DISK, ROM)์— ์ ‘๊ทผํ•œ๋‹ค.

OS๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๊ณ  RAM์— ์˜ฌ๋ผ๊ฐ€์•ผ ์‹คํ–‰์ด ๋œ๋‹ค.

interface between Kernel and Programmer, actually not that directly, proxy such as shell, stdio libraries

Kind of syscalls

Interrupt

Process/Threads

File IO

Socket

Device

IPC

state machine diagram

์Šคํฌ๋ฆฐ์ƒท 2023-09-11 ์˜คํ›„ 5.21.38.png|500

Quiz

5.

๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋Š”์ง€ ๋…ผํ•˜์‹œ์˜ค. (msg ๋กœ ์ „๋‹ฌ๋˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 64 ์ด์ƒ์ธ ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•˜์‹œ์˜ค.) ์ด์™€ ์œ ์‚ฌํ•œ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ˆ˜์ •ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์„๊นŒ?

void print_err(char *msg) {  
	char *s = (char *) malloc(10);  
	sprintf(s, "%s\n", msg);  
	fprintf(stderr, s);  
	free(s);  
};

๋ฌธ์ œ์˜ ์š”์ง€
malloc์„ ๊ตฌํ˜„ํ•ด๋ดค๊ธฐ ๋•Œ๋ฌธ์— malloc์ด ์ง€์ •ํ•ด์ค€ ์˜์—ญ๋ณด๋‹ค ๋„˜์น˜๋Š” ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ–ˆ์„ ์‹œ ์–ด๋–ค ์˜ํ–ฅ์ด ๊ฐ€ํ•ด์ง€๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ •๋‹ต
ํŽ˜์ด๋กœ๋“œ ๋ฐ–์˜ ์˜์—ญ์— ์žˆ๋Š” footer, ๋‹ค์Œ ๋ธ”๋Ÿญ์˜ header๊ฐ€ ๊นจ์ง„๋‹ค. malloc ๊ด€๋ฆฌ์ •๋ณด๊ฐ€ ํŒŒ๊ดด๋˜๋ฏ€๋กœ ์ถ”ํ›„ malloc/free ํ˜ธ์ถœ ์‹œ ์—‰๋šฑํ•œ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋‚˜์ค‘์— ๋””๋ฒ„๊น…๋„ ์–ด๋ ค์›Œ์ง„๋‹ค.

๋ชจ๋ฒ”์ฝ”๋“œ

char *s = (char *)malloc(strlen(msg) + 2);

extra A.

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š”๋ฐ ์™œ ๋ธ”๋Ÿญ๋‹จ์œ„๋กœ ํ• ๋‹นํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ด ๋ณด์‹œ์˜ค {malloc-lab}