운영체제

CH11-2 I/O Management and Disk Scheduling

meteorqz6 2025. 6. 15. 01:15

RAID(Redundant Array of Independent Disks)

단일 λ””μŠ€ν¬μ˜ ν•œκ³„λ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄μ„œ μ—¬λŸ¬ 개의 독립적인 λ””μŠ€ν¬λ“€μ„ λ¬Άμ–΄ ν•˜λ‚˜μ˜ 큰 μ €μž₯ μž₯치처럼 μ‚¬μš©

예λ₯Ό λ“€μ–΄μ„œ, ν•˜λ‚˜μ˜ λ””μŠ€ν¬μ— μ €μž₯λ˜λŠ” 양을 λ””μŠ€ν¬ 4κ°œμ— λ‚˜λˆ„λŠ” 것이기 λ•Œλ¬Έμ— λ””μŠ€ν¬μ˜ 큐의 길이가 1/4이 λœλ‹€. μ†λ„λŠ” 4λ°° 빨라진닀.

 

RAID λͺ©μ 

1. λ””μŠ€ν¬ access μ‹œκ°„μ„ λΉ λ₯΄κ²Œ ν•˜λŠ” 것

2. recoveryκ°€ κ°€λŠ₯ν•œ λ””μŠ€ν¬ μ‹œμŠ€ν…œμ„ λ§Œλ“œλŠ” 것

 

RAID 0 (non-redundant)

ν•˜λ‚˜μ˜ 데이터λ₯Ό stripμ΄λΌλŠ” μž‘μ€ 쑰각으둜 λ‚˜λˆˆ λ’€, μ—¬λŸ¬ 개의 ν•˜λ“œλ””μŠ€ν¬μ— μˆœμ„œλŒ€λ‘œ λΆ„μ‚°ν•˜μ—¬ μ €μž₯ν•œλ‹€. strip 0, strip 1, strip 2, strip 3이 각각 λ‹€λ₯Έ 4개의 λ””μŠ€ν¬μ— λ‚˜λ‰˜μ–΄ μ €μž₯λ˜λŠ” 것을 λ³Ό 수 μžˆλ‹€. μ—¬λŸ¬ λ””μŠ€ν¬μ—μ„œ λ™μ‹œμ— 데이터λ₯Ό 읽고 μ“Έ 수 μžˆμ–΄μ„œ μž…μΆœλ ₯ μ„±λŠ₯이 맀우 ν–₯μƒλœλ‹€.

 

λ‹¨μ μœΌλ‘œλŠ” 데이터λ₯Ό λ°±μ—…ν•˜λŠ” κΈ°λŠ₯이 μ „ν˜€ μ—†μ–΄μ„œ μ€‘μš”ν•œ 데이터λ₯Ό μ €μž₯ν•˜κΈ°μ—λŠ” 맀우 μœ„ν—˜ν•œ 방식이닀.

 

RAID 1 (mirrored)

- 데이터λ₯Ό 읽을 λ•ŒλŠ” νŒŒλž€μƒ‰ λ””μŠ€ν¬μ—μ„œ 읽으면 λœλ‹€.

- 데이터λ₯Ό μ“Έ λ•ŒλŠ” νŒŒλž€μƒ‰, νšŒμƒ‰μ— λ‘˜ λ‹€ 써야 ν•œλ‹€.

 

νšŒμƒ‰ λ””μŠ€ν¬

- νŒŒλž€μƒ‰ λ””μŠ€ν¬μ˜ 데이터λ₯Ό κ·ΈλŒ€λ‘œ λ³΅μ œν•˜λŠ” λ””μŠ€ν¬

 

νŒŒλž€μƒ‰ λ””μŠ€ν¬κ°€ κ³ μž₯ λ‚˜λ”λΌλ„ νšŒμƒ‰ λ””μŠ€ν¬μ— 원본 데이터가 κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆκΈ° λ•Œλ¬Έμ— 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ 보쑴할 수 μžˆλ‹€. 데이터 볡ꡬ가 맀우 μš©μ΄ν•˜λ‹€.

 

RAID 2 (redundancy through Hamming code)

 

νŒŒλž€μƒ‰ λ””μŠ€ν¬: 데이터 λ””μŠ€ν¬

원본 데이터λ₯Ό λΉ„νŠΈ λ‹¨μœ„λ‘œ μž˜λΌμ„œ 각각의 λ””μŠ€ν¬μ— λ‚˜λˆ„μ–΄ μ €μž₯ν•œλ‹€.

 

νšŒμƒ‰ λ””μŠ€ν¬: 해밍 μ½”λ“œ λ””μŠ€ν¬

 

전채 7개의 λΉ„νŠΈ μœ„μΉ˜ 쀑 2^n μœ„μΉ˜μ—λŠ” 체크 λΉ„νŠΈ(c0, c1, c2)λ₯Ό λ°°μΉ˜ν•œλ‹€.

λ‚˜λ¨Έμ§€ μœ„μΉ˜(3, 5, 6, 7)μ—λŠ” 데이터 λΉ„νŠΈ(d0, d1, d2, d3)λ₯Ό λ°°μΉ˜ν•œλ‹€.

 

c0은 데이터 λΉ„νŠΈμ˜ μœ„μΉ˜ 번호λ₯Ό μ΄μ§„μˆ˜λ‘œ ν‘œν˜„ν–ˆμ„ λ•Œ κ°€μž₯ 였λ₯Έμͺ½ λΉ„νŠΈ()κ°€ 1인 λͺ¨λ“  데이터 λΉ„νŠΈλ₯Ό XOR

c1은 데이터 λΉ„νŠΈμ˜ μœ„μΉ˜ 번호λ₯Ό μ΄μ§„μˆ˜λ‘œ ν‘œν˜„ν–ˆμ„ λ•Œ 쀑간 λΉ„νŠΈ()κ°€ 1인 λͺ¨λ“  데이터 λΉ„νŠΈλ₯Ό XOR

c2λŠ” 데이터 λΉ„νŠΈμ˜ μœ„μΉ˜ 번호λ₯Ό μ΄μ§„μˆ˜λ‘œ ν‘œν˜„ν–ˆμ„ λ•Œ κ°€μž₯ μ™Όμͺ½ λΉ„νŠΈ()κ°€ 1인 λͺ¨λ“  데이터 λΉ„νŠΈλ₯Ό XOR

 

 

RAID 3 (bit-interleaved parity)

RAID 2의 μ˜€λ²„ν—€λ“œκ°€ 큰 단점을 ν•΄κ²°ν•˜κΈ° μœ„ν•œ 방식이 RAID 3이닀.

데이터λ₯Ό λΉ„νŠΈ λ‹¨μœ„λ‘œ μ—¬λŸ¬ λ””μŠ€ν¬μ— λ‚˜λˆ„μ–΄ μ €μž₯ν•˜κ³  데이터 볡ꡬλ₯Ό μœ„ν•΄μ„œ ν•˜λ‚˜μ˜ νŒ¨λ¦¬ν‹° λ””μŠ€ν¬λ₯Ό μ‚¬μš©ν•˜λŠ” 방식

 

짝수/ν™€μˆ˜ νŒ¨λ¦¬ν‹° κ°œλ…μ„ μ΄μš©ν•œλ‹€.

 

[짝수 νŒ¨λ¦¬ν‹°λ₯Ό μ‚¬μš©ν•  λ•Œ]

4개의 데이터 λΉ„νŠΈκ°€ 1, 1, 1, 1일 κ²½μš°μ— νŒ¨λ¦¬ν‹° λ””μŠ€ν¬μ—λŠ” 0을 μ €μž₯

 

[ν™€μˆ˜ νŒ¨λ¦¬ν‹°λ₯Ό μ‚¬μš©ν•  λ•Œ]

4개의 데이터 λΉ„νŠΈκ°€ 1, 1, 1, 1일 κ²½μš°μ— νŒ¨λ¦¬ν‹° λ””μŠ€ν¬μ—λŠ” 1을 μ €μž₯

 

RAID 2, RAID 3의 κ°€μž₯ 큰 ν•œκ³„λŠ” 데이터λ₯Ό λΉ„νŠΈ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ €μž₯ν•œλ‹€λŠ” 점이닀.

λ°μ΄ν„°μ˜ ν•œ 블둝을 읽기 μœ„ν•΄μ„œ λͺ¨λ“  데이터 λ””μŠ€ν¬μ— λ™μ‹œμ— μ ‘κ·Όν•˜μ—¬ 각 λΉ„νŠΈλ₯Ό μ‘°ν•©ν•΄μ•Ό ν•œλ‹€. 즉, λ””μŠ€ν¬ 4개λ₯Ό 써도 속도가 4λ°°κ°€ λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ λ°œμƒν•œλ‹€.

 

RAID 4 (block-level parity)

RAID 4λŠ” 데이터λ₯Ό λΉ„νŠΈκ°€ μ•„λ‹Œ 블둝 λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ μ €μž₯ν•œλ‹€.

데이터λ₯Ό 읽을 λ•Œ, 블둝이 μ €μž₯된 λ””μŠ€ν¬ ν•˜λ‚˜μ—λ§Œ μ ‘κ·Όν•˜λ©΄ λΌμ„œ λ””μŠ€ν¬ 개수만큼의 읽기 μ„±λŠ₯ ν–₯상을 κΈ°λŒ€ν•  수 μžˆλ‹€.

 

데이터 μ“°κΈ° κ³Όμ • (write) 

- 데이터 λ””μŠ€ν¬: μ‹€μ œ 데이터 블둝을 μƒˆλ‘œ μ“΄λ‹€.

- νŒ¨λ¦¬ν‹° λ””μŠ€ν¬: λ³€κ²½λœ 데이터λ₯Ό 기반으둜 μƒˆλ‘œ κ³„μ‚°λœ νŒ¨λ¦¬ν‹° 값을 μ“΄λ‹€.

 

μ“°κΈ° μš”μ²­μ΄ ν­μ£Όν•˜λŠ” 상황을 κ°€μ •ν•˜λ©΄, 데이터 μ“°κΈ° μš”μ²­μ€ μ—¬λŸ¬ 데이터 λ””μŠ€ν¬λ‘œ λΆ„μ‚°λ˜μ§€λ§Œ, λͺ¨λ“  μ“°κΈ° μž‘μ—…μ— λŒ€ν•œ νŒ¨λ¦¬ν‹° μ—…λ°μ΄νŠΈλŠ” 단 ν•˜λ‚˜μ˜ 패리 λ””μŠ€ν¬λ‘œ μ§‘μ€‘λœλ‹€. λ”°λΌμ„œ, νŒ¨λ¦¬ν‹° λ””μŠ€ν¬κ°€ μ‹¬κ°ν•œ 병λͺ© ν˜„μƒμ„ μΌμœΌν‚¨λ‹€.

 

RAID 5 (block-level distributer parity)

RAID5λŠ” RAID 4의 νŒ¨λ¦¬ν‹° 병λͺ© 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν–ˆλ‹€. 

μ „μš© νŒ¨λ¦¬ν‹° λ””μŠ€ν¬λ₯Ό μ—†μ• κ³ , νŒ¨λ¦¬ν‹° 정보λ₯Ό λͺ¨λ“  λ””μŠ€ν¬μ— 골고루 λΆ„μ‚°μ‹œμΌœ μ €μž₯ν•˜λŠ” 방식

 

νŒ¨λ¦¬ν‹° 블둝이 μ—¬λŸ¬ λ””μŠ€ν¬μ— μ €μž₯λ˜λ―€λ‘œ, μ—¬λŸ¬ μ“°κΈ° μž‘μ—…μ΄ λ°œμƒν•˜λ”λΌλ„ νŒ¨λ¦¬ν‹° μ—…λ°μ΄νŠΈ 뢀담이 νŠΉμ • λ””μŠ€ν¬ ν•˜λ‚˜μ— μ§‘μ€‘λ˜μ§€ μ•Šκ³  μ—¬λŸ¬ λ””μŠ€ν¬λ‘œ λΆ„μ‚°λœλ‹€.

 

Disk Cache

: λ””μŠ€ν¬ sector의 데이터λ₯Ό 메인 λ©”λͺ¨λ¦¬μ— μž„μ‹œλ‘œ μ €μž₯ν•˜λŠ” 버퍼

자주 μ‚¬μš©λ˜λŠ” 데이터λ₯Ό λ©”λͺ¨λ¦¬μ— μΊμ‹±ν•¨μœΌλ‘œμ¨ 느린 λ””μŠ€ν¬ μ ‘κ·Ό 없이도 λΉ λ₯΄κ²Œ 데이터에 μ ‘κ·Όν•  수 있게 ν•œλ‹€.

 

I/O μš”μ²­ λ°œμƒ μ‹œ, λ¨Όμ € λ””μŠ€ν¬ μΊμ‹œμ— ν•΄λ‹Ή sectorκ°€ μžˆλŠ”μ§€ 확인

μžˆλ‹€λ©΄ μΊμ‹œμ—μ„œ λ°”λ‘œ 데이터λ₯Ό λ°˜ν™˜ (λ””μŠ€ν¬ μ ‘κ·Ό λΆˆν•„μš”)

μ—†λ‹€λ©΄ λ””μŠ€ν¬μ—μ„œ sectorλ₯Ό μ½μ–΄μ˜€κ³  μΊμ‹œμ— μ €μž₯ν•œ 후에 응닡

 

λ””μŠ€ν¬ μΊμ‹œκ°€ 꽉 μ°¬ μƒνƒœμ—μ„œ μƒˆλ‘œμš΄ 블둝을 가져와야 ν•  경우 기쑴의 블둝 쀑 ν•˜λ‚˜λ₯Ό 버렀야 ν•œλ‹€.

μ΄λ•Œ μ–΄λ–€ 블둝을 버릴지 κ²°μ •ν•˜λŠ” κ·œμΉ™ 2가지에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄μž.

 

1) Least Recently Used

κ°€μž₯ 였래 전에 μ‚¬μš©λœ 데이터λ₯Ό μ œκ±°ν•˜λŠ” 방식

졜근 μ ‘κ·Όλœ 블둝은 μŠ€νƒμ˜ μœ„μͺ½μ— μœ„μΉ˜μ‹œν‚€κ³  κ°€μž₯ μ•„λž˜μ— μžˆλŠ” 블둝을 μ œκ±°ν•œλ‹€.

 

2) Least Frequently Used

μ ‘κ·Ό νšŸμˆ˜κ°€ κ°€μž₯ 적은 블둝을 μ œκ±°ν•˜λŠ” 방식

각 블둝에 μΉ΄μš΄ν„°λ₯Ό 두고 μ ‘κ·Ό μ‹œλ§ˆλ‹€ 값을 μ¦κ°€μ‹œν‚¨λ‹€.

 

λ””μŠ€ν¬ μΊμ‹œμ— λ„μ°©ν•œ 블둝은 counterκ°€ 1이라 μ•žμœΌλ‘œ μ‚¬μš©λ  수 μžˆλŠ”λ° counter 값이 μž‘μ•„μ„œ λ²„λ €μ§ˆ μˆ˜λ„ μžˆλ‹€λŠ” 문제점이 μžˆλ‹€.

 

Frequency-based Replacement

LRU, LFU 2κ°€μ§€ 방식을 μ„žμ€ 방식

New Section, Old Section 2개 μ„Ήμ…˜ λͺ¨λΈ

블둝이 μΊμ‹œμ— 올라였면 count = 1둜 μ΄ˆκΈ°ν™”λ˜κ³  New Section의 top μœ„μΉ˜μ— μ €μž₯λœλ‹€.

 

블둝 재참쑰 μ‹œ 처리 방식

- New Section에 μžˆμ„ λ•Œ: count 값은 μ¦κ°€ν•˜μ§€ μ•Šκ³  λΈ”λ‘μ˜ μœ„μΉ˜λ§Œ top으둜 이동

- Old Section에 μžˆμ„ λ•Œ: count 값을 +1 μ¦κ°€μ‹œν‚€κ³  λΈ”λ‘μ˜ μœ„μΉ˜λ₯Ό top으둜 이동

 

New Section에 μžˆλŠ” 블둝은 버리지 μ•ŠλŠ”λ‹€.

Old Section에 μžˆλŠ” 블둝 쀑에 countκ°€ κ°€μž₯ μž‘μ€ 블둝을 버린닀.

New Sectionμ—μ„œλ§Œ 자주 μ‚¬μš©λ˜λ˜ 블둝이 처음으둜 Old Section으둜 λ°€λ €λ‚˜λŠ” μˆœκ°„μ— countλŠ” 1이고 μ΄λ•Œ ꡐ체가 ν•„μš”ν•˜λ©΄ μ‹€μ œλ‘œλŠ” 맀우 자주 μ‚¬μš©ν•˜λŠ” 블둝이 λ°”λ‘œ λ²„λ €μ§€λŠ” λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆλ‹€.

 

New Section, Middle Section, Old Section 3개 μ„Ήμ…˜ λͺ¨λΈμ˜ λ„μž…

Middel Section에 μžˆμ„ λ•Œ μž¬μ°Έμ‘°κ°€ λ°œμƒν•˜λ©΄ count 값을 +1 μ¦κ°€μ‹œμΌœμ£Όκ³  λΈ”λ‘μ˜ μœ„μΉ˜λ₯Ό top으둜 이동

 

New Section, Middle Section에 μžˆλŠ” 블둝은 버리지 μ•ŠλŠ”λ‹€.

Old Section에 μžˆλŠ” 블둝 쀑에 countκ°€ κ°€μž₯ μž‘μ€ 블둝을 버린닀.