์ ์ ๋ ํ์ผ์ด๋ฆ๊ณผ ๋๋ ํ ๋ฆฌ๋ง ์๋ฉด ํ์ผ์ ์ด๊ณ , ์ฐ๊ณ , ์ ์ฅํ๋ ๋ฐ ๋ฐ๋จ์ ์ผ๋ค์ ์ ๊ฒฝ์ฐ์ง ์๊ณ ์ปดํจํฐ๋ฅผ ์ด๋ค. OS๋ ์ด๋ฅผ ์ํด file system์ ํตํด disk๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์ฐ์ด ๋๋ ๋ฐ์ดํฐ๋ค์ disk์ ์ฎ๊ฒจ์ฃผ๊ณ ์์ ํ ๋ด์ฉ์ ๋ถ๋ฌ์ ์ค์ผ๋ก์จ, memory hierarchy์ ์ต์ ํํด ์ปดํจํ ์ฑ๋ฅ์ ํฅ์์ํจ๋ค. ๋ํ ๋ณ๊ฒฝ๋ ๋ด์ญ๋ค์ ์ ์ฅํด ์ปดํจํฐ๊ฐ ์ข ๋ฃ๋๊ณ ๋ถํ ๋ ์ดํ์ ์ด์ ์์ ๋ค์ด ์์ ํ๊ฒ ๋ณดํธ๋๊ฒ๋ ํ๋ค.
ํ์ผ ์์คํ ์ ์ง๊ธ๊น์ง ๋ฉ ์ค์ ๊ฐ์ฅ ์ด๋ ค์ ๋ค... ๊ทธ ์ ์๋ ํ ํ๋ฆฟ๋ ์ ๋์ด ์์๊ณ , ์ ์ด๋ ์ด ๋ถ์ ๊ณ ์ณ๋ผ๋ผ๋ ์ ๋์ ์ค๋ช ๋ค์ด ์์๋๋ฐ, ์ด๋ฒ ์ฃผ๋ ๊ฐ๋ ์ ์ธ ๋ถ๋ถ๊น์ง ๊ณต๋ถ๊ฐ ๋์๋ ๊ฒ์ ๊ฐ์ ํ๊ณ git book์ ๊ฐ๋จํ๊ฒ ์ ํ์์๋ค. OS๋ง๋ค ๊ฐ๋ ์ ๊ฐ์ผ๋ ๊ตฌํํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๊ณ ์ฌ์ฉํ๋ ์ ์ฑ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ Pintos์์ ์ด๋ค ๊ธฐ๋ฅ์ ํ์ํ๋๋ฐ ํ์ ์ด ํ์ํ๋ค. ๊ทธ๋์ ๊ฐ๋ ์ ๋ํด์ ๊ณต๋ถ๋ฅผ ํ๊ณ ์ฝ๋๋ฅผ ๋ฏ์ด๋ด๋ณด๋ฉด์ ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ํ์ ํ๋ ๊ณผ์ ์ด ํ์ํ๋ค. ํจ์๋ง๋ค ์ผ์ผํ pritnf ์ฐ๊ณ test์ผ์ด์ค ๋๋ ค๊ฐ๋ฉด์ ํ๋ฆ์ ๋ณด๊ณ ํฐ์ง๋ ๋ถ๋ถ์์ ์ด๋ค ๊ธฐ๋ฅ์ด ํ์ํ ์ง ํ์ ํ๋ค.

์ด์ Pintos๋ freemap์ด๋ผ๋ bitmap์ ํตํด์ disk๋ฅผ ๊ด๋ฆฌํ๊ณ ์์๋ค. Bitmap์ ์ฌ์ฉํ๋ฉด ๊ตฌํ์ด ๊ฐ๋จํ์ง๋ง disk์ ํฌ๊ธฐ ์ปค์ก์ ๋ bitmap์ ํฌ๊ธฐ ๋ํ ์ปค์ ธ์ผํ๋ค๋ ๋จ์ ์ด ์๋ค. ์ด๋ฅผ FAT๋ฅผ ์ฌ์ฉํด ๋์ฒดํ๊ณ , FAT table์ ์ ์ฅํ๋ sector๋ฅผ ๋ฏธ๋ฆฌ ์ง์ ํด ๋์์ผ๋ก์จ ์ปดํจํฐ๊ฐ ๊บผ์ก๋ค ์ผ์ ธ๋ ์ด์ disk ์ฌ์ฉ์ ๋ณด๋ค์ ๋ณด๊ดํ ์ ์๋๋ก ๊ตฌํํ๋ค. ๊ตฌํ ๋ค์ disk์ sector๋ ๋ค์ ๋ชจ์์ด ๋๋ค.

๋ถํ , ์ข ๋ฃ์ FAT๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋ ์ฝ๋๋ ์ด๋ฏธ ๊ตฌํ์ด ๋์์ผ๋, ์ด์ ๋ง์ถฐ์ FAT๋ฅผ ๊ตฌํํ๊ณ sector์ cluster๋ฅผ ์ฐ๊ฒฐ์ํค๋ ๋ถ๋ถ์ ๊ตฌํํ์๋ค. ์๋ก์ด cluster๋ค์ ๊ด๋ฆฌํ๊ณ ์ด๋ฅผ FAT table์์ linked ์์ผ์, sector๊ฐ ๋จ์ด์ ธ ์์ด๋ ์ฐ์์ ์ธ ํ์ผ๋ก ๋ถ๋ฌ์ฌ ์ ์๋๋ก ํ๋ค. ์ด๋ฅผ ํตํด ์ ์ ๊ฐ ํ์ผ์ ์ ๊ทผํ๋ ์์๋ file->inode->inode_disk->start sector->cluster->fat->next cluster-> next sector .... ๊ฐ ๋๋ค. ์ด๋ ๊ฒ ๋๋๋ก inode.c์ free map ๋ถ๋ถ๋ค์ ๋ชจ๋ ์์ ํ๋ค.
ํ์ผ์ inode๋ฅผ ํ๋์ฉ ๊ฐ์ง๊ณ ์๋ค. ํ์ผ์ openํ๋ฉด inode on memory๊ฐ memory์ ์ฌ๋ผ๊ฐ๋ค. inode on disk๋ ํ์ผ์ ๋ํ ์ ๋ณด๋ฅผ disk์ ์ ์ฅํ๋ ๋ ์์ด๋ค. inode on memory๋ ํ์ผ์ ์ด๋๋ง๋ค ๋ ๋ฆฝ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ์ง๋ง, inode on disk๋ ํ๋๋ค ํ์ผ์ ๋ญ๊ฐ ๋ณํ๊ฐ ์ผ์ด๋๋ค๋ฉด inode on disk์ disk write ํด์ค๋ค. inode on disk์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์์ sector๋ฅผ ์ ์ฅํด ๋๋๋ฐ ์ด๋ฅผ ํตํด FAT์ ์ ๊ทผํ ์ ์๊ณ , extensibleํ๊ฒ ๋ง๋ค ์ ์๋ ๊ฒ์ด๋ค.
์ด์ pintos๋ file length๊ฐ staticํ์๋๋ฐ, ์ด๋ฅผ dynamicํ๋๋ก ์์ ํ๋ค. write length(size+offset)์ด ํ์ผ์ด inode length ๋ณด๋ค ํฌ๋ค๋ฉด, ํ์ผ length๋ฅผ ๋ณ๊ฒฝํ๊ณ , ํ์ํ๋ค๋ฉด ์ถ๊ฐ์ ์ธ sector๋ฅผ ํ ๋นํด์ค๋ค.
์ด์ pintos๋ root directory์ ๋ชจ๋ ํ์ผ์ ์ ์ฅ๋๊ฒ๋ ๋์๋ค. ๋ํ '/a/b'๋ผ๋ ์ฃผ์๊ฐ ๋ค์ด์๋ ๊ฒฝ๋ก๋ก ์ธ์ํ์ง ๋ชปํ๊ณ ํ๋์ filename์ผ๋ก ์ธ์ํ๋ค. dir, dir entry๋ ์ด๋ฏธ ๊ตฌํ์ด ๋์๋ค. dir์ file ๊ตฌ์กฐ์ฒด์ ๊ฐ๋ค, ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ๋ ์์ด๊ณ , dir_entry๋ file์ data๋ผ๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. dir๋ฅผ ์ด๋ฉด dir entry๋ฅผ ํตํด ๋๋ ํ ๋ฆฌ ์์ ํ์ผ์ด๋ directory๋ก ์ ๊ทผํ ์ ์๋ค. thread๋ง๋ค cwd๋ฅผ ๊ตฌํํด์ ์ ๋ ๊ฒฝ๋ก์ ์๋๊ฒฝ๋ก๋ฅผ ๊ตฌํํ๋ค.
๋จผ์ ์ฃผ์ด์ง ์ ๋ ฅ์ parseํ๋ ํจ์๋ฅผ ๋ง๋ ๋ค. strtok ํจ์๋ฅผ ์ด์ฉํด์ '/'๋จ์๋ก ๋์ด์ dir ์ด๊ณ dir entry๋ฅผ ๊ฒ์ํด ๋ค์ dir๋ฅผ ์ฐพ๋๋ค ์ต์ข ์ ์ผ๋ก๋ ๋ง์ง๋ง์ ์์ ํด์ผ ํ working dir์ ๋ง์ง๋ง filename์ ๋ฐํํ๋ค. ์ด๋ฅผ ์ฌ์ฉํด์ create, open, remove์์ subdirectories๋ฅผ ๊ตฌํํ๋ค. '..'์ '.' ๊ทธ๋ฆฌ๊ณ ๋ค์ํ ์์ธ ์ผ์ด์ค๊น์ง ๊ตฌํํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค. ์ฌ์ฉ๋ inode๋ฅผ ๋ชจ๋ ๋ง๋ํ ๋ซ์์ค์ผ inode remove๋ ๋์ํ๊ณ disk์๋ ์ ์ ์ฅ๋๋ค๋ ๊ฑธ ๊นจ๋ซ๋๋ฐ ๋ง์ ์๊ฐ์ ์๋ชจํ๋ค...
soft link๋ ๊ณ ๋ฏผ ๋์ ์๋ก์ด file,director ๊ฐ์ ์๋ก์ด element๋ก ๋ฐ์๋๋ฆฌ๋๊ฒ ํธํ๋ค. ์ฌ๊ธฐ์๋ ์ค๋ก์ง ํ์ผ ๊ฒฝ๋ก๋ง์ด data๋ก ์ ์ฅ ๋์ด ์์ด์ ์ ๊ทผ์ ๋ฐ๋ก parsingํด์ inode๋ฅผ ๊ฒ์ํด์ ๋ฐํ์ํค๋๋ก ์ ์ฒด์ ์ธ ์์คํ ์์ ์์ ๋ดค๋ค... ๋๋ถ์ ํ์ผ ์ ๊ทผํ ๋ ๋ง๋ค is_link() ํจ์๋ฅผ ํตํด ํ์ธํ๊ณ ... 4byte์ ์ฃผ์๋ฅผ ์ํด ํ sector๋ฅผ ํ ๋นํ๊ณ .. ๋งค์ฐ ๋นํจ์จ์ ์ผ๋ก ๋๊ปด์ง์ง๋ง ์ด๋ ๊ฒ ์ง์ง ์์ผ๋ฉด test case๋ฅผ ํต๊ณผํ ์ ์์๋ค....
์ด์์ง์ ๋ฐฐ๋ ค๋ก ๊ตฌํ์์ ์ ์ธํด์ฃผ์
จ๋ค!! ์ค์ ๋ก๋ test case๋ ์๊ณ ์ฑ๋ฅํฅ์์ ๊ดํ ๋ถ๋ถ์ด๋ผ... ๊ตฌํํ์ง ์์๋ ๋ฌด๋ฐฉํ์ง๋ง, ์๋ง memory hierarchy๋ฅผ ํจ์จ์ ์ผ๋ก ์ด์ฉํ๊ธฐ ์ํด์๋ ๊ผญ ํ์ํ ๋ถ๋ถ์ด๊ฒ ์ง....
ํน์ ๋์ค์๋ผ๋ ๊ตฌํํ๊ธฐ ์ํด ์ ์ด๋์๋ ๋ฉ๋ชจ๋ฅผ ์ ์ด๋๋ค....
1. ๋ฒํผ๋ 64 sectors๋ฅผ ํ ๋น, mapping memory๋ list๋ก
2. clock ์๊ณ ๋ฆฌ์ฆ, next fit
3. ์ ๊ธฐ์ ์ผ๋ก swap out ํ์. eviction ์๊ณ ๋ฆฌ์ฆ
4. inode read,write์ buffer ๋ถ๋ถ์ buffer cache๋ก ๊ต์ฒด
5. IO๋ฅผ ์ํ dedicated thread ๊ตฌํ...(์๋ชจ๋ฅด๊ฒ ๋ค...)
6. using VM type(file cache) -> using mmap area..
์ด๋ฏธ ์ lab๋ค์ ํตํด synch ์ ์ค๊ณ๋์์ด์ ํฐ ์ด๋ ค์ ์์ด ํต๊ณผ ๋ ์ ์์๋ค. inode๋ฅผ ํตํด thread๋ง๋ค ํ์ผ์ ์ ๊ทผํ ์ ์์ผ๋ ์ด ๋ถ๋ถ์ ๋ฌ๊ณ ... ๋ค๋ง file write ์์ extensed ๋์ง ์๋ ๋ถ๋ถ์ ๋ํด์๋ ๋ชจ๋ thread๊ฐ ์์ ๊ฐ๋ฅํด์ผ ํ๋ค๊ณ ์ ํ์์์ง๋ง, file write์ ๋ํ filesys lock๋ฅผ ๋ง์๋๊ณ ๋ test case๋ฅผ ๋ชจ๋ ํต๊ณผํ์ฌ ์ผ๋จ ๋์ด๊ฐ๋ค...
์์ ์ ์ ๊น ์ ์ฐํ๊ณผ ์์ ์ ๋ค์ ๋, ๊ฐ๋ฐ์๋ ๋จธ๋ฆฌ ์์ ์๋ฒฝํ ์ดํด๋ฅผ ํ์ง ์์ผ๋ฉด ์ฝ๋ฉ์ ์์ํ์ง ๋ง๋ผ๋ผ๋ ๋ง์์ ๊ต์๋์ด ํด์ฃผ์ จ๋๋ฐ, ๋น์๋ ๊ทธ๋ ๊ณ Pintos ์ด๋ฐ๋ ๊ทธ๋ ๊ณ ์ผ๋จ ํด๋ณด๋ฉด์ ๊ตฌํํ๋๊ฒ ๋ง์ง ์๋? ๋ผ๋ ์๊ฐ์ ํ์๋ค. Pintos ํ๋ฐ์ผ๋ก ๊ฐ ์๋ก ๊ตฌํ ๋์ด๋๊ฐ ๋์์ง๊ณ ๋จธ๋ฆฌ์์ผ๋ก๋ ๊ธฐ์ตํด์ผ ๋ ๊ฒ ๋ง์์ง ์๋ก ๊ทธ ๋ ๊ต์๋ ๋ง์์ด ์ณ์์์ ๊นจ๋ซ๊ณ ๋ด ๋ฐฉ์๋ ๋ฐ๋์ด๊ฐ๋ค... ๋ฌด์์ ์ปดํจํฐ ์์ ์๋๋ค๊ณ ์ฝ๋ฉ์ด ์ง์ฌ์ง๋ ๊ฒ์ด ์๋๋ผ... ๋ฐฅ๋จน๋ค๊ฐ, ์ด๋ํ๋ค๊ฐ, ์๊ธฐ ์ ์ ๋์ ์๋ค๊ฐ, ์ ์ด๋ ๊ฒ ํ๋ฉด ๋๊ฒ ๊ตฌ๋ ๊นจ๋ซ๊ณ ๋ ธํธ์ ์ ๋ฆฌ๋ฅผ ๋์ถฉ์ด๋ผ๋ ํด๋๊ณ ๊ตฌํํ๊ฒ ๋์๋ค. ๋ฌผ๋ก ๊ทธ๋ ๊ฒ ์ง ์ฝ๋๊ฐ ๋ง๋๋ค๋ ๋ณด์ฅ์ ์์ง๋ง...
๋ ํ๋ ์ฑ์ฅํ ์ ์ ์ง์ค๋ ฅ์ด๋ค. ํ๋ฐ์ผ๋ก ๊ฐ ์๋ก ์ฝ๋ฉ์ ๋ชฐ์ ํ ์ ์๋ ์๊ฐ์ด ๊ธธ์ด์ง์ ๋๋ ์ ์์๋ค. ์ ๋ ๋ผ๋ ๋ ์ฝ๋ฉ์ด ํ์ฐฝ ์ ๋๋ฉด ์ผ๋ฅธ ๋๋ด๊ณ ๋จน์ด์ผ๊ฒ ๋ค ํด๋๊ณ ์ ์ ์ฐจ๋ ค๋ณด๋ฉด 10์ ๋ฐ์ด์๋ค...
์๋ฌดํผ Pintos๋ฅผ ํตํด ์ปดํจํฐ์ ๋ํด์ ์ดํดํ ์ ์์๊ณ ๋ฐ๋จ์ ๋ฌด์จ์ผ์ด ์ผ์ด๋๋์ง ์ถ์ํ๋ผ๋ ๊ฐ๋ ์ ํตํด ์ดํดํ ์ ์์๋ค. ๊ทธ ๋์ ๋ฉ๋ฆฌํ๋ ์ ๊ณต์ฑ ์ ๋ง์ด ์ฝ์ด์ผ ๋๊ฒ ๋ค๋ผ๋ ์๊ฐ๋ ํ๊ฒ ๋์๋ค. ์์ผ๋ก ๊ฐ๋ฐ์๋ก ์ด๋ฉด์ ์ด๋ป๊ฒ OS์ง์์ด ์ฌ์ฉ๋ ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ ์ด๋ "๋ชจ๋ฅด๋ฉด ์ฑ ๋ณด๊ณ ๊ฒ์ํ๊ณ ์ฝ๋๋ณด๊ณ ๋ฐฐ์ด๋ค!"๋ผ๋ ๋ง์ธ๋ ์ ๋๋ ๊ฐ์ง ์ ์๊ฒ ๋์๋ค.
Good bye Pintos!