๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] 11. File System Implementation

by nitronium102 2023. 1. 22.

[์ด๋ก ] Allocation of File Data in Disk

disk์— ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ sector(logical block)๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ €์žฅ

 

1) contiguous allocation

2) linked allocation

3) indexed allocation

 

1) Contiguous allocation

ํ•˜๋‚˜์˜ file์ด disk ์ƒ์— ์—ฐ์†ํ•ด์„œ ์ €์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•

* ์žฅ์ 

1) ๋น ๋ฅธ I/O

- HDD๋Š” disk head์˜ ์ด๋™ ์‹œ๊ฐ„์ด ๊ธด ํŽธ์ธ๋ฐ, ์—ฐ์† ํ• ๋‹น์„ ์“ฐ๋ฉด ํ•œ ๋ฒˆ์˜ seek/rotation์œผ๋กœ ๋งŽ์€ ์–‘์˜ data transfer ๊ฐ€๋Šฅ

- process์˜ swap area๋กœ๋„ ์“ฐ์ž„ (์ž„์‹œ ์ €์žฅ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต๊ฐ„ ํšจ์œจ์„ฑ๋ณด๋‹ค๋Š” ์†๋„ ํšจ์œจ์„ฑ์ด ์ข‹์Œ)

- real time file์šฉ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ (deadline O)

2) direct access (random access) <-> linked allocation์€ ๋ถˆ๊ฐ€๋Šฅ

- (start + index)๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์œ„์น˜์— ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

* ๋‹จ์ 

์ค‘๊ฐ„์— ๊ท ์ผํ•˜์ง€ ์•Š์€ ํฌ๊ธฐ์˜ hole์ด ์ƒ๊น€

1) external fragment ๋ฐœ์ƒ ๊ฐ€๋Šฅ

์—ฐ์† ํ• ๋‹น์„ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„์–ด์žˆ์Œ์—๋„ ํ™œ์šฉ๋  ์ˆ˜ ์—†๋Š” ์กฐ๊ฐ ๋ฐœ์ƒ

2) file grow๊ฐ€ ์–ด๋ ค์›€ -> ๋ฏธ๋ฆฌ ๋นˆ ๊ณต๊ฐ„์„ ํ™•๋ณดํ•ด๋†“๋Š” ๋ฐฉ๋ฒ• ๊ฐ€๋Šฅ

- ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ์ด์ƒ์€ ์ปค์ง€์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

- ํ• ๋‹น๋˜์—ˆ์ง€๋งŒ ๋‹น์žฅ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณต๊ฐ„(internal fragmentation) ๋ฐœ์ƒ

 

2) linked allocation

์—ฐ์†์ ์ด์ง€ ์•Š๊ณ  ๋นˆ ์œ„์น˜๋ฉด ์–ด๋””๋“ ์ง€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ (start, end๋งŒ ๊ธฐ๋ก)
-1์ด ๋‚˜์˜ค๋ฉด ํƒ์ƒ‰ ์ข…๋ฃŒ

* ์žฅ์ 

external fragment ๋ฐœ์ƒ X

 

* ๋‹จ์ 

- no random access : ์ˆœ์ฐจ ์ ‘๊ทผ์— ์˜ํ•œ ์‹œ๊ฐ„ ๋ฐœ์ƒ

- low reliability : ์ค‘๊ฐ„์— bad sector๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํฌ์ธํ„ฐ๊ฐ€ ์œ ์‹ค๋˜์–ด ๋’ท๋ถ€๋ถ„์„ ์žƒ์„ ์ˆ˜ ์žˆ๋‹ค

- pointer ๊ณต๊ฐ„ ์ฐจ์ง€(bad ๊ณต๊ฐ„ ํšจ์œจ์„ฑ) : ํ•œ ์„นํ„ฐ์— ์ €์žฅ๋  ๋ฐ์ดํ„ฐ๊ฐ€ pointer๋กœ ์ธํ•œ ์šฉ๋Ÿ‰ ๋ถ€์กฑ์œผ๋กœ ๋‘ ์„นํ„ฐ์— ์ €์žฅ๋˜๋Š” ๋“ฑ์˜ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค

 

* FAT(File Allocation table)

ํฌ์ธํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์œ„์น˜์— ๋ณด๊ด€ํ•˜์—ฌ reliability์™€ ๊ณต๊ฐ„ ํšจ์œจ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ

 

3) indexed allocation

directory์— index block ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜๊ณ , ํ•ด๋‹น block์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜ ์ •๋ณด๋“ค์„ ์ €์žฅํ•ด๋‘”๋‹ค

* ์žฅ์ 

- direct access ๊ฐ€๋Šฅ

- no external fragmentation

 

* ๋‹จ์ 

- small file์˜ ๊ฒฝ์šฐ ๊ณต๊ฐ„ ๋‚ญ๋น„ (์‹ค์ œ๋กœ ๋งŽ์€ file๋“ค์ด small)

- too large file์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ block์œผ๋กœ ๋ชจ๋“  index๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค

 

* ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

1) linked scheme

index block์— ์‹ค์ œ ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ ์ ๋‹ค๊ฐ€ ๋งˆ์ง€๋ง‰์— ๋‹ค์Œ index block์˜ ์œ„์น˜๋ฅผ ํ‘œ์‹œ

2) multi-level index

index block table๊ณผ index block์œผ๋กœ ๊ตฌ์„ฑ (2๋‹จ ๊ตฌ์„ฑ) -> ๋ฌด์กฐ๊ฑด 2๊ฐœ ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ index๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์žˆ์Œ

 

[์‹ค์ œ] UNIX File System์˜ ๊ตฌ์กฐ

ํ•˜๋‚˜์˜ partition์— file system์„ ์„ค์น˜ํ•ด๋†“์Œ

1) Boot Block

๋ถ€ํŒ… ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋ก์œผ๋กœ, 0๋ฒˆ ๋ธ”๋ก์— ์กด์žฌํ•œ๋‹ค. (bootstrap loader)

2) Super Block

ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๊ด€ํ•œ ์ด์ฒด์ ์ธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค

- ๋ธ”๋ก์˜ ์‚ฌ์šฉ ์—ฌ๋ถ€

- Inode list์˜ ๋ฒ”์œ„

- ์‹ค์ œ data block์˜ ์œ„์น˜

3) Inode

- ์‹ค์ œ file system์—์„œ๋Š” directory๊ฐ€ metadata๋ฅผ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋Š” ์•Š๋‹ค 

- UNIX ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ [ํŒŒ์ผ ์ด๋ฆ„์„ ์ œ์™ธํ•œ ๋ชจ๋“  metadata]๋Š” Inode list์— ์ €์žฅ๋œ๋‹ค. (1 index node per file)

- directory๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„๊ณผ inode์˜ ๋ฒˆํ˜ธ๋ฅผ ์ €์žฅํ•œ๋‹ค

 

* ํŒŒ์ผ ์œ„์น˜ ์ €์žฅ ๋ฐฉ๋ฒ•(Indexed allocation ์‚ฌ์šฉ)

- inode์˜ ํฌ๊ธฐ๋Š” ๊ณ ์ •๋˜์–ด ์žˆ์Œ > ์œ„์น˜ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚˜๋Š” ํฌ์ธํ„ฐ ๊ฐœ์ˆ˜ ์œ ํ•œ

 

1) ์ž‘์€ ํŒŒ์ผ

- direct blocks : ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์€ ํŒŒ์ผ์€ ์ด๊ฒƒ๋งŒ์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Œ

2) ํฐ ํŒŒ์ผ

- single indirect : pointer๋“ค์ด ๋“ค์–ด์žˆ๋Š” index block์œผ๋กœ ์ด์–ด์ง

- double indirect : 2๋‹จ๊ณ„ index ๊ตฌ์กฐ

- triple indirect : 3๋‹จ๊ณ„ index ๊ตฌ์กฐ

4) Data Block

- file์˜ ์‹ค์ œ ๋‚ด์šฉ์„ ์ €์žฅ 

 

FAT File System

MS์—์„œ ์ฒ˜์Œ ๋งŒ๋“  file system. ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ

1) Boot Block

๋ถ€ํŒ… ์‹œ ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋ก์œผ๋กœ, 0๋ฒˆ ๋ธ”๋ก์— ์กด์žฌํ•œ๋‹ค. (bootstrap loader)

2) FAT

ํ•œ ๋ธ”๋ก์˜ ๋‹ค์Œ ๋ธ”๋ก์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅ

- ํŒŒ์ผ์˜ metadata์˜ ์ผ๋ถ€(์œ„์น˜ ์ •๋ณด)๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์Œ / ๋‚˜๋จธ์ง€๋Š” directory (file ์ด๋ฆ„, ์†Œ์œ ์ฃผ, ์ฒซ ์‹œ์ž‘ ๋ธ”๋ก ์œ„์น˜ ๋“ฑ)

- linked allocation์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

-- 1) reliability : {index, number} = {ํ˜„ ๋ธ”๋ก ์œ„์น˜, index ๋ธ”๋ก์˜ ๋‹ค์Œ ๋ธ”๋ก ์œ„์น˜}

--- ํŒŒ์ผ ์œ„์น˜๋ฅผ ๋‹ด๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต 2๊ฐœ์˜ copy๋ฅผ ๋‘  -> higher reliability

-- 2) direct access : FAT์€ ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์žˆ์Œ & ์ค‘๊ฐ„ ์œ„์น˜๋„ ๋ฐ”๋กœ ํŒŒ์•… ๊ฐ€๋Šฅ

-- 3) pointer ๊ณต๊ฐ„์„ ๋ถ„๋ฆฌํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— sector์˜ ๋ชจ๋“  ์ €์žฅ ๊ณต๊ฐ„์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ 

3) Root directory

4) Data block

 

Free Space Management

๋น„์–ด์žˆ๋Š” ๋ธ”๋ก๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•

1) Bit map / Bit vector

๊ฐ๊ฐ์˜ ๋ธ”๋ก์— 0 / 1์„ ํ‘œ์‹œํ•˜์—ฌ ํ• ๋‹น ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จ

- bit map : ๋ถ€๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•จ

- ์—ฐ์†์ ์ธ n๊ฐœ์˜ free block์„ ์ฐพ๋Š”๋ฐ ํšจ๊ณผ์ (์—ฐ์† ํ• ๋‹น์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋”๋ผ๋„ disk header์˜ ์ด๋™๋Ÿ‰์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ์—ฐ์†ํ•˜๊ฒŒ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ธฐ ๋•Œ๋ฌธ)

 

2) Linked List

- ๋ชจ๋“  free block๋“ค์„ ๋งํฌ๋กœ ์—ฐ๊ฒฐํ•ด๋‘”๋‹ค (์‹œ์ž‘ ์œ„์น˜)

- ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„ ๋‚ญ๋น„๊ฐ€ ์—†์ง€๋งŒ ์—ฐ์†์ ์ธ ๊ฐ€์šฉ ๊ณต๊ฐ„์„ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค(์‹ค์ œ ์‚ฌ์šฉ ๋‚ฎ์Œ)

 

3) Grouping

- linked list ๋ฐฉ๋ฒ•์˜ ๋ณ€ํ˜•

- ๋นˆ ๋ธ”๋ก์€ linked list๋ณด๋‹ค ์ž˜ ์ฐพ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์—ฐ์†์ ์ธ ๋นˆ ๋ธ”๋ก์„ ์ฐพ๊ธฐ๋Š” ์–ด๋ ต๋‹ค

4) Counting

์—ฐ์†์ ์ธ ๋นˆ ๋ธ”๋ก๋“ค์„ ์ฐพ๊ธฐ ์œ„ํ•ด {์ฒซ ๋ฒˆ์งธ ๋นˆ ๋ธ”๋ก์˜ ์œ„์น˜, # ์—ฐ์†๋œ ๋นˆ ๋ธ”๋ก}์„ ์ €์žฅ

 

Directory Implementation

1) Linear List

<file name, file metadata>์˜ lisf

(+) ํฌ๊ธฐ๊ฐ€ ๊ณ ์ • / ๊ตฌํ˜„ ๊ฐ„๋‹จ

(-) directory ๋‚ด์˜ ํŒŒ์ผ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” linear search๊ฐ€ ํ•„์š”(time-consuming)

 

2) Hash Table

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ search (no search time)

(-) hash ํ•จ์ˆ˜ ํŠน์„ฑ ์ƒ collision ๋ฐœ์ƒ ๊ฐ€๋Šฅ

 

3) File์˜ metadata ๋ณด๊ด€ ์œ„์น˜

1) directory ๋‚ด์— ์ง์ ‘ ๋ณด๊ด€

2) directory์— ํฌ์ธํ„ฐ๋ฅผ ๋‘๊ณ  ๋‹ค๋ฅธ ๊ณณ์— metadata๋ฅผ ๋ณด๊ด€ ex) Inode, FAT

 

4) Long file name์˜ ์ง€์›

<file name, file metadata>์—์„œ ๊ฐ entry๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณ ์ •๋œ ํฌ๊ธฐ

- file name์„ ์ œํ•œํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ 

- file name์ด entry ๊ธธ์ด๋ณด๋‹ค ๊ธธ์–ด์ง€๋Š” ๊ฒฝ์šฐ : entry ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— [์ด๋ฆ„์˜ ๋’ท๋ถ€๋ถ„์ด ์œ„์น˜ํ•œ ๊ณณ์˜ ํฌ์ธํ„ฐ]์˜ ์œ„์น˜๋ฅผ ์ €์žฅ

aaabb -> aaa / bb์˜ ๋งˆ์ง€๋ง‰ ํฌ์ธํ„ฐ ์ €์žฅ

 

VFS and NFS

1) VFS (Virtual File System)

์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด ๋™์ผํ•œ system call์„ ์ œ๊ณตํ•˜๋Š” system. ์ฃผ๋กœ ๊ฐœ๋ณ„ ํŒŒ์ผ ์‹œ์Šคํ…œ ์œ— ๊ณ„์ธต์— ์กด์žฌ

์„œ๋กœ ๋‹ค๋ฅธ file system์— ๋Œ€ํ•ด [๋™์ผํ•œ system call interface(API)]๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” OS์˜ layer

2) NFS (Network File System)

- ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ์˜ ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ผ ๊ณต์œ  ๋ฐฉ๋ฒ• 

- ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์›๊ฒฉ์œผ๋กœ ํŒŒ์ผ ์ ‘๊ทผ ์š”์ฒญ -> local ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค

- client์™€ server ๋ชจ๋‘์—๊ฒŒ NFS ๋ชจ๋“ˆ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค

 

Page Cache and Buffer Cache

1) Page Cache(Page 4KB)

page๊ฐ€ swap area์— ๋‚ด๋ ค๊ฐ€ ์žˆ๋Š”์ง€ cache์— ์˜ฌ๋ผ์™€ ์žˆ๋Š”์ง€ ํŒ๋ณ„

- virtual memory์˜ paging system์—์„œ ์‚ฌ์šฉํ•˜๋Š” page frame -> caching์˜ ๊ด€์ ์—์„œ ์„ค๋ช…ํ•˜๋Š” ์šฉ์–ด

- swap area backing store๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— caching์œผ๋กœ ์„ค๋ช…

- memory-mapped I/O๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ file I/O์—์„œ๋„ page cache ์‚ฌ์šฉ

- page hit์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— replace algo ๋Œ€์‹  clock algo ์‚ฌ์šฉ

2) Buffer Cache(sector - 512B)

file data๊ฐ€ storage์— ์žˆ๋Š”์ง€ buffer cache์— ์žˆ๋Š”์ง€ ํŒ๋ณ„

- file์˜ data๋ฅผ ์š”์ฒญํ–ˆ์„ ๋•Œ, ์‚ฌ์šฉ์ž ์ „๋‹ฌ์—์„œ ๋๋‚˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ OS๊ฐ€ ์ž์‹ ์˜ ์˜์—ญ์— data๋ฅผ ์ €์žฅ

- file์˜ ์œ„์น˜์™€ ์ƒ๊ด€์—†์ด file ์ ‘๊ทผ์„ ์œ„ํ•ด์„œ๋Š” system call์„ ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒŒ์ผ ์š”์ฒญ ์‹œ๊ฐ„์„ ์•Œ ์ˆ˜ ์žˆ์Œ

-> replacement algorithm ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

3) Unified Buffer Cache(Page - 4KB)

page cache + buffer cache

- buffer cache์™€ page cache ๊ณต๊ฐ„์„ ๋”ฐ๋กœ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ํ•ฉ์ณ๋†“์€ ํ›„, ํ•„์š”์— ๋”ฐ๋ผ page ๋‹จ์œ„๋กœ ํ• ๋‹น

(์ขŒ) buffer์— ์žˆ๋Š” data๋ฅผ page cache์— copyํ•˜๋Š” overhead ๋ฐœ์ƒ

 

4) Memory-Mapped I/O

system call ์—†์ด memory์— read/write

- [์›๋ณธ] file open ํ›„ read/write system call

1) system call์„ ํ†ตํ•ด disk์— ์žˆ๋Š” file์„ buffer cache๋กœ ์ฝ์–ด์˜ด

2) file์˜ ์ผ๋ถ€๋ฅผ virtual memory์— mapping

3) ํ•ด๋‹น ๋‚ด์šฉ์„ page cache๋กœ copy : 

> ๋งคํ•‘ํ•œ ์˜์—ญ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์—ฐ์‚ฐ = ํŒŒ์ผ์˜ ์ž…์ถœ๋ ฅ ์ˆ˜ํ–‰๊ณผ ๋™์ผ

 

* ๋งŒ์•ฝ mapping๋งŒ ํ•ด๋†“๊ณ  page cache์— copy ์•ˆ ํ•˜๋ฉด page fault ๋ฐœ์ƒ -> OS๊ฐ€ handler๋ฅผ ํ†ตํ•ด disk๋กœ๋ถ€ํ„ฐ file ๊ฐ€์ ธ์˜ด

* I/O๋Š” ๋ฌด์กฐ๊ฑด system call ํ•„์š”! but mmp์˜ ๊ฒฝ์šฐ๋Š” ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์žˆ๋‹ค๋ฉด system call ํ•„์š” X

 

ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰

1) ์‹คํ–‰ ํŒŒ์ผ

* ํ”„๋กœ๊ทธ๋žจ์€ file system์— ์‹คํ–‰ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ

> ์‹คํ–‰ ์‹œ process๋กœ ๋ณ€ํ™”

> ๋…์ž์ ์ธ virtual memory(code, data, stack) ํ• ๋‹น

> address translation์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ Physical memory์— ์˜ฌ๋ฆผ

> Physical memory์˜ ๊ณต๊ฐ„ ๋ถ€์กฑ์œผ๋กœ swap area๋กœ ์ซ“๊ฒจ๋‚˜๊ธฐ๋„ ํ•จ

 

* code ๋ถ€๋ถ„์€ read-only๋กœ ์ด๋ฏธ file system์— ์‹คํ–‰ file ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค

> ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ„ ํ›„ ์ซ“๊ฒจ๋‚  ๋•Œ swap area๋กœ ๋‚ด๋ ค๊ฐ€์ง€ ์•Š๋Š”๋‹ค

 

* ์‹คํ–‰ํŒŒ์ผ์˜ code๋ฅผ ์‹คํ–‰ํ•  ๋•Œ loader๋ผ๋Š” software๊ฐ€ mmp๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

> file์„ ํ”„๋กœ๊ทธ๋žจ์˜ virtual memory (์ฃผ์†Œ) ์˜์—ญ์— mapping ํ•ด์„œ ์“ฐ๋Š” ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ

> ํ”„๋กœ๊ทธ๋žจ์ด ํŠน์ • ์ฝ”๋“œ์— ์ ‘๊ทผํ•˜๋Š”๋ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์•ˆ ์˜ฌ๋ผ์™€ ์žˆ๋Š” ๊ฒฝ์šฐ swap area๊ฐ€ ์•„๋‹Œ file system์—์„œ ๊ฐ€์ ธ์™€์•ผ ํ•จ

 

2) ๋ฐ์ดํ„ฐ ํŒŒ์ผ

Memory-mapped I/O

page cache(buffer cache)๋ฅผ ๋…ผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ mapping ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— 
๋‹ค๋ฅธ process๊ฐ€ ์ด๋ฅผ shareํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๊ด€์„ฑ์ด ๊นจ์ ธ ๋ณ€ํ™”๊ฐ€ ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ

* [page fault ์‹œ] OS์—๊ฒŒ data file์˜ ์ผ๋ถ€๋ฅผ process์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์— mapping ํ•ด๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ•ด์•ผ ํ•จ

- ํ•œ ๋ฒˆ ์˜ฌ๋ ค๋‘๋ฉด OS์˜ ๋„์›€ ์—†์ด physical memory๋กœ mapping

- ์ซ“๊ฒจ๋‚˜๋Š” ๊ฒฝ์šฐ mmap file์ด๊ธฐ ๋•Œ๋ฌธ์— swap area๊ฐ€ ์•„๋‹Œ file system์— ์ˆ˜์ •๋œ ๋‚ด์šฉ ๋ฐ˜์˜ ํ•ด์•ผ ํ•จ

 

* ๋‹ค๋ฅธ process๊ฐ€ ๊ฐ™์€ data file์„ mmapํ•œ ๊ฒฝ์šฐ์—๋Š” physical memory์—์„œ shareํ•œ๋‹ค.

 

Read() system call

copyํ•ด์„œ ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๊ด€์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค + OS์˜ ์ค‘์žฌ

* OS๋Š” ์ž์‹ ์˜ buffer cache์—์„œ ํ•ด๋‹น ๋‚ด์šฉ์„ ์ฝ์–ด์˜ด

> [unified buffer cache] physical memory์˜ page cache(buffer cache)๋ฅผ copyํ•ด์„œ process์—๊ฒŒ ์ „๋‹ฌ

 

๋Œ“๊ธ€