[os] memory management
1) ์๋ ํ๋ก๊ทธ๋จ์ memory map์ ๊ทธ๋ ค๋ผ. code, data, heap, stack segment์ ์์ ์ฃผ์๋ ๋ฌด์์ด๋ฉฐ, ๊ฐ ์ธ๊ทธ๋จผํธ๋ ๋ช ํ์ด์ง๋ฅผ ์ฐจ์งํ๊ณ , ์ฃผ์ ๊ธฐ๋ฅ์ ์ฃผ์, ์ ์ญ/์ง์ญ ๋ณ์์ ์ฃผ์๋ ๋ฌด์์ธ๊ฐ?
๋ค์์ logical ์ฃผ์๋ฅผ ์๋ฏธํ๋ฏ๋ก ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ ์์น๋ฅผ ์๊ธฐ ์ํด์๋ Process Table์ ์ด์ด Physical ์ฃผ์๋ฅผ ํ์ธํด์ผ ํ๋ค.
result :
Code | 08048000-08049000 | &main |
Read-Only Data | 08049000-0804a000 | |
Data | 0804a000-0804b000 | &x, &y |
Heap | 0804b000-08075000, b7e22000-b7e23000 | &y[9999], pk |
C Library Code | b7e23000-b7f4d000 | |
C Library Data | b7f4d000-b7f50000 | |
Library Loader | b7f58000-b7f74000 | |
Stack | bfc5f000-bfc74000 | &k, &pk |
mainํจ์๋ code ์์ญ์ ์กด์ฌํ๊ณ , x์ y[10000]์ ์ ์ญ๋ณ์๋ก ์ ์ธํด์ฃผ์ด Data ์์ญ์ ์์นํ ๊ฒ์ ์ ์ ์๋ค. ๋งค์ฐ ํฐ ์ ์ญ๋ณ์์ ๋์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ heap์์ญ, ์ง์ญ๋ณ์๋ stack ์์ญ์ ํ ๋น๋๋ค.
2) ๋ค์ ํ๋ก๊ทธ๋จ์ memory map์ ํ์ํด๋ผ.
Code | 8048-8049 | &main |
Data | 804a-804b | &A |
Heap | 804b-8050 | &A[4][1024] |
Stack | bf949-bf95e | &i, &j |
๊ธฐ๋ณธ์ ์ผ๋ก Page์ ํฌ๊ธฐ๋ 4KB์ด๊ธฐ ๋๋ฌธ์ "/proc/pid/maps"์์ 0x1000๋น ํ Page๋ผ๊ณ ๋ณผ ์ ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์๊ณผ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์์ ๋ค 3์๋ฆฌ๋ฅผ ์ ํ๋ฉด Page ๋ฒํธ๋ฅผ ๊ตฌํ ์ ์๋ค. ํ๋ก๊ทธ๋จ์ Code(main) -> Data(์ ์ญ๋ณ์) -> Heap(์ ์ญ๋ณ์) -> Stack(์ง์ญ๋ณ์) ์์ผ๋ก ์ ๊ทผํ๋ค.
3) 2๋ฒ ํ๋ก๊ทธ๋จ์์ ๋ช ํ์ด์ง์ ๊ฒฐํจ์ด ๋ฐ์ํ๋ ? ์ฒ์ ์์คํ ์ ํ์ฌ ํ๋ก์ธ์ค์ ํ์ด์ง๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ์ง ์๋๋ค.
์ต์ด๋ก main ํจ์๋ฅผ ์คํํ๊ธฐ ์ํด Code ์์ญ์ Page๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒ์ด๋ค(1๋ฒ). ๊ทธ ๋ค์ ์ ์ญ๋ณ์ &A๊ฐ ์์นํ Data(1๋ฒ)์ Heap์ 804a๋ถํฐ 804f(5๋ฒ)๊น์ง์ 6 Page๋ฅผ ๋ถ๋ฌ์ฌ ๊ฒ์ด๋ค ํ๋ก๊ทธ๋จ์ด Stack์ ์ ๊ทผํ๋ฉด์๋ bfc6f Page(i,j ์ ์ฅ ์์น/ 1๋ฒ)๋ฅผ ์ฝ์ด์จ๋ค. ๋ฐ๋ผ์ ex2 ํ๋ก๊ทธ๋จ์ ์ํ Page Fault๋ 8๋ฒ์ด๋ฉฐ, printf ๋ฑ์ C ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณ ๋ คํ๋ค๋ฉด ๋ ๋ง์ Page Fault๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
4) page fault๋ฅผ ํ์ํ๋ "mm/map.c"์ sys_show_pfcnt()๋ฅผ ์ ์ํ์ฌ page fault๋ฅผ ๊ตฌํ์
์์คํ ์ฝ 31๋ฒ์ ์ ์ธํด์ฃผ์๋ค.
page fault๊ฐ ๋ช ๋ฒ ๋ฐ์ํ๋์ง ์ถ๋ ฅํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํด์ฃผ์๋ค.
do_page_fault ํจ์๊ฐ ํธ์ถ๋๋ ํ์๋ฅผ ๊ธฐ๋กํ๋ ๋ณ์๋ฅผ ์ ์ธํ๊ณ , ์ ์ธ๋ ๋๋ง๋ค +1ํด์ฃผ์๋ค.
๋ฐ๋ณต๋ฌธ์ ๋๊ธฐ ์ ํ์ syscall์ ํด์ฃผ์๋ค.
๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
720848-720843 = 5
syscall ์ฌ์ด์ ๋ฐ๋ณต๋ฌธ์์ ์ด 5๋ฒ์ Page Fault๊ฐ ์ถ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค. ์ ์ญ๋ณ์๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด A[0]๊ฐ ์์นํ 804a Page๋ฅผ ์ ์ธํ๋ฉด A[4][1024]๊น์ง ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค๊ธฐ ์ํด์๋ 804f๊น์ง์ 5๋ฒ์ Page Fault๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ ํ๋ก๊ทธ๋จ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๊ฐ ์ ๋์๋ค.
์ฌ๊ธฐ์ main๋ฌธ์ ๋ถ๋ฌ์ค๋ page fault 1๋ฒ, ์ ์ญ๋ณ์๊ฐ ์์นํ Data page fault 1๋ฒ, ์ง์ญ๋ณ์ i,j์ ์ํ page fault 1๋ฒ => 8๋ฒ!
4-1)
ํ์ด์ง ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ํํ ์ฃผ์๋ฅผ ํ์ํ ์ ์์ต๋๋ค. ex3.c๋ฅผ ๋ง๋ค๊ณ arch/mm/fault.c:do_page_fault()์ ๋ค์ ์ฝ๋(์ดํค๋ฆญ์ฒด)๋ฅผ ์ฝ์ ํฉ๋๋ค. ex3๋ฅผ ์คํํ๋ฉด ์ปค๋์ ex3์ ์ํด ์์ฑ๋ ํ์ด์ง ์ฅ์ ์ฃผ์๋ฅผ ํ์ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช ํฉ๋๋ค. ๋ํ hw3)์์ ํ์ด์ง ์ค๋ฅ ์ฃผ์๋ฅผ ๊ฒํ ํ์ฌ ๋ต๋ณ์ ๋ค์ ํ์ธํฉ๋๋ค.
do_page_fault ํจ์์ ํ์ฌ ์คํํ๋ ํ๋ก๊ทธ๋จ ์ด๋ฆ์ด "ex4_1"์ด๋ฉด Page Fault ์ฃผ์๋ฅผ ์ถ๋ ฅํ๋๋ก ์ปค๋ ์ฝ๋๋ฅผ ์์ ํ๋ค. ํ๋ก๊ทธ๋จ์ด ์์๋๋ฉด Code(804a) Page๋ฅผ ๋จผ์ ์ฝ๊ณ , libc ๋ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ฅ๋ ํ์ด์ง๋ฅผ ์ฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ Heap ์์ญ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฐ๋ค. ํ๋ก๊ทธ๋จ์ ์ฝ๋์ ๋นํด ๋ง์ Page Fault๊ฐ ์์ฑ๋ ์ด์ ๋ mainํจ์๊ฐ ์ด๊ธฐํ๋์ด ํธ์ถ๋๊ธฐ๊น์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ํฌํจ๋์๊ธฐ ๋๋ฌธ์ด๋ค.
4-2) 2๋ฒ๊ณผ ๊ฐ์ด ex4 ์ฝ๋๋ฅผ ์์ ํ์ฌ ๋ฐ๋ณตํฉ๋๋ค. ์ pfcnt๊ฐ ์ฆ๊ฐํ๋๊ฐ?
pcnt = 723887 - 723863 = 24๊ฐ๋ก ์ฆ๊ฐํ๋ค.
์ฆ๊ฐํ ์ด์ ๋ printf ํธ์ถ์์ ์ถ๊ฐ์ ์ธ Page Fault๊ฐ ์ผ์ด๋ฌ๊ธฐ ๋๋ฌธ์ด๋ค.
5) ํ์ฌ ํ๋ก์ธ์ค์ vma ์ ๋ณด๋ฅผ ์ถ๋ ฅํ๋ ์์คํ ํธ์ถ์ ํ๊ณ , vma ๋ชฉ๋ก์ ํ์ํ๋ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์์ฑํ์ฌ "/proc/pid/maps"์ ๊ฐ์์ง ํ์ธํด๋ผ.
32๋ฒ์ vma_list๋ฅผ ์ถ๋ ฅํ๋ ์์คํ ์ฝ ํจ์๋ฅผ ์ ์ธํด์ฃผ์๋ค.
VMA List๋ Linked List ํํ๋ก ๊ตฌํ๋์๊ธฐ ๋๋ฌธ์ temp = temp->vm_next๋ก ๋ค์ ๊ฐ์ ์ง์ ํ๋ฉฐ NULL์ด ๋ ๋๊น์ง ์ด๋ฅผ ๋ฐ๋ณตํ๋ค. vm_file ๊ฐ์ด NULL์ผ ๊ฒฝ์ฐ์๋ name์ ์ถ๋ ฅํ์ง ์๋๋ค.
"/proc/pid/maps"์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
6) sys_show_pfcnt()๋ฅผ ์ฌ์ฉํ์ฌ ex1 ๋ฐ ex2์ ์ด์ด ์คํํ ๋ ํ์ด์ง ์ฅ์ ์๋ฅผ ๊ณ์ฐ, ๋ํ ๊ฐ ์ฝ๋์ ์คํ ์๊ฐ์ ๋น๊ตํ๊ณ (gettime of day() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ) ์๋ก ๋ค๋ฅธ ์ด์ ๋ฅผ ์ค๋ช
Program | page fault | elapsed time |
ex6_1 | 1357266-1291727(65539) | 3.776 |
ex6_2 | 1431917-1357803(74114) | 4.00 |
ex6_1๊ณผ ex6_2์ ์ฐจ์ด์ ์ A[i][j]์ A[j][i]์ด๋ค. ex02์์ ๋ ๋ง์ Page Fault๊ฐ ๋ฐ์ํ๋๋ฐ, ex01์ A์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฌ๋ ์์๋๋ก ์ ๊ทผํ ๋ฐ๋ฉด ex02๋ ์์๋๋ก ์ ๊ทผํ์ง ์์๊ธฐ(์ฐธ์กฐ์ ์ง์ญ์ฑ์ ๋ง์กฑํ์ง ์์๊ธฐ) ๋๋ฌธ์ LRU ์๊ณ ๋ฆฌ์ฆ์ ์ํด ์ฌ์ฉํ์ง ์์ Page๋ฅผ ์ญ์ ํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ๋ด๋ ค๊ฐ Page๋ฅผ ์๋ก ์ฝ์ด์ค๋ ์์ ์ด ๋ฐ๋ณต๋์ด ๋ ๋ง์ Page Fault๊ฐ ์ผ์ด๋ฌ๋ค.
Page Fault ๊ณผ์ ์ ๋ฐ์ํ ํ์๋งํผ ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ์ ํ์ํค๋ฏ๋ก ex02์ด ex01๋ณด๋ค ๋๋ฆฌ๊ฒ ์คํ์ ๋๋ง์ณค๋ค.