Skip to content

0x-Robert/Operating-System

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

13 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Operating-System

1. ์šด์˜์ฒด์ œ ์†Œ๊ฐœ

์šด์˜์ฒด์ œ๋ž€

  • ์šด์˜์ฒด์ œ = ์ž์›๊ด€๋ฆฌ์ž
  • ํ˜‘์˜ ์šด์˜์ฒด์ œ : ์ปค๋„
  • ๊ด‘์˜ ์šด์˜์ฒด์ œ : ์ปค๋„๋ฟ ์•„๋‹ˆ๋ผ ์ฃผ๋ณ€ ์‹œ์Šคํ…œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํฌํ•จ

์šด์˜์ฒด์ œ์˜ ๋ชฉ์ 

  • ์ž์›๊ด€๋ฆฌ์ž

์šด์˜์ฒด์ œ์˜ ๋ถ„๋ฅ˜

์‚ฌ์šฉ์ž์˜ ์ˆ˜

  • ๋‹จ์ผ ์‚ฌ์šฉ์ž - MS-DOS
  • ๋‹ค์ค‘ ์‚ฌ์šฉ์ž - UNIX,NT Server

๋™์‹œ์ž‘์—…๊ฐ€๋Šฅ ์—ฌ๋ถ€

์‹ค์‹œ๊ฐ„(realtime)

  • Realtime OS ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ์–ด๋– ํ•œ ์ผ์ด ๋ฐ˜๋“œ์‹œ ์ข…๋ฃŒ๋จ์ด ๋ณด์žฅ๋˜์–ด์•ผํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ OS
  • ์›์ž๋กœ/๊ณต์žฅ ์ œ์–ด, ๋ฏธ์‚ฌ์ผ ์ œ์–ด, ๋ฐ˜๋„์ฒด ์žฅ๋น„

์ฒ˜๋ฆฌ ๋ฐฉ์‹

์‹œ๋ถ„ํ• (time sharing)

  • ์ปดํ“จํ„ฐ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ์„ ์ผ์ •ํ•œ ์‹œ๊ฐ„๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•ด์„œ ์‚ฌ์šฉ
  • ์ผ๊ด„์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์— ๋น„ํ•ด ์งง์€ ์‘๋‹ต ์‹œ๊ฐ„์„ ๊ฐ€์ง
  • ์˜ˆ) Unix
  • interactiveํ•œ ๋ฐฉ์‹

์ผ๊ด„์ฒ˜๋ฆฌ(batch processing)

  • ์ž‘์—…์š”์ฒญ์˜ ์ผ์ •๋Ÿ‰์„ ๋ชจ์•„์„œ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ
  • ์ž‘์—…์ด ์ข…๋ฃŒ๋ ๋–„๊นŒ์ง€ ๋Œ€๊ธฐ
  • ์˜ˆ) ์ดˆ๊ธฐ Punch Card ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ

๋ช‡ ๊ฐ€์ง€ ์šฉ์–ด

  • Multitasking

  • Multiprogramming

  • Time sharing

  • Multiprocess

  • ๊ตฌ๋ถ„

    • ์œ„์˜ ์šฉ์–ด๋“ค์€ ์ปดํ“จํ„ฐ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.
    • Multiprogramming์€ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์Œ์„ ๊ฐ•์กฐ
    • Time Sharing์€ CPU์˜ ์‹œ๊ฐ„์„ ๋ถ„ํ• ํ•˜์—ฌ ๋‚˜๋ˆ„์–ด ์“ด๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ•์กฐ
    • Multiprocessor : ํ•˜๋‚˜์˜ ์ปดํ“จํ„ฐ์— CPU (processor)๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ๋ถ™์–ด ์žˆ์Œ์„ ์˜๋ฏธ

์šด์˜ ์ฒด์ œ์˜ ์˜ˆ

์œ ๋‹‰์Šค

  • ์ฝ”๋“œ์˜ ๋Œ€๋ถ€๋ถ„์„ C์–ธ์–ด๋กœ ์ž‘์„ฑ
  • ๋†’์€ ์ด์‹์„ฑ
  • ์ตœ์†Œํ•œ์˜ ์ปค๋„ ๊ตฌ์กฐ
  • ๋ณต์žกํ•œ ์‹œ์Šคํ…œ์— ๋งž๊ฒŒ ํ™•์žฅ ์šฉ์ด
  • ์†Œ์Šค ์ฝ”๋“œ ๊ณต๊ฐœ
  • ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์— ์šฉ์ด
  • ๋‹ค์–‘ํ•œ ๋ฒ„์ „
    • System V, FreeBSD, SunOS, Solaris
    • Linux

DOS

  • MS์‚ฌ์—์„œ 1981๋…„ IBM-PC๋ฅผ ์œ„ํ•ด ๊ฐœ๋ฐœ
  • ๋‹จ์ผ ์‚ฌ์šฉ์ž์šฉ ์šด์˜์ฒด์ œ, ๋ฉ”๋ชจ๋ฆฌ๊ด€๋ฆฌ ๋Šฅ๋ ฅ์˜ ํ•œ๊ณ„(์ฃผ ๊ธฐ์–ต์žฅ์น˜ : 640KB)

MS Windows

  • MS์‚ฌ์˜ ๋‹ค์ค‘ ์ž‘์—…์šฉ GUI ๊ธฐ๋ฐ˜ ์šด์˜์ฒด์ œ
  • Plug and Play, ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ ๊ฐ•ํ™”
  • DOS์šฉ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ˜ธํ™˜์„ฑ ์ œ๊ณต
  • ๋ถˆ์•ˆ์ •์„ฑ
  • ํ’๋ถ€ํ•œ ์ง€์› ์†Œํ”„ํŠธ์›จ์–ด

Handheld device๋ฅผ ์œ„ํ•œ OS

  • PalmOS, Pocket PC(WinCE), Tiny OS

Apple Mac

Mobile (ios, Android)

์šด์˜์ฒด์ œ์˜ ๊ตฌ์กฐ

CPU ์Šค์ผ€์ค„๋ง : ๋ˆ„๊ตฌํ•œํ…Œ CPU๋ฅผ ์ค„๊นŒ ?

ํŒŒ์ผ ๊ด€๋ฆฌ : ๋””์Šคํฌ์— ํŒŒ์ผ์„ ์–ด๋–ป๊ฒŒ ๋ณด๊ด€ํ•˜์ง€ ?

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ : ํ•œ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์ชผ๊ฐœ์–ด ์“ฐ์ง€?

์ž…์ถœ๋ ฅ ๊ด€๋ฆฌ : ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ž…์ถœ๋ ฅ์žฅ์น˜์™€ ์ปดํ“จํ„ฐ ๊ฐ„์— ์–ด๋–ป๊ฒŒ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ฒŒ ํ•˜์ง€ ?

ํ”„๋กœ์„ธ์Šค๊ด€๋ฆฌ : 1. ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ๊ณผ ์‚ญ์ œ, 2. ์ž์› ํ• ๋‹น ๋ฐ ๋ฐ˜ํ™˜, 3. ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ

๊ทธ ์™ธ

  • ๋ณดํ˜ธ ์‹œ์Šคํ…œ
  • ๋„คํŠธ์›Œํ‚น
  • ๋ช…๋ น์–ด ํ•ด์„๊ธฐ (command line interpreter)
๋ณธ ๊ณผ๋ชฉ์€ OS ์‚ฌ์šฉ์ž ๊ด€์ ์ด ์•„๋‹ˆ๋ผ OS ๊ฐœ๋ฐœ์ž ๊ด€์ ์—์„œ ์ˆ˜๊ฐ•ํ•ด์•ผํ•จ
๋Œ€๋ถ€๋ถ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ OS ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์˜ ๋‚ด์šฉ
์ธ๊ฐ„์˜ ์‹ ์ฒด๊ฐ€ ๋‡Œ์˜ ํ†ต์ œ๋ฅผ ๋ฐ›๋“ฏ ์ปดํ“จํ„ฐ ํ•˜๋“œ์›จ์–ด๋Š” ์šด์˜์ฒด์ œ์˜ ํ†ต์ œ๋ฅผ ๋ฐ›์œผ๋ฉฐ ๊ทธ ์šด์˜์ฒด์ œ๋Š” ์‚ฌ๋žŒ์ด ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2. ์‹œ์Šคํ…œ ๊ตฌ์กฐ์™€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ (1)

  • CPU : mode bit, Interrupt line, registers
  • DMA controller
  • timer
  • memory controller - Memory
  • device controller - local buffer - disk, i/o divice

Mode bit

  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์˜ ์ž˜๋ชป๋œ ์ˆ˜ํ–‰์œผ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ ๋ฐ ์šด์˜์ฒด์ œ์— ํ”ผํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๋ณดํ˜ธ ์žฅ์น˜ ํ•„์š”

  • Mode bit์„ ํ†ตํ•ด ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ชจ๋“œ์˜ operation ์ง€์›

  • 1 ์‚ฌ์šฉ์ž ๋ชจ๋“œ : ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ ์ˆ˜ํ–‰
  • 0 ๋ชจ๋‹ˆํ„ฐ๋ชจ๋“œ(์ปค๋„ ๋ชจ๋“œ, ์‹œ์Šคํ…œ ๋ชจ๋“œ)* : OS ์ฝ”๋“œ ์ˆ˜ํ–‰
  • ๋ณด์•ˆ์„ ํ•ด์น  ์ˆ˜ ์žˆ๋Š” ์ค‘์š”ํ•œ ๋ช…๋ น์–ด๋Š” ๋ชจ๋‹ˆํ„ฐ ๋ชจ๋“œ์—์„œ๋งŒ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•œ "ํŠน๊ถŒ๋ช…๋ น"์œผ๋กœ ๊ทœ์ •
  • Interrupt๋‚˜ Exception ๋ฐœ์ƒ์‹œ ํ•˜๋“œ์›จ์–ด๊ฐ€ mode bit์„ 0์œผ๋กœ ๋ฐ”๊ฟˆ
  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU๋ฅผ ๋„˜๊ธฐ๊ธฐ ์ „์— mode bit์„ 1๋กœ ์…‹ํŒ…

Timer

  • ์ •ํ•ด์ง„ ์‹œ๊ฐ„์ด ํ๋ฅธ ๋’ค ์šด์˜์ฒด์ œ์—๊ฒŒ ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๋„๋ก ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

  • ํƒ€์ด๋จธ๋Š” ๋งค ํด๋Ÿญ ํ‹ฑ ๋•Œ๋งˆ๋‹ค 1์”ฉ ๊ฐ์†Œ

  • ํƒ€์ด๋จธ ๊ฐ’์ด 0์ด ๋˜๋ฉด ํƒ€์ด๋จธ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ

  • CPU๋ฅผ ํŠน์ • ํ”„๋กœ๊ทธ๋žจ์ด ๋…์ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธ

  • ํƒ€์ด๋จธ๋Š” time sharing์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋„๋ฆฌ ์ด์šฉ๋จ

  • ํƒ€์ด๋จธ๋Š” ํ˜„์žฌ ์‹œ๊ฐ„์„ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋„ ์‚ฌ์šฉ

Device Controller

  • I/O device controller
  • ํ•ด๋‹น I/O ์žฅ์น˜์œ ํ˜•์„ ๊ด€๋ฆฌํ•˜๋Š” ์ผ์ข…์˜ ์ž‘์€ CPU
  • ์ œ์–ด ์ •๋ณด๋ฅผ ์œ„ํ•ด control register, status register๋ฅผ ๊ฐ€์ง
  • local buffer๋ฅผ ๊ฐ€์ง(์ผ์ข…์˜ data register)
  • I/O๋Š” ์‹ค์ œ device์™€ local buffer ์‚ฌ์ด์—์„œ ์ผ์–ด๋‚จ
  • Device controller๋Š” I/O๊ฐ€ ๋๋‚ฌ์„ ๊ฒฝ์šฐ interrupt๋กœ CPU์— ๊ทธ ์‚ฌ์‹ค์„ ์•Œ๋ฆผ
  • device driver(์žฅ์น˜ ๊ตฌ๋™๊ธฐ) : OS ์ฝ”๋“œ ์ค‘ ๊ฐ ์žฅ์น˜๋ณ„ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด >> software
  • device controller(์žฅ์น˜์ œ์–ด๊ธฐ) : ๊ฐ ์žฅ์น˜๋ฅผ ํ†ต์ œํ•˜๋Š” ์ผ์ข…์˜ ์ž‘์€ CPU >> hardware

์ž…์ถœ๋ ฅ(I/O)์˜ ์ˆ˜ํ–‰

  • ๋ชจ๋“  ์ž…์ถœ๋ ฅ ๋ช…๋ น์€ ํŠน๊ถŒ ๋ช…๋ น
  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์–ด๋–ป๊ฒŒ I/O๋ฅผ ํ•˜๋Š”๊ฐ€ ?
  • ์‹œ์Šคํ…œ ์ฝœ : ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์€ ์šด์˜์ฒด์ œ์—๊ฒŒ I/O ์š”์ฒญ
  • trap์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ์˜ ํŠน์ • ์œ„์น˜๋กœ ์ด๋™
  • ์ œ์–ด๊ถŒ์ด ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ธํ„ฐ๋ŸฝํŠธ ์„œ๋น„์Šค ๋ฃจํ‹ด์œผ๋กœ ์ด๋™
  • ์˜ฌ๋ฐ”๋ฅธ I/O ์š”์ฒญ์ธ์ง€ ํ™•์ธ ํ›„ I/O ์ˆ˜ํ–‰
  • I/O ์™„๋ฃŒ ์‹œ ์ œ์–ด๊ถŒ์„ ์‹œ์Šคํ…œ์ฝœ ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์˜ฎ๊น€

์ธํ„ฐ๋ŸฝํŠธ(Interrupt)

  • ์ธํ„ฐ๋ŸฝํŠธ : ์ธํ„ฐ๋ŸฝํŠธ ๋‹นํ•œ ์‹œ์ ์˜ ๋ ˆ์ง€์Šคํ„ฐ์™€ program counter๋ฅผ saveํ•œ ํ›„ CPU์˜ ์ œ์–ด๋ฅผ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์— ๋„˜๊ธด๋‹ค.

  • Interrupt(๋„“์€์˜๋ฏธ)

  • Interrupt(ํ•˜๋“œ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ) : ํ•˜๋“œ์›จ์–ด๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ์ธํ„ฐ๋ŸฝํŠธ

  • Trap(์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ) : Exception(ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค๋ฅ˜๋ฅผ ๋ฒ”ํ•œ ๊ฒฝ์šฐ), System call(ํ”„๋กœ๊ทธ๋žจ์ด ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ)

  • ์ธํ„ฐ๋ŸฝํŠธ ๊ด€๋ จ ์šฉ์–ด

  • ์ธํ„ฐ๋ŸฝํŠธ ๋ฒกํ„ฐ : ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ์˜ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

  • ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด (Interrupt Service Routine, ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ), ํ•ด๋‹น ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปค๋„ ํ•จ์ˆ˜

  • ํ˜„๋Œ€์˜ ์šด์˜์ฒด์ œ๋Š” ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ๊ตฌ๋™๋จ

์‹œ์Šคํ…œ์ฝœ ( System Call )

  • ์‹œ์Šคํ…œ์ฝœ
  • ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ์˜ ์„œ๋น„์Šค๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด ์ปค๋„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ

3. ์‹œ์Šคํ…œ ๊ตฌ์กฐ์™€ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ (2)

๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ๊ณผ ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ

  • ๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ(synchronous I/O)

    • I/O ์š”์ฒญ ํ›„ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„์—์•ผ ์ œ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์— ๋„˜์–ด๊ฐ

    • ๊ตฌํ˜„๋ฐฉ๋ฒ• 1

      • I/O๊ฐ€ ๋๋‚  ๋–„๊นŒ์ง€ CPU๋ฅผ ๋‚ญ๋น„์‹œํ‚ด
      • ๋งค์‹œ์  ํ•˜๋‚˜์˜ I/O๋งŒ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Œ
    • ๊ตฌํ˜„๋ฐฉ๋ฒ• 2

      • I/O๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ์„œ CPU๋ฅผ ๋นผ์•—์Œ
      • I/O ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค„์— ๊ทธ ํ”„๋กœ๊ทธ๋žจ์„ ์ค„ ์„ธ์›€
      • ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ CPU๋ฅผ ์คŒ
  • ๋น„๋™๊ธฐ์‹ ์ž…์ถœ๋ ฅ (asynchoronous I/O)

    • I/O๊ฐ€ ์‹œ์ž‘๋œ ํ›„ ์ž…์ถœ๋ ฅ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ œ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์— ์ฆ‰์‹œ ๋„˜์–ด๊ฐ
  • ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ I/O์˜ ์™„๋ฃŒ๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋กœ ์•Œ๋ ค์คŒ

DMA (Direct Memory Access)

  • ๋น ๋ฅธ ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ€๊นŒ์šด ์†๋„๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
  • CPU์˜ ์ค‘์žฌ ์—†์ด device controller๊ฐ€ device์˜ buffer storage์˜ ๋‚ด์šฉ์„ ๋ฉ”๋ชจ๋ฆฌ์— block ๋‹จ์œ„๋กœ ์ง์ ‘ ์ „์†ก
  • ๋ฐ”์ดํŠธ ๋‹จ์œ„๊ฐ€ ์•„๋‹ˆ๋ผ block ๋‹จ์œ„๋กœ ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

์„œ๋กœ ๋‹ค๋ฅธ ์ž…์ถœ๋ ฅ ๋ช…๋ น์–ด

  • I/O๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” special instruction์— ์˜ํ•ด
  • Memory Mapped I/O์— ์˜ํ•ด

์ €์žฅ์žฅ์น˜ ๊ณ„์ธต ๊ตฌ์กฐ

Primary : Registers > Cache Memory > Main Memory
Secondary : Magnetic Disk > Optical Disk

Registers > Cache Memory > Main Memory > Magnetic Disk > Optical Disk

์ปค๋„ ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ๋‚ด์šฉ

  • code : ์ปค๋„์ฝ”๋“œ
    • ์‹œ์Šคํ…œ์ฝœ, ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ
    • ์ž์›๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ
    • ํŽธ๋ฆฌํ•œ ์„œ๋น„์Šค ์ œ๊ณต์„ ์œ„ํ•œ ์ฝ”๋“œ
  • data :
    • PCB-ProcessA, ProcessB
    • CPU
    • mem
    • disk
  • stack
    • Process A์˜ ์ปค๋„ ์Šคํƒ
    • Process B์˜ ์ปค๋„ ์Šคํƒ

์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜

  • ํ•จ์ˆ˜

    • ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜ >> ํ”„๋กœ์„ธ์ŠคA์˜ Address space(code, data, stack)

      • ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •์˜ํ•œ ํ•จ์ˆ˜
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜ >> ํ”„๋กœ์„ธ์ŠคA์˜ Address space(code, data, stack)

      • ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ๊ฐ–๋‹ค ์“ด ํ•จ์ˆ˜
      • ์ž์‹ ์˜ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํŒŒ์ผ์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.
    • ์ปค๋„ ํ•จ์ˆ˜ >> Kernel Address space(code, data, stack)

      • ์šด์˜์ฒด์ œ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜
      • ์ปค๋„ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ = ์‹œ์Šคํ…œ ์ฝœ

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

  • program begins
  • A์˜ ์ฃผ์†Œ๊ณต๊ฐ„ : user mode > user defined function call
  • Kernel์˜ ์ฃผ์†Œ๊ณต๊ฐ„ : kernel mode > system call > return from kernel
  • A์˜ ์ฃผ์†Œ๊ณต๊ฐ„ : user mode > library function call
  • Kernel์˜ ์ฃผ์†Œ๊ณต๊ฐ„ : kernel mode > system call
  • program ends

4. Process (1)

ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ๋…

  • "Process is a program in execution"

  • ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ(context)

    • CPU ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ
      • Program Counter
      • ๊ฐ์ข… register
    • ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„
      • code, data, stack
    • ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ ๊ตฌ์กฐ
      • PCB (Process Control Block)
      • Kernel stack

ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ (Process State)

  • Running

    • CPU๋ฅผ ์žก๊ณ  instruction์„ ์ˆ˜ํ–‰์ค‘์ธ ์ƒํƒœ
  • Ready

    • CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ(๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑํ•˜๊ณ )
  • Blocked(wait, sleep)

    • CPU๋ฅผ ์ฃผ์–ด๋„ ๋‹น์žฅ instruction์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
    • Process ์ž์‹ ์ด ์š”์ฒญํ•œ event(์˜ˆ : I/O)๊ฐ€ ์ฆ‰์‹œ ๋งŒ์กฑ๋˜์ง€ ์•Š์•„ ์ด๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
    • I/O๋“ฑ์˜ event๋ฅผ ์Šค์Šค๋กœ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
    • (์˜ˆ) ๋””์Šคํฌ์—์„œ file์„ ์ฝ์–ด์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
  • Suspended (stopped)

    • ์™ธ๋ถ€์ ์ธ ์ด์œ ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์ด ์ •์ง€๋œ ์ƒํƒœ
    • ํ”„๋กœ์„ธ์Šค๋Š” ํ†ต์งธ๋กœ ๋””์Šคํฌ์— swap out๋œ๋‹ค.
    • (์˜ˆ) ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ผ์‹œ ์ •์ง€์‹œํ‚จ ๊ฒฝ์šฐ (break key) ์‹œ์Šคํ…œ์ด ์—ฌ๋Ÿฌ ์ด์œ ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž ์‹œ ์ค‘๋‹จ์‹œํ‚ด (๋ฉ”๋ชจ๋ฆฌ์— ๋„ˆ๋ฌด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ฌ๋ผ์™€ ์žˆ์„ ๋•Œ)
  • New : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ์ค‘์ธ ์ƒํƒœ

  • Terminated : ์ˆ˜ํ–‰(execution)์ด ๋๋‚œ ์ƒํƒœ

  • Blocked : ์ž์‹ ์ด ์š”์ฒญํ•œ event๊ฐ€ ๋งŒ์กฑ๋˜๋ฉด Ready

  • Suspended : ์™ธ๋ถ€์—์„œ resume ํ•ด์ฃผ์–ด์•ผ Active

PCB (Process Control Block)

  • ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋‹น ์œ ์ง€ํ•˜๋Š” ์ •๋ณด
  • ๋‹ค์Œ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ€์ง„๋‹ค. (๊ตฌ์กฐ์ฒด๋กœ ์œ ์ง€)
    • (1) OS๊ฐ€ ๊ด€๋ฆฌ์ƒ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด
      • Process state, Process ID
      • scheduling information, priority
    • (2) CPU ์ˆ˜ํ–‰ ๊ด€๋ จ ํ•˜๋“œ์›จ์–ด ๊ฐ’
      • Program counter, register
    • (3) ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ
      • Code, data, stack์˜ ์œ„์น˜ ์ •๋ณด
    • (4) ํŒŒ์ผ ๊ด€๋ จ
      • Open file descriptors..

๋ฌธ๋งฅ ๊ตํ™˜ (Context Switch)

  • CPU๋ฅผ ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ณผ์ •
  • CPU๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜์–ด๊ฐˆ ๋•Œ ์šด์˜์ฒด์ œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰
    • CPU๋ฅผ ๋‚ด์–ด์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ PCB์— ์ €์žฅ
    • CPU๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์–ป๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ PCB์—์„œ ์ฝ์–ด์˜ด
  • System call์ด๋‚˜ interrupt ๋ฐœ์ƒ์‹œ ๋ฐ˜๋“œ์‹œ context switch๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹˜
  • A case

      1. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A(user mode)
      1. interrupt or system call
      1. ISR or system call ํ•จ์ˆ˜(kernel mode)
      1. ๋ฌธ๋งฅ๊ตํ™˜ ์—†์ด user mode ๋ณต๊ท€
      1. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A
  • B case

      1. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A(user mode)
      1. timer interrupt or I/O ์š”์ฒญ system call
      1. kernel mode
      1. ๋ฌธ๋งฅ๊ตํ™˜ ์ผ์–ด๋‚จ
      1. ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค B(user mode)

ํ”„๋กœ์„ธ์Šค๋ฅผ ์Šค์ผ€์ค„๋งํ•˜๊ธฐ ์œ„ํ•œ ํ

  • Job queue
    • ํ˜„์žฌ ์‹œ์Šคํ…œ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
  • Ready queue
    • ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์žˆ์œผ๋ฉด์„œ CPU๋ฅผ ์žก์•„์„œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
  • Device queues
    • I/O device์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
  • ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ฐ ํ๋“ค์„ ์˜ค๊ฐ€๋ฉฐ ์ˆ˜ํ–‰๋œ๋‹ค.

์Šค์ผ€์ค„๋Ÿฌ(Scheduler)

  • Long-term scheduler (์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ or job scheduler)

    • ์‹œ์ž‘ ํ”„๋กœ์„ธ์Šค ์ค‘ ์–ด๋–ค ๊ฒƒ๋“ค์„ ready queue๋กœ ๋ณด๋‚ผ์ง€ ๊ฒฐ์ •
    • ํ”„๋กœ์„ธ์Šค์— memory(๋ฐ ๊ฐ์ข… ์ž์›)์„ ์ฃผ๋Š” ๋ฌธ์ œ
    • degree of Multiprogramming์„ ์ œ์–ด
    • time sharing system์—๋Š” ๋ณดํ†ต ์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์—†์Œ (๋ฌด์กฐ๊ฑด ready)
  • Short-term scheduler(๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ or CPU scheduler)

    • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์Œ๋ฒˆ์— running์‹œํ‚ฌ์ง€ ๊ฒฐ์ •
    • ํ”„๋กœ์„ธ์Šค์— CPU๋ฅผ ์ฃผ๋Š” ๋ฌธ์ œ
    • ์ถฉ๋ถ„ํžˆ ๋นจ๋ผ์•ผ ํ•จ(millisecond ๋‹จ์œ„)
  • Medium-Term Scheduler(์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ or Swapper)

    • ์—ฌ์œ  ๊ณต๊ฐ„ ๋งˆ๋ จ์„ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ต์งธ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋””์Šคํฌ๋กœ ์ซ“์•„๋ƒ„
    • ํ”„๋กœ์„ธ์Šค์—๊ฒŒ์„œ memory๋ฅผ ๋บ๋Š” ๋ฌธ์ œ
    • degree of Multiprogramming์„ ์ œ์–ด

Thread

  • "A thread (or lightweight process) is basic unit of CPU utilization"

  • Thread์˜ ๊ตฌ์„ฑ

    • program counter
    • register set
    • stack space
  • Thread๊ฐ€ ๋™๋ฃŒ thread์™€ ๊ณต์œ ํ•˜๋Š” ๋ถ€๋ถ„(=task)

    • code section
    • data section
    • OS resources
  • ์ „ํ†ต์ ์ธ ๊ฐœ๋…์˜ heavyweight process๋Š” ํ•˜๋‚˜์˜ thread๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” task๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ๊ณต๊ฐ„ : Stack : (Thread1์˜ Stack, Thread2์˜ Stack, Thread3์˜ Stack), data, code

  • ์šด์˜์ฒด์ œ ๋‚ด๋ถ€์— ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด PCB๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • PCB (pointer, process state, process number, program counter, registers, memory limits, list of open files....)

  • ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜๋งŒ ๋„์›Œ๋†“๊ณ (code, data, stack) CPU๊ฐ€ ์ฝ”๋“œ์˜ ์–ด๋Š ๋ถ€๋ถ„์„ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”๊ฐ€(ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ) ์ฆ‰, ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๋งŒ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋‘๋Š” ๊ฒƒ, ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์— CPU ์ˆ˜ํ–‰๋‹จ์œ„๋งŒ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋‘๋Š” ๊ฒƒ์„ "Thread, ์Šค๋ ˆ๋“œ"๋ผ๊ณ  ํ•œ๋‹ค.

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์—์„œ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ตœ๋Œ€ํ•œ ๊ณต์œ ํ•˜๊ณ  (๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๊ณ , ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋„ ๊ณต์œ ํ•จ)

  • ์Šค๋ ˆ๋“œ๋Š” ์Šคํƒ๊ณผ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ๋งŒ ๋ณ„๋„๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Thread์˜ ์žฅ์ 

  • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํƒœ์Šคํฌ ๊ตฌ์กฐ์—์„œ๋Š” ํ•˜๋‚˜์˜ ์„œ๋ฒ„ ์Šค๋ ˆ๋“œ๊ฐ€ blocked (waiting) ์ƒํƒœ์ธ ๋™์•ˆ์—๋„ ๋™์ผํ•œ ํƒœ์Šคํฌ ๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰(running)๋˜์–ด ๋น ๋ฅธ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋™์ผํ•œ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ๋†’์€ ์ฒ˜๋ฆฌ์œจ(throughput)๊ณผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋น ๋ฅธ ์‘๋‹ต์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค, ์ž์›์ ˆ์•ฝ์„ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

Thread์˜ ์žฅ์  2

  • Responsiveness
    • eg) multi-threaded Web - if one thread is blocked (eg network), anther thread continues (eg display)
  • Resource Sharing
    • n threads can share binary code, data, resource of the process
  • Econnomy
    • creating & CPU switching thread (rather than a process)
    • Solaris์˜ ๊ฒฝ์šฐ ์œ„ ๋‘ ๊ฐ€์ง€์— ๋Œ€ํ•ด ํ”„๋กœ์„ธ์Šค์˜ overhead๊ฐ€ ๊ฐ๊ฐ 30๋ฐฐ, 5๋ฐฐ
  • Utilization of MP(๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ) Architectures
    • each thread may be running in parrel on a different processor

Thread ๊ตฌ์„ฑ

PCB

  • ์ „์ฒด KB(Process, heavyweight)
PCB
  {
    pointer, >> OS ๊ด€๋ฆฌ์šฉ ์ •๋ณด
    process state, >> OS ๊ด€๋ฆฌ์šฉ ์ •๋ณด
    process number, >> OS ๊ด€๋ฆฌ์šฉ ์ •๋ณด
    <br>
    program counter, >> CPU ๊ด€๋ จ ์ •๋ณด(์ˆ˜ words)
    registers >> Thread, lightweight

    memory limits >> ์ž์› ๊ด€๋ จ ์ •๋ณด
    list of open files >> ์ž์› ๊ด€๋ จ ์ •๋ณด
  }

Implementation of Threads

  • Some are supported by kernel >> Kernel Threads

    • Windows 95/98/NT
    • Solaris
    • Digital UNIX, Mach
  • Others are supported by library >> User Threads

    • POSIX Pthreads
    • Mach C-threads
    • Solaris threads
  • Some are real-time threads

ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ(Process Creation)

Copy-on-write (CoW)

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค(Parent process)๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค(children process) ์ƒ์„ฑ

  • ํ”„๋กœ์„ธ์Šค์˜ ํŠธ๋ฆฌ(๊ณ„์ธต ๊ตฌ์กฐ)ํ˜•์„ฑ

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ํ•„์š”๋กœ ํ•จ

    • ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๋Š”๋‹ค.
    • ๋ถ€๋ชจ์™€ ๊ณต์œ ํ•œ๋‹ค.
  • ์ž์›์˜ ๊ณต์œ 

    • ๋ถ€๋ชจ์™€ ์ž์‹์ด ๋ชจ๋“  ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
    • ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ชจ๋ธ
    • ์ „ํ˜€ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋ธ
  • ์ˆ˜ํ–‰(Execution)

    • ๋ถ€๋ชจ์™€ ์ž์‹์€ ๊ณต์กดํ•˜๋ฉฐ ์ˆ˜ํ–‰๋˜๋Š” ๋ชจ๋ธ
    • ์ž์‹์ด ์ข…๋ฃŒ(terminate)๋  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š”(wait) ๋ชจ๋ธ
  • ์ฃผ์†Œ๊ณต๊ฐ„ (Address space)

    • ์ž์‹์€ ๋ถ€๋ชจ์˜ ๊ณต๊ฐ„์„ ๋ณต์‚ฌํ•จ(binary and OS data)
    • ์ž์‹์€ ๊ทธ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ฆผ
  • ์œ ๋‹‰์Šค์˜ ์˜ˆ
    • fork() ์‹œ์Šคํ…œ ์ฝœ(์šด์˜์ฒด์ œํ•œํ…Œ ๋ถ€ํƒํ•ด์„œ ์ƒ์„ฑ๋˜๋Š” ๊ฒƒ)์ด ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑ
      • ๋ถ€๋ชจ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ (OS data except PID + binary)
      • ์ฃผ์†Œ๊ณต๊ฐ„ ํ• ๋‹น
    • fork ๋‹ค์Œ์— ์ด์–ด์ง€๋Š” exec() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ

ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ(Process Termination)

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์šด์˜์ฒด์ œ์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ ค์คŒ (exit)
    • ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ output data๋ฅผ ๋ณด๋ƒ„ (via wait)
    • ํ”„๋กœ์„ธ์Šค์˜ ๊ฐ์ข… ์ž์›๋“ค์ด ์šด์˜์ฒด์ œ์—๊ฒŒ ๋ฐ˜๋‚ฉ๋จ
  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹์˜ ์ˆ˜ํ–‰์„ ์ข…๋ฃŒ์‹œํ‚ด(abort)
    • ์ž์‹์ด ํ• ๋‹น ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„ฌ
    • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ ํƒœ์Šคํฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
    • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ(exit)ํ•˜๋Š” ๊ฒฝ์šฐ
      • ์šด์˜์ฒด์ œ๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ ์ž์‹์ด ๋” ์ด์ƒ ์ˆ˜ํ–‰๋˜๋„๋ก ๋‘์ง€ ์•Š๋Š”๋‹ค.
      • ๋‹จ๊ณ„์ ์ธ ์ข…๋ฃŒ

fork() ์‹œ์Šคํ…œ ์ฝœ

  • A process is created by the fork() system call.

    • creates a new address space that is a duplicate of the caller
    int main()
    {
      int pid;
      pid = fork();
      if (pid == 0) /* this is child*/
        printf("\n Hello, I am child!\n");
      else if (pid > 0) /* this is parent*/
        printf("\n Hello, I am parent!\n")
    }

exec() ์‹œ์Šคํ…œ ์ฝœ

  • A process can execute a different program by the exec() system call.
    • replaces the memory image of the caller with a new program.
int main()
{
  int pid;
  pid = fork();
  if (pid == 0) /* this  is child */
  {
    printf("\n Hello, I am child! Now I'll run date\n");
    execlp("/bin/date", "/bin/date", (char *)0);
  }
  else if (pid > 0) /* this is parent*/
    printf("\n Hello, I am parent!\n");
}
int main()
{
  printf("1");
  execlp("echo", "echo", "3", (char *) 0); /* 1 , echo ์ถœ๋ ฅ*/
  printf("2");
}

wait() ์‹œ์Šคํ…œ ์ฝœ

  • ํ”„๋กœ์„ธ์Šค A๊ฐ€ wait() ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด
    • ์ปค๋„์€ child๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ํ”„๋กœ์„ธ์Šค A๋ฅผ sleep ์‹œํ‚จ๋‹ค. (block ์ƒํƒœ)
    • Child process๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ปค๋„์€ ํ”„๋กœ์„ธ์Šค A๋ฅผ ๊นจ์šด๋‹ค. (ready ์ƒํƒœ)
main()
{
  int childPID;
  s1;

  childPID = fork();

  if(childPID == 0 )
    <code for child process>
  else {
    wait();
  }

  s2;
}

exit() ์‹œ์Šคํ…œ ์ฝœ

  • ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ

    • ์ž๋ฐœ์  ์ข…๋ฃŒ

      • ๋งˆ์ง€๋ง‰ statement ์ˆ˜ํ–‰ ํ›„ exit() ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด
      • ํ”„๋กœ๊ทธ๋žจ์— ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด์ฃผ์ง€ ์•Š์•„๋„ mainํ•จ์ˆ˜๊ฐ€ ๋ฆฌํ„ด๋˜๋Š” ์œ„์น˜์— ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋„ฃ์–ด์คŒ
    • ๋น„์ž๋ฐœ์  ์ข…๋ฃŒ(์™ธ๋ถ€์—์„œ ์ข…๋ฃŒ์‹œํ‚ด, ๋ถ€๋ชจํ”„๋กœ์„ธ์Šค๋‚˜ ์‚ฌ๋žŒ์ด ์ข…๋ฃŒ ์‹œํ‚ด)

      • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ด
        • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„œ๋Š” ์ž์› ์š”์ฒญ
        • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ ํƒœ์Šคํฌ๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
      • ํ‚ค๋ณด๋“œ๋กœ kill, break ๋“ฑ์„ ์นœ ๊ฒฝ์šฐ
      • ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒํ•˜๋Š” ๊ฒฝ์šฐ
        • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๊ธฐ ์ „์— ์ž์‹๋“ค์ด ๋จผ์ € ์ข…๋ฃŒ๋จ.

ํ”„๋กœ์„ธ์Šค์™€ ๊ด€๋ จํ•œ ์‹œ์Šคํ…œ ์ฝœ

  • fork() create a child(copy)

  • exec() overlay new image

  • wait() sleep until child is done

  • exit() frees all the resources, notify parent

ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ˜‘๋ ฅ

  • ๋…๋ฆฝ์  ํ”„๋กœ์„ธ์Šค(Independent process)

    • ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ์ž์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์›์น™์ ์œผ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ๋ชปํ•จ
  • ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค(Cooperating process)

    • ํ”„๋กœ์„ธ์Šค ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Œ
  • ํ”„๋กœ์„ธ์Šค๊ฐ„ ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜(IPC: Interprocess Communication)

    • ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

      • message passing : ์ปค๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ
    • ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋Š” ๋ฐฉ๋ฒ•

      • shared memory : ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋„ ์ผ๋ถ€ ์ฃผ์†Œ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๊ฒŒ ํ•˜๋Š” shared memory ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์žˆ์Œ

      • thread : thread๋Š” ์‚ฌ์‹ค์ƒ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์ด๋ฏ€๋กœ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ์œผ๋กœ* ๋ณด๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” thread๊ฐ„์—๋Š” ์ฃผ์†Œ๊ณต๊ฐ„์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ ํ˜‘๋ ฅ์ด ๊ฐ€๋Šฅ

Message Passing

  • Message system

    • ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ๊ณต์œ  ๋ณ€์ˆ˜(shared variable)๋ฅผ ์ผ์ฒด ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ†ต์‹ ํ•˜๋Š” ์‹œ์Šคํ…œ
  • Direct Communication

    • ํ†ต์‹ ํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œ
    • Process P >>>> Process Q Send (Q, message) Receive(P, message)
  • Indirect Communication

    • mailbox (๋˜๋Š” port)๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ„์ ‘ ์ „๋‹ฌ Process P >> Mailbox >> M Process Q Send (M, message) Receive(M, message)

5. CPU Scheduling

CPU and I/O Bursts in Program Execution

CPU burst : load store, add store, read from file I/O burst : wait for I/O CPU burst : store increment, index, write to file I/O burst : wait for I/O CPU burst : load store, add store, read from file I/O burst : wait for I/O

CPU-burst Time์˜ ๋ถ„ํฌ

  • ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ job(=process)๊ฐ€ ์„ž์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•˜๋‹ค.
  • interactive job์—๊ฒŒ ์ ์ ˆํ•œ response ์ œ๊ณต ์š”๋ง
  • CPU์™€ I/O ์žฅ์น˜ ์‹œ์Šคํ…œ ์ž์›์„ ๊ณจ๊ณ ๋ฃจ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ

ํ”„๋กœ์„ธ์Šค์˜ ํŠน์„ฑ ๋ถ„๋ฅ˜

  • ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ”

    • I/O-bound process

      • CPU๋ฅผ ์žก๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค I/O์— ๋งŽ์€ ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ job
      • (many short CPU burst)
    • CPU-bound process

      • ๊ณ„์‚ฐ ์œ„์ฃผ์˜ job
      • few very long CPU bursts

CPU Scheduler & Dispatcher

  • CPU Scheduler (์šด์˜์ฒด์ œ์ฝ”๋“œ, CPU ์ค„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ ๋ฆ„)

    • Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ค‘์—์„œ ์ด๋ฒˆ์— CPU๋ฅผ ์ค„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณ ๋ฅธ๋‹ค.
  • Dispatcher (์šด์˜์ฒด์ œ์ฝ”๋“œ, ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊น€)

    • CPU์˜ ์ œ์–ด๊ถŒ์„ CPU scheduler์— ์˜ํ•ด ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ธด๋‹ค.
    • ์ด ๊ณผ์ •์„ context switch(๋ฌธ๋งฅ ๊ตํ™˜)์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • CPU ์Šค์ผ€์ค„๋ง์ด ์–ธ์ œ ํ•„์š”ํ•œ๊ฐ€ ? (๋‹ค์Œ์„ ์ฐธ๊ณ )
  • CPU ์Šค์ผ€์ค„๋ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์ด๋‹ค.

    • Running -> Blocked (์˜ˆ : I/O ์š”์ฒญํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ)
    • Running -> Ready (์˜ˆ : ํ• ๋‹น์‹œ๊ฐ„๋งŒ๋ฃŒ ๋กœ timer interrupt)
    • Blocked -> Ready (์˜ˆ : I/O ์™„๋ฃŒ ํ›„ ์ธํ„ฐ๋ŸฝํŠธ)
    • Terminate
  • ๋น„์„ ์ ํ˜• 1 ~ 4์—์„œ์˜ ์Šค์ผ€์ค„๋ง์€ nonpreemptive(=๊ฐ•์ œ๋กœ ๋นผ์•—์ง€ ์•Š๊ณ  ์ž์ง„ ๋ฐ˜๋‚ฉ)

  • ์„ ์ ํ˜• All other scheduling is preemptive(=๊ฐ•์ œ๋กœ ๋นผ์•—์Œ)

Scheduling Criteria

Performance Index ( = Performance Measure, ์„ฑ๋Šฅ ์ฒ™๋„)

  • CPU utilization(์ด์šฉ๋ฅ ) - ์‹œ์Šคํ…œ ์ž…์žฅ์˜ ์„ฑ๋Šฅ, ์ฒ™๋„

    • keep the CPU as busy as possible
  • Throughput(์ฒ˜๋ฆฌ๋Ÿ‰) - ์‹œ์Šคํ…œ ์ž…์žฅ์˜ ์„ฑ๋Šฅ, ์ฒ™๋„

    • of processes that complete their execution per time unit
  • Turnaround time (์†Œ์š”์‹œ๊ฐ„, ๋ฐ˜ํ™˜์‹œ๊ฐ„) - ์‚ฌ์šฉ์ž ์ž…์žฅ์˜ ์„ฑ๋Šฅ, ์ฒ™๋„

    • amount of time to execute a particular process
  • Waiting time (๋Œ€๊ธฐ ์‹œ๊ฐ„) - ์‚ฌ์šฉ์ž ์ž…์žฅ์˜ ์„ฑ๋Šฅ, ์ฒ™๋„

    • amount of time a process has been waiting in the ready queue
  • Response time (์‘๋‹ต ์‹œ๊ฐ„) - ์‚ฌ์šฉ์ž ์ž…์žฅ์˜ ์„ฑ๋Šฅ, ์ฒ™๋„

    • amount of time it takes from when a request was submitted until the first response is produced. not output (for time-sharing environment)

Scheduling Algorithms

  • FCFS (First-Come First-Served)
  • SJF (Shortest-Job-First)
  • SRTF (Shortest-Remaining-Time-First)
  • Priority Scheduling
  • RR (Round Robin)
  • Multilevel Queue
  • Multilevel Feedback Queue

FCFS (First-Come First-Served) (1)

  • ์˜ˆ์‹œ : ํ™”์žฅ์‹ค ์Šค์ผ€์ค„๋ง(๋ณ€๋น„ ์žˆ๋Š” ์‚ฌ๋žŒ์ด ์•ž์—์„œ ํ™”์žฅ์‹ค์„ ์ ์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉด ์•„๋ž˜ ์˜ˆ์‹œ์™€ ๊ฐ™์€ ์ผ์ด ๋ฒŒ์–ด์ง„๋‹ค.)
  • ๋น„์„ ์ ํ˜• ์Šค์ผ€์ค„๋ง (์„ ์ฐฉ์ˆœ์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ์Šค์ผ€์ค„๋ง์€ ์•„๋‹ˆ๋‹ค. ์•ž์˜ ์„ ์ฐฉ์ˆœ์œผ๋กœ ๋„์ฐฉํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ waiting์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ „์ฒด waiting์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋งŽ์ด ์ค€๋‹ค.)

  • Example

    • Process Burst Time
    • P1 24
    • P2 3
    • P3 3
  • ํ”„๋กœ์„ธ์Šค์˜ ๋„์ฐฉ ์ˆœ์„œ

  • P1, P2, P3

    • P1(0-24)
    • P2(24-27)
    • P3(27-30)
  • Wating time for P1 = 0; P2 = 24; P3 = 27

  • Average wating time : (0 + 24 + 27 )/3 = 17

FCFS (First-Come First-Served) (2)

  • ํ”„๋กœ์„ธ์Šค์˜ ๋„์ฐฉ์ˆœ์„œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•˜์ž.

  • P2, P3, P1

    • P1(0-3)
    • P2(3-6)
    • P3(6-30)
  • Waiting time for P1 = 6; P2 = 0; P3=3;

  • Average waiting time : (6 + 0 + 3) /3 =3

  • Much better than previous case

  • Convoy effect : short process behind long process

SJF (Shortest-Job-First)

  • ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ๋‹ค์Œ๋ฒˆ CPU burst time์„ ๊ฐ€์ง€๊ณ  ์Šค์ผ€์ค„๋ง์— ํ™œ์šฉ
  • CPU burst time์ด ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ œ์ผ ๋จผ์ € ์Šค์ผ€์ค„
  • Two schemes :
    • Nonpreemptive ๋ฒ„์ „
      • ์ผ๋‹จ CPU๋ฅผ ์žก์œผ๋ฉด ์ด๋ฒˆ CPU burst๊ฐ€ ์™„๋ฃŒ๋ ๋•Œ๊นŒ์ง€ CPU๋ฅผ ์„ ์ (preemption) ๋‹นํ•˜์ง€ ์•Š์Œ
    • Preemptive ๋ฒ„์ „
      • ํ˜„์žฌ ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ๋‚จ์€ burst time๋ณด๋‹ค ๋” ์งง์€ CPU burst time์„ ๊ฐ€์ง€๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด CPU๋ฅผ ๋นผ์•—๊น€
      • ์ด ๋ฐฉ๋ฒ•์„ Shortest-Remaining-Time-First(SRTF)์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
  • SJF is optimal
    • ์ฃผ์–ด์ง„ ํ”„๋กœ์„ธ์Šค๋“ค์— ๋Œ€ํ•ด minimum average waiting time์„ ๋ถ€์ • (Preemptive ๋ฒ„์ „)

Example of Non-Preemptive SJF

Process Arrival Time Burst Time
P1 0.0 7
P2 2.0 4
P3 4.0 1
P4 5.0 4
  • SJF (non-preemptive)
    • P1(0-7)
    • P3(7-8)
    • P2(8-12)
    • P4(12-16)
  • Average waiting time = (0 + 6 + 3 + 7)/4 = 4

Example of Preemptive SJF

Process Arrival Time Burst Time
P1 0.0 7
P2 2.0 4
P3 4.0 1
P4 5.0 4
  • SJF (preemptive)
    • P1(0-2)
    • P2(2-4)
    • P3(4-5)
    • P2(5-7)
    • P4(7-11)
    • P1(11-16)
  • Average waiting time = (9 + 1 + 0 + 2)/4 = 3

Priority Scheduling (์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง)

  • Priority number (integer) is associated with each process
  • hightest priority๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU ํ• ๋‹น (smallest integer = highest priority)
    • Preemptive
    • nonpreemptive
  • SJF๋Š” ์ผ์ข…์˜ Priority scheduling์ด๋‹ค.
    • priority = predicted next CPU burst time
  • Problem
    • Starvation(๊ธฐ์•„ ํ˜„์ƒ) low priority processes may never execute.
  • Solution
    • Aging(๋…ธํ™”) as time progresses increase the priority of the process.

๋‹ค์Œ CPU Burst Time์˜ ์˜ˆ์ธก

  • ๋‹ค์Œ๋ฒˆ CPU burst time์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋Š”๊ฐ€ ? (input data, branch, user...)
  • ์ถ”์ •(estimate)๋งŒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ณผ๊ฑฐ์˜ CPU burst time์„ ์ด์šฉํ•ด์„œ ์ถ”์ •(์˜ˆ์ธก) (exponential averaging)
    1. t[n](n๋ฒˆ์งธ ์‹ค์ œ CPU ์‚ฌ์šฉ์‹œ๊ฐ„) = actuallength of n^CPU burst
    2. r[n+1](ํƒ€์šฐ, n+1๋ฒˆ์งธ CPU ์‚ฌ์šฉ์„ ์˜ˆ์ธกํ•œ ์‹œ๊ฐ„) - predicted value for the next CPU burst
    3. a(์•ŒํŒŒ), 0 <= a(์•ŒํŒŒ) <= 1
    4. Define : r[n+1] = a[tn] + (1-a)r[n]

Round Robin (RR)

  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ• ๋‹น ์‹œ๊ฐ„(time quantum)์„ ๊ฐ€์ง (์ผ๋ฐ˜์ ์œผ๋กœ 10-100 milliseconds)

  • ํ• ๋‹น ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์„ ์ (preempted)๋‹นํ•˜๊ณ  ready queue์˜ ์ œ์ผ ๋’ค์— ๊ฐ€์„œ ๋‹ค์‹œ ์ค„์„ ์„ ๋‹ค.

  • n๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue์— ์žˆ๊ณ  ํ• ๋‹น ์‹œ๊ฐ„์ด q time unit์ธ ๊ฒฝ์šฐ ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์ตœ๋Œ€ q time unit ๋‹จ์œ„๋กœ CPU ์‹œ๊ฐ„์˜ 1/n์„ ์–ป๋Š”๋‹ค.

    • ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋„ (n-1)q time unit ์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  • Performance

    • q large -> FCFS
    • q small -> context switch ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง„๋‹ค.

Example : RR with Time Quantum = 20

Process Burst Time
P1 53
P2 17
P3 68
P4 24
  • The Gantt chart is :
P1 P2 P3 P4 P1 P3 P4 P1 P3 P3
0-20 20-37 37-57 57-77 77-97 97-117 117-121 121-134 134-154 154-162
  • ์ผ๋ฐ˜์ ์œผ๋กœ SJF๋ณด๋‹ค average turnaround time์ด ๊ธธ์ง€๋งŒ response time์€ ๋” ์งง๋‹ค.

Multilevel Queue

  • Ready Queue๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„ํ• 
    • foreground (interactive)
    • background (batch - no human interaction)
  • ๊ฐ ํ๋Š” ๋…๋ฆฝ์ ์ธ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง
    • foreground - RR
    • background - FCFS
  • ํ์— ๋Œ€ํ•œ ์Šค์ผ€์ค„๋ง์ด ํ•„์š”
    • Fixed priority scheduling
      • serve all from foreground then from background
      • Possibility of starvation
    • Time slice
      • ๊ฐ ํ์— CPU time์„ ์ ์ ˆํ•œ ๋น„์œจ๋กœ ํ• ๋‹น
      • Eg., 80% to foreground in RR, 20% to background in FCFS

Multilevel Queue (priority)

hightest priority

  1. system processes
  2. interactive processes
  3. interactive editing processes
  4. batch processes
  5. student processes

lowest priority

Multilevel Feedback Queue

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ๋กœ ์ด๋™ ๊ฐ€๋Šฅ
  • ์—์ด์ง•(aging)์„ ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Multilevel-feedback-queue scheduler๋ฅผ ์ •์˜ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค
    • Queue์˜ ์ˆ˜
    • ๊ฐ ํ์˜ scheduling algorithm
    • Process๋ฅผ ์ƒ์œ„ ํ๋กœ ๋ณด๋‚ด๋Š” ๊ธฐ์ค€
    • Process๋ฅผ ํ•˜์œ„ ํ๋กœ ๋‚ด์ซ“๋Š” ๊ธฐ์ค€
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์„œ๋น„์Šค๋ฅผ ๋ฐ›์œผ๋ ค ํ•  ๋•Œ ๋“ค์–ด๊ฐˆ ํ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ์ค€

Examples of Multilevel Feedback Queue

  • Three queues

    • Q[0] - time quantum 8 milliseconds
    • Q[1] - time quantum 16 milliseconds
    • Q[2] - FCFS
  • Scheduling

    • new job์ด queue Q[0]๋กœ ๋“ค์–ด๊ฐ
    • CPU๋ฅผ ์žก์•„์„œ ํ• ๋‹น ์‹œ๊ฐ„ 8 milliseconds ๋™์•ˆ ์ˆ˜ํ–‰๋จ
    • 8 milliseconds ๋™์•ˆ ๋‹ค ๋๋‚ด์ง€ ๋ชปํ–ˆ์œผ๋ฉด queue Q[1]ใ…ก๋กœ ๋‚ด๋ ค๊ฐ
    • Q[1]์— ์ค„์„œ์„œ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ CPU๋ฅผ ์žก์•„์„œ 16ms๋™์•ˆ ์ˆ˜ํ–‰๋จ
    • 16ms์— ๋๋‚ด์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ queue Q[2]๋กœ ์ซ“๊ฒจ๋‚จ

Multiple-Processor Scheduling

  • CPU๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ ์Šค์ผ€์ค„๋ง์€ ๋”์šฑ ๋ณต์žกํ•ด์ง
  • Homogeneous processor์ธ ๊ฒฝ์šฐ
    • Queue์— ํ•œ์ค„๋กœ ์„ธ์›Œ์„œ ๊ฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์•Œ์•„์„œ ๊บผ๋‚ด๊ฐ€๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฐ˜๋“œ์‹œ ํŠน์ • ํ”„๋กœ์„ธ์„œ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋” ๋ณต์žกํ•ด์ง
  • Load sharing
    • ์ผ๋ถ€ ํ”„๋กœ์„ธ์„œ์— job์ด ๋ชฐ๋ฆฌ์ง€ ์•Š๋„๋ก ๋ถ€ํ•˜๋ฅผ ์ ์ ˆํžˆ ๊ณต์œ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•„์š”
    • ๋ณ„๊ฐœ์˜ ํ๋ฅผ ๋‘๋Š” ๋ฐฉ๋ฒ• VS ๊ณต๋™ ํ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Symmetric Multiprocessing (SMP)
    • ๊ฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๊ฐ์ž ์•Œ์•„์„œ ์Šค์ผ€์ค„๋ง ๊ฒฐ์ •
  • Asymmetric multiprocessing
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์‹œ์Šคํ…œ ๋ฐ์ดํ„ฐ์˜ ์ ‘๊ทผ๊ณผ ๊ณต์œ ๋ฅผ ์ฑ…์ž„์ง€๊ณ  ๋‚˜๋จธ์ง€ ํ”„๋กœ์„ธ์„œ๋Š” ๊ฑฐ๊ธฐ์— ๋”ฐ๋ฆ„

Real-Time Scheduling

  • Hard real-time systems
    • Hard real-time task๋Š” ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ๋ฐ˜๋“œ์‹œ ๋๋‚ด๋„๋ก ์Šค์ผ€์ค„๋งํ•ด์•ผ ํ•จ
  • Soft real-time computing
    • Soft real-time task๋Š” ์ผ๋ฐ˜ ํ”„๋กœ์„ธ์Šค์— ๋น„ํ•ด ๋†’์€ priority๋ฅผ ๊ฐ–๋„๋ก ํ•ด์•ผ ํ•จ

Thread Scheduling

  • Local Scheduling
    • User level thread์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž ์ˆ˜์ค€์˜ thread library์— ์˜ํ•ด ์–ด๋–ค thread๋ฅผ ์Šค์ผ€์ค„ํ• ์ง€ ๊ฒฐ์ •
  • Global Scheduling
    • Kernel level thread์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜ ํ”„๋กœ์„ธ์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ปค๋„์˜ ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์–ด๋–ค thread๋ฅผ ์Šค์ผ€์ค„ํ• ์ง€ ๊ฒฐ์ •

Algorithm Evaluation

  • Queueing models

    • ํ™•๋ฅ  ๋ถ„ํฌ๋กœ ์ฃผ์–ด์ง€๋Š” arrival rate์™€ service rate๋“ฑ์„ ํ†ตํ•ด ๊ฐ์ข… performance index ๊ฐ’์„ ๊ณ„์‚ฐ
  • Implementation(๊ตฌํ˜„) & Measurement(์„ฑ๋Šฅ ์ธก์ •)

    • ์‹ค์ œ ์‹œ์Šคํ…œ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜์—ฌ ์‹ค์ œ ์ž‘์—…(workload)์— ๋Œ€ํ•ด์„œ ์„ฑ๋Šฅ์„ ์ธก์ • ๋น„๊ต
  • Simulation(๋ชจ์˜ ์‹คํ—˜)

    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ชจ์˜ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž‘์„ฑ ํ›„ trace๋ฅผ ์ž…๋ ฅ์œผ๋กœ ํ•˜์—ฌ ๊ฒฐ๊ณผ ๋น„๊ต

6. Process Synchronization

Race Condition

  • S-box(Memory Address Space)๋ฅผ ๊ณต์œ ํ•˜๋Š” E-box(CPU Process)๊ฐ€ ์—ฌ๋Ÿฟ ์žˆ๋Š” ๊ฒฝ์šฐ Race Condition์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ
    • Multiprocessor system
    • ๊ณต์œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค, ์ปค๋„ ๋‚ด๋ถ€๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ๋ฃจํ‹ด๋“ค ๊ฐ„ (์˜ˆ : ์ปค๋„๋ชจ๋“œ ์ˆ˜ํ–‰ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ๋กœ ์ปค๋„๋ชจ๋“œ ๋‹ค๋ฅธ ๋ฃจํ‹ด ์ˆ˜ํ–‰์‹œ)

OS์—์„œ race condition์€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€ ?

  1. kernel ์ˆ˜ํ–‰ ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ
  2. Process๊ฐ€ system call์„ ํ•˜์—ฌ kernel mode๋กœ ์ˆ˜ํ–‰์ค‘์ธ๋ฐ context switch๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
  3. Multiprocessor์—์„œ shared memory ๋‚ด์˜ kernel data

OS์—์„œ์˜ race condition(1/3)

  • interrupt handler vs kernel

interrupt handler Count-- kernel Count++ (1. load, 2. Inc, 3. Store)

์ปค๋„์ด ์–ด๋–ค ์ž‘์—… ์ค‘์— ์žˆ์„ ๋•Œ ์ธํ„ฐ๋ŸฝํŠธ ์š”์ฒญ์ด ์™€๋„ ๊ธฐ์กด ์ž‘์—…์„ ๋‹ค ํ•œ๋’ค์— ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด์œผ๋กœ ๊ฐ„๋‹ค. ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์นด์šดํŠธ๊ฐ€ 1 ์ฆ๊ฐ€ํ•จ ์ปค๋„์—์„œ Count++ ์ž‘์—… ์ค‘ ์ธํ„ฐ๋ŸฝํŠธ๋กœ Count--๊ฐ€ ๋“ค์–ด์˜ฌ ๋–„์˜ ์ƒํ™ฉ

  • ์ปค๋„๋ชจ๋“œ running ์ค‘ interrupt๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ๋ฃจํ‹ด์ด ์ˆ˜ํ–‰
    • ์–‘์ชฝ ๋‹ค ์ปค๋„ ์ฝ”๋“œ์ด๋ฏ€๋กœ kernel address space ๊ณต์œ 

OS์—์„œ์˜ race condition(2/3)

  1. user mode
  2. System call
  3. kernel mode
  4. Return from kernel
  5. user mode
  6. System call
  7. kernel mode
  • ๋‘ ํ”„๋กœ์„ธ์Šค์˜ address space๊ฐ„์—๋Š” data sharing์ด ์—†์Œ
  • ๊ทธ๋Ÿฌ๋‚˜ system call์„ ํ•˜๋Š” ๋™์•ˆ์—๋Š” kernel address space์˜ data๋ฅผ accessํ•˜๊ฒŒ ๋จ(share)
  • ์ด ์ž‘์—… ์ค‘๊ฐ„์— CPU๋ฅผ preemptํ•ด๊ฐ€๋ฉด race condition ๋ฐœ์ƒ

If you preempt CPU while in kernel mode ...

  1. System call read()
  2. Time quantum expires & P[B] needs CPU. P[A]๋Š” CPU๋ฅผ preempt ๋‹นํ•จ (while in kernel !)
  3. CPU ๋˜๋Œ๋ ค ๋ฐ›์Œ
  • ํ•ด๊ฒฐ์ฑ… : ์ปค๋„๋ชจ๋“œ์—์„œ ์ˆ˜ํ–‰์ค‘์ผ๋•Œ๋Š” CPU๋ฅผ preemptํ•˜์ง€ ์•Š์Œ ์ปค๋„๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ๋Œ์•„๊ฐˆ ๋•Œ preempt

OS์—์„œ์˜ race condition(3/3)

์–ด๋–ค CPU๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ count๋ฅผ storeํ–ˆ๋Š”๊ฐ€ ? >>> race condition multiprocessor์˜ ๊ฒฝ์šฐ interrupt enable/disable๋กœ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์Œ

  • ๋ฐฉ๋ฒ•1. ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ CPU๋งŒ์ด ์ปค๋„์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ฐฉ๋ฒ•2. ์ปค๋„ ๋‚ด๋ถ€์— ์žˆ๋Š” ๊ฐ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ๋งˆ๋‹ค ๊ทธ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ lock / unlock์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•

6. Process Synchronization 2

Process Synchronization ๋ฌธ์ œ

  • ๊ณต์œ  ๋ฐ์ดํ„ฐ(shared data)์˜ ๋™์‹œ ์ ‘๊ทผ(concurrent access)๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ถˆ์ผ์น˜(inconsistency)๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

  • ์ผ๊ด€์„ฑ(consistency)์œ ์ง€๋ฅผ ์œ„ํ•ด์„œ๋Š” ํ˜‘๋ ฅ ํ”„๋กœ์„ธ์Šค(cooperating process)๊ฐ„์˜ ์‹คํ–‰ ์ˆœ์„œ(orderly execution)์„ ์ •ํ•ด์ฃผ๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜ ํ•„์š”

  • Race condition

    • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์‹œ์— ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ƒํ™ฉ
    • ๋ฐ์ดํ„ฐ์˜ ์ตœ์ข… ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๋Š” ๋งˆ์ง€๋ง‰์— ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ ํ”„๋กœ์„ธ์Šค์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง
  • race condition์„ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” concurrent process๋Š” ๋™๊ธฐํ™”(synchronize)๋˜์–ด์•ผ ํ•œ๋‹ค.

The Critical-Section Problem

  • n๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ code segment์—๋Š” ๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ์ธ critical section์ด ์กด์žฌ.
  • Problem
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ์žˆ์„ ๋•Œ ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” critical section์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†์–ด์•ผ ํ•œ๋‹ค.

Initial Attempts to Solve Problem

  • ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ • P[0], P[1]

  • ํ”„๋กœ์„ธ์Šค๋“ค์˜ ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ

    do {
      entry section
      critical section
      exit section
      remainder section
    }while(1);
  • ํ”„๋กœ์„ธ์Šค๋“ค์€ ์ˆ˜ํ–‰์˜ ๋™๊ธฐํ™”(synchronize)๋ฅผ ์œ„ํ•ด ๋ช‡๋ช‡ ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

    synchronization variable

ํ”„๋กœ๊ทธ๋žจ์  ํ•ด๊ฒฐ๋ฒ•์˜ ์ถฉ์กฑ ์กฐ๊ฑด

  • Mutual Exclusion (์ƒํ˜ธ๋ฐฐ์ œ)

    • ํ”„๋กœ์„ธ์Šค Pi๊ฐ€ critical section ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰์ค‘์ด๋ฉด ๋‹ค๋ฅธ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ทธ๋“ค์˜ critical section์— ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ ๋œ๋‹ค.
  • Progress(์ง„ํ–‰)

    • ์•„๋ฌด๋„ critical section์— ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ critical section์— ๋“ค์–ด๊ฐ€๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด critical section์— ๋“ค์–ด๊ฐ€๊ฒŒ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • Bounded Waiting(์œ ํ•œ ๋Œ€๊ธฐ)

    • ํ”„๋กœ์„ธ์Šค๊ฐ€ critical section์— ๋“ค์–ด๊ฐ€๋ ค๊ณ  ์š”์ฒญํ•œ ํ›„๋ถ€ํ„ฐ ๊ทธ ์š”์ฒญ์ด ํ—ˆ์šฉ๋  ๋•Œ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด critical section์— ๋“ค์–ด๊ฐ€๋Š” ํšŸ์ˆ˜์— ํ•œ๊ณ„๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ€์ •

    • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰ ์†๋„๋Š” 0๋ณด๋‹ค ํฌ๋‹ค.
    • ํ”„๋กœ์„ธ์Šค๋“ค ๊ฐ„์˜ ์ƒ๋Œ€์ ์ธ ์ˆ˜ํ–‰ ์†๋„๋Š” ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Algorithm 1

  • Synchronization variable int turn; initially turn = 0; >> P[i] can enter its critical section if (turn == i)

  • Process P

    do {
      while (turn != 0); /* My turn ? */
        critical section
        turn = 1;        /* Now it's your turn */
        remainder section
    } while(1);
  • Satisfies mutual exclusion, but not progress
    • ์ฆ‰, ๊ณผ์ž‰์–‘๋ณด : ๋ฐ˜๋“œ์‹œ ๊ต๋Œ€๋กœ ๋“ค์–ด๊ฐ€์•ผ๋งŒ ํ•จ(swap-turn) ๊ทธ๊ฐ€ turn์„ ๋‚ด ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ๋งŒ ๋‚ด๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ ํŠน์ • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋” ๋นˆ๋ฒˆํžˆ criticial sectiovariables
      • n์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค๋ฉด ?

Algorithm 2

  • Synchronization variables

    • boolean flag[2]; initially flag [๋ชจ๋‘] = false; /no one is in CS/
    • "P[1] ready to enter its critical section" (flag[i] == true)
  • Process P[i]

    do {
      flag[i] = true; /* Pretend I am in */
      while (flag[j]); /* Is he also in ? then wait */
      critical section
      flag[i] = false ; /* I am out now */
      remainder section
    } while(1);
    • Satisfies mutual exclusion, but not progress requirement.
    • ๋‘˜ ๋‹ค 2ํ–‰๊นŒ์ง€ ์ˆ˜ํ–‰ ํ›„ ๋Š์ž„ ์—†์ด ์–‘๋ณดํ•˜๋Š” ์ƒํ™ฉ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

Algorithm 3 (Peterson's Algorithm)

  • Combined synchronization variables of algorithms 1 and 2
  • Process P[i]
do {
  flag [i] = true; /* My intention is to enter ... */
  turn = j;        /* Set to his turn */
  while(flag[j] && turn == j); /* wait only if ... */
  critical section
  flag[i] = false;
  remainder section
}while(1)
  • Meets all three requirements; solves the critical section problem for two processes.
  • Busy Waiting!(=spin lock!) (๊ณ„์† CPU์™€ memory๋ฅผ ์“ฐ๋ฉด์„œ wait)

Synchronization Hardware

  • ํ•˜๋“œ์›จ์–ด์ ์œผ๋กœ Test & modify๋ฅผ atomicํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ ์•ž์˜ ๋ฌธ์ œ๋Š” ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐ
    • Test_and_set(a) ์ธ์ŠคํŠธ๋Ÿญ์…˜์ด ๊ธฐ์กด ๊ฐ’์„ Read ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค. (1.Read, 2.TRUE )
  • Mutual Exclusion with Test & Set
Synchronization variable:
       boolean lock = false;

Process P[i]
        do {
          while (Test_and_Set(lock));
          critical section
          lock = false;
          remainder section
        }

6. Process Synchronization 3

Semaphores

  • ๊ณต์œ ์ž์›์„ ํš๋“ํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•ด์คŒ
  • ์•ž์˜ ๋ฐฉ์‹๋“ค์„ ์ถ”์ƒํ™”์‹œํ‚ด

  • Semaphore S

    • integer variable
    • ์•„๋ž˜์˜ ๋‘ ๊ฐ€์ง€ atomic ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ (P ์—ฐ์‚ฐ(๊ณต์œ ๋ฐ์ดํ„ฐ ํš๋“), V ์—ฐ์‚ฐ(๊ณต์œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•˜๋Š” ๊ณผ์ •))
    P(S) : while(S<=0) do no-op (i.e. wait)
           S--;
    
    If positive, decrement-&-enter.
    Otherwise, wait until positive (busy-wait)
    
    V(S) :
          S++;

Critical Section of n Processes

Synchronization variable
semaphore mutex; /* initially 1 : 1๊ฐœ๊ฐ€ CS์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. */

Process P[i]
do {
  P(mutex);   /* If positive, dec-&-enter,Otherwise, wait. */
  critical section
  V(mutex);   /*  Increment semaphore */
  remainder section

} while(1);
  • busy-wait์€ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•จ(=spin lock)
  • Block & Wakeup ๋ฐฉ์‹์˜ ๊ตฌํ˜„ (=sleep lock) >> next page

Block / Wakeup Implementation

  • Semaphore๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜
typedef struct
{
  int value; /* semaphore */
  struct process *L; /* process wait queue */
} semaphore;
  • block๊ณผ wakeup์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ€์ •

    • block : ์ปค๋„์€ block์„ ํ˜ธ์ถœํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ suspend์‹œํ‚ด ์ด ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ semaphore์— ๋Œ€ํ•œ wait queue์— ๋„ฃ์Œ
    • wakeup(P) : block๋œ ํ”„๋กœ์„ธ์Šค P๋ฅผ wakeup ์‹œํ‚ด ์ด ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ready queue๋กœ ์˜ฎ๊น€

    Semaphore : value-L >> PCB >> PCB >> PCB

Implementation

  • block/wakeup version of P() & V()

  • Semaphore ์—ฐ์‚ฐ์ด ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜๋จ

P(S) : S.value--; /* prepare to enter */
       if (S.value < 0 ) /* Oops, negative, I cannot enter */
       {
          add this process to S.L;
          block();
       }
V(S) : S.value++;
       if (S.value <= 0 ) {
          remove a process P from S.L;
          wakeup(P);
       }

Which is better ?

  • Busy-wait v.s. Block/wakeup

  • Block/wakeup overhead v.s. Critical section ๊ธธ์ด

    • Critical section์˜ ๊ธธ์ด๊ฐ€ ๊ธด ๊ฒฝ์šฐ Block/Wakeup์ด ์ ๋‹น
    • Critical section์˜ ๊ธธ์ด๊ฐ€ ๋งค์šฐ ์งง์€ ๊ฒฝ์šฐ Block/Wakeup ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ busy-wait ์˜ค๋ฒ„ํ—ค๋“œ๋ณด๋‹ค ๋” ์ปค์งˆ ์ˆ˜ ์žˆ์Œ
    • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” Block/wakeup ๋ฐฉ์‹์ด ๋” ์ข‹์Œ

Two Types of Semaphores

  • Counting semaphore

    • ๋„๋ฉ”์ธ์ด 0 ์ด์ƒ์ธ ์ž„์˜์˜ ์ •์ˆ˜๊ฐ’
    • ์ฃผ๋กœ resource counting์— ์‚ฌ์šฉ
  • Binary semaphore (=mutex)

    • 0 ๋˜๋Š” 1 ๊ฐ’๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” semaphore
    • ์ฃผ๋กœ mutual exclusion (lock/unlock) ์‚ฌ์šฉ

Deadlock and Starvation

  • Deadlock
    • ๋‘˜ ์ด์ƒ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ์ƒ๋Œ€๋ฐฉ์— ์˜ํ•ด ์ถฉ์กฑ๋  ์ˆ˜ ์žˆ๋Š” event๋ฅผ ๋ฌดํ•œํžˆ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ˜„์ƒ
  • S์™€ Q๊ฐ€ 1๋กœ ์ดˆ๊ธฐํ™”๋œ semaphore๋ผ ํ•˜์ž.
- P[0] P[1]
- P(S); P(Q); ํ•˜๋‚˜์”ฉ ์ฐจ์ง€.
- P(Q); P(S); ์ƒ๋Œ€๋ฐฉ ๊ฒƒ์„ ์š”๊ตฌ
- ..... .....
- V(S); V(Q); ์—ฌ๊ธฐ์™€์•ผ releaseํ•จ
- V(Q); V(S);
  • Starvation
    • indefinite blocking. ํ”„๋กœ์„ธ์Šค๊ฐ€ suspend๋œ ์ด์œ ์— ํ•ด๋‹นํ•˜๋Š” ์„ธ๋งˆํฌ์–ด ํ์—์„œ ๋น ์ ธ๋‚˜๊ฐˆ ์ˆ˜ ์—†๋Š” ํ˜„์ƒ.

Process Synchronization 3

Classical Problems of Synchronization

  • Bounded-Buffer Problem (Producer-Consumer Problem)
  • Readers and Writers Problem
  • Dining-Philosophers Problem

Bounded-Buffer Problem

(Producer-Consumer Problem)

Buffer in shared memory

Producer

  1. Empty ๋ฒ„ํผ๊ฐ€ ์žˆ๋‚˜์š” ? (์—†์œผ๋ฉด ๊ธฐ๋‹ค๋ฆผ)
  2. ๊ณต์œ ๋ฐ์ดํ„ฐ์— lock์„ ๊ฑด๋‹ค.
  3. Empty buffer์— ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ๋ฐ buffer ์กฐ์ž‘
  4. Lock์„ ํ‘ผ๋‹ค.
  5. Full buffer ํ•˜๋‚˜ ์ฆ๊ฐ€

Consumer

  1. full ๋ฒ„ํผ๊ฐ€ ์žˆ๋‚˜์š” ? (์—†์œผ๋ฉด ๊ธฐ๋‹ค๋ฆผ)
  2. ๊ณต์œ ๋ฐ์ดํ„ฐ์— lock์„ ๊ฑธ๋‹ค.
  3. Full buffer์—์„œ ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๊ณ  buffer ์กฐ์ž‘
  4. Lock์„ ํ‘ผ๋‹ค.
  5. empty buffer ํ•˜๋‚˜ ์ฆ๊ฐ€.

Shared data

  • buffer ์ž์ฒด ๋ฐ buffer ์กฐ์ž‘ ๋ณ€์ˆ˜(empty/full buffer์˜ ์‹œ์ž‘ ์œ„์น˜)

Synchronization variables

  • mutual exclusion -> Need binary semaphore (shared data์˜ mutual exclusion์„ ์œ„ํ•ด)
  • resource count -> Need integer semaphore (๋‚จ์€ full/empty buffer์˜ ์ˆ˜ ํ‘œ์‹œ)

Bounded-Buffer Problem

Synchronization variables

  • semaphore full = 0, empty = n, mutex = 1;

Producer

do {
  ...
  P(empty);
  P(mutex);
  ...
  add x to buffer
  ...
  V(mutex);
  V(full);
}while(1);

Consumer

do {
  P(full)
  P(mutex);
  ...
  remove an item from buffer to y
  ...
  V(mutex);
  V(empty);
  ...
  consume the item in y
  ...
}while(1);

Readers-Writers Problem (1)

  • ํ•œ process๊ฐ€ DB์— write ์ค‘์ผ ๋•Œ ๋‹ค๋ฅธ process๊ฐ€ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋จ
  • read๋Š” ๋™์‹œ์— ์—ฌ๋Ÿฟ์ด ํ•ด๋„ ๋จ
  • solution
    • Writer๊ฐ€ DB์— ์ ‘๊ทผ ํ—ˆ๊ฐ€๋ฅผ ์•„์ง ์–ป์ง€ ๋ชปํ•œ ์ƒํƒœ์—์„œ๋Š” ๋ชจ๋“  ๋Œ€๊ธฐ์ค‘์ธ Reader๋“ค์„ ๋‹ค DB์— ์ ‘๊ทผํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
    • Writer๋Š” ๋Œ€๊ธฐ ์ค‘์ธ Reader๊ฐ€ ํ•˜๋‚˜๋„ ์—†์„ ๋•Œ DB ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ๋‹ค.
    • ์ผ๋‹จ Writer๊ฐ€ DB์— ์ ‘๊ทผ ์ค‘์ด๋ฉด Reader๋“ค์€ ์ ‘๊ทผ์ด ๊ธˆ์ง€๋œ๋‹ค.
    • Writer๊ฐ€ DB์—์„œ ๋น ์ ธ๋‚˜๊ฐ€์•ผ๋งŒ Reader์˜ ์ ‘๊ทผ์ด ํ—ˆ์šฉ๋œ๋‹ค.

Shared data

  • DB ์ž์ฒด
  • readcount; /_ ํ˜„์žฌ DB์— ์ ‘๊ทผ ์ค‘์ธ Reader์˜ ์ˆ˜ _/

Synchronization variables

  • mutex /_ ๊ณต์œ  ๋ณ€์ˆ˜ readcount๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ฝ”๋“œ(critical section)์˜ mutual exclusion ๋ณด์žฅ์„ ์œ„ํ•ด ์‚ฌ์šฉ _/
  • db /_ Reader์™€ writer๊ฐ€ ๊ณต์œ  DB ์ž์ฒด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜๋Š” ์—ญํ•  _/

Readers-Writers Problem (2)

Shared data

int readcount = 0; DB ์ž์ฒด;

Synchronization variables semaphore mutex = 1, db = 1;

Writer

  • P(db);
  • ...
  • writing DB is performed
  • ...
  • V(db)

Reader

  • P(mutex);
  • readcount++
  • if(readcount==1)
  • P(db); /_ block writer _/
  • if (readcount == 1) /_ block writer _/
  • V(mutex); /readers follow/
  • ...
  • reading DB is performed
  • ...
  • P(mutex);
  • readcount--;
  • if(readcount==0) V(db); /enable writer/
  • V(mutex);
  • ! Starvation ๋ฐœ์ƒ ๊ฐ€๋Šฅ

Dining-Philosophers Problem

Synchronization variables

  • semaphore chopstick[5] /_ Initially all values are 1 _/

Philosopher i

do {
  P(chopstick[i]);
  P(chopstick[(i+1)%5]);
  ...
  eat();
  ...
  V(chopstick[i]);
  V(chopstick[(i+1)%5]);
  ...
  think();
  ...

}while(1);

Dining-Philosophers Problem

  • ์•ž์˜ solution์˜ ๋ฌธ์ œ์ 

    • Deadlock ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.
    • ๋ชจ๋“  ์ฒ ํ•™์ž๊ฐ€ ๋™์‹œ์— ๋ฐฐ๊ฐ€ ๊ณ ํŒŒ์ ธ ์™ผ์ชฝ ์ “๊ฐ€๋ฝ์„ ์ง‘์–ด๋ฒ„๋ฆฐ ๊ฒฝ์šฐ
  • ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

    • 4๋ช…์˜ ์ฒ ํ•™์ž๋งŒ์ด ํ…Œ์ด๋ธ”์— ๋™์‹œ์— ์•‰์„ ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.
    • ์ “๊ฐ€๋ฝ์„ ๋‘ ๊ฐœ ๋ชจ๋‘ ์ง‘์„ ์ˆ˜ ์žˆ์„๋•Œ์—๋งŒ ์ “๊ฐ€๋ฝ์„ ์ง‘์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.
    • ๋น„๋Œ€์นญ
      • ์ง์ˆ˜(ํ™€์ˆ˜) ์ฒ ํ•™์ž๋Š” ์™ผ์ชฝ(์˜ค๋ฅธ์ชฝ) ์ “๊ฐ€๋ฝ๋ถ€ํ„ฐ ์ง‘๋„๋ก

Dining-Philosophers Problem

enum {thinking, hungry, eating} state[5];
semaphore self[5]=0;
semaphore mutex=1;

Philosopher i

do {
  pickup(i);
  eat();
  putdown(i);
  think();
}while(1);
void putdown(int i){
  P(mutex);
  state[i] = thinking;
  test((i+4) % 5);
  test((i+4) % 5);
  V(mutex);
}
void pickup(int i){
  P(mutex);
  state[i] = hungry;
  test(i);
  V(mutex);
  P(self[i]);
}
void test(int i){
  if (state[(i+4)%5]!=eating && state[i]==hungry && state[(i+1)%5] != eating){
    state[i] = eating;
    V(self[i]);
  }
}

Monitor

Semaphore์˜ ๋ฌธ์ œ์ 

  • ์ฝ”๋”ฉํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
  • ์ •ํ™•์„ฑ(correctness)์˜ ์ž…์ฆ์ด ์–ด๋ ต๋‹ค.
  • ์ž๋ฐœ์  ํ˜‘๋ ฅ(voluntary cooperation)์ด ํ•„์š”ํ•˜๋‹ค.
  • ํ•œ๋ฒˆ์˜ ์‹ค์ˆ˜๊ฐ€ ๋ชจ๋“  ์‹œ์Šคํ…œ์— ์น˜๋ช…์  ์˜ํ–ฅ

์˜ˆ

  • V(mutex) P(mutex)
  • Critical Section Critical Section
  • P(mutex) P(mutex)

    Mutual exclusion ๊นจ์ง Deadlock

Process Synchronization

  • (ํ”„๋กœ์„ธ์Šค ๋™๊ธฐํ™”)

Concurrency Control

  • (๋ณ‘ํ–‰ ์ œ์–ด)

Monitor

๋™์‹œ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์—์„œ abstract data type์˜ ์•ˆ์ „ํ•œ ๊ณต์œ ๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•œ high-level synchronization construct

monitor monitor-name
{
  shared variable declarations
  procedure body P[1](...){
    ...
  }

   procedure body P[2](...){
    ...
  }

   procedure body P[n](...){
    ...
  }
  {
    initialization code
  }
}

Monitor

  • ๋ชจ๋‹ˆํ„ฐ ๋‚ด์—์„œ๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ํ™œ๋™ ๊ฐ€๋Šฅ

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋™๊ธฐํ™” ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ช…์‹œ์ ์œผ๋กœ ์ฝ”๋”ฉํ•  ํ•„์š”์—†์Œ

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ชจ๋‹ˆํ„ฐ ์•ˆ์—์„œ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด

    • condition variable ์‚ฌ์šฉ
      • condition x, y;
  • Condition variable์€ wait์™€ signal ์—ฐ์‚ฐ์— ์˜ํ•ด์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

    • x.wait();

      • x.wait()์„ invokeํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ x.signal()์„ invokeํ•˜๊ธฐ ์ „๊นŒ์ง€ suspend๋œ๋‹ค.
    • x.signal();

      • x.signal()์€ ์ •ํ™•ํ•˜๊ฒŒ ํ•˜๋‚˜์˜ suspend๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ resumeํ•œ๋‹ค.
        • Suspend๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฉด ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

Dining Philosophers Example

monitor dining_philosopher
{
  enum {thinking, hungry, eating} state[5];
  condition self[5];
  void pickup(int i){
    state[i] = hungry;
    test(i);
    if (state[i] != eating)
        self[i].wait(); /* wait here*/
  }
}


void putdown(int i){
  state[i] = thinking;
  /* test left and right neighbors */
  test((i+4) % 5); /* if L is waiting */
  test((i+1) % 5);
}

void test(int i){
  if ( (state[(i+4) % 5] != eating) && (state[i] == hungry) && (state[(i+1) %5] != eating)){
    state[i] = eating;
    self[i].signal(); /*wake up Pi*/
  }
}

void init(){
  for(int i =0; i < 5;  i++)
    state[i] = thinking;
}

Each Philosopher:
  {
    pickup(i);
    eat();
    putdown(i);
    think();
  } while(1);

7. Deadlock

The Deadlock Problem

Deadlock

  • ์ผ๋ จ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์„œ๋กœ๊ฐ€ ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ block๋œ ์ƒํƒœ

Resource (์ž์›)

  • ํ•˜๋“œ์›จ์–ด, ์†Œํ”„ํŠธ์›จ์–ด ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๊ฐœ๋…
  • (์˜ˆ) I/O device, CPU cycle, memory space, semaphore ๋“ฑ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ์ ˆ์ฐจ
    • Request, Allocate, Use, Release

Deadlock Example 1

  • ์‹œ์Šคํ…œ์— 2๊ฐœ์˜ tape drive๊ฐ€ ์žˆ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค P[1]๊ณผ P[2] ๊ฐ๊ฐ์ด ํ•˜๋‚˜์˜ tape drive๋ฅผ ๋ณด์œ ํ•œ ์ฑ„ ๋‹ค๋ฅธ ํ•˜๋‚˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋‹ค.

Deadlock Example 2

  • Binary semaphores A and B
    • P[0] : P[A], P[B]
    • P[1] : P[B], P[A]

Deadlock ๋ฐœ์ƒ์˜ 4๊ฐ€์ง€ ์กฐ๊ฑด

Mutual exclusion

  • ๋งค ์ˆœ๊ฐ„ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ์ด ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

No preemption

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์„ ์Šค์Šค๋กœ ๋‚ด์–ด๋†“์„ ๋ฟ ๊ฐ•์ œ๋กœ ๋นผ์•—๊ธฐ์ง€ ์•Š์Œ

Hold and wait

  • ์ž์›์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ์ž์›์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ ๋ณด์œ  ์ž์›์„ ๋†“์ง€์•Š๊ณ  ๊ณ„์† ๊ฐ€์ง€๊ณ  ์žˆ์Œ

Circular wait

  • ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ„์— ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋˜์–ด์•ผํ•จ
  • ํ”„๋กœ์„ธ์Šค P[0], P[1], ..., P[n]์ด ์žˆ์„ ๋•Œ
    • P[0]์€ P[1]์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
    • P[1]์€ P[2]์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
    • P[n-1]์€ P[n]์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ
    • P[n]์€ P[0]์ด ๊ฐ€์ง„ ์ž์›์„ ๊ธฐ๋‹ค๋ฆผ

Resource-Allocation Graph (์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„) 1

Vertex

  • Process P = {P[1], P[2], P[3]... P[n]}
  • Resource R = {R[1],R[2], ... R[n]}

Edge

  • request edge P[i] > R[j]
  • assignment edge R[j] > P[i]

Resource-Allocation Graph (์ž์›ํ• ๋‹น ๊ทธ๋ž˜ํ”„) 2

๊ทธ๋ž˜ํ”„์— cycle์ด ์—†์œผ๋ฉด deadlock์ด ์•„๋‹ˆ๋‹ค.

๊ทธ๋ž˜ํ”„์— cycle์ด ์žˆ์œผ๋ฉด

  • if only one instance per resource type, then deadlock
  • if several instances per resource type, possibility of deadlock

Deadlock์˜ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

Deadlock Prevention

  • ์ž์› ํ• ๋‹น์‹œ Deadlock์˜ 4๊ฐ€์ง€ ํ•„์š” ์กฐ๊ฑด ์ค‘ ์–ด๋Š ํ•˜๋‚˜๊ฐ€ ๋งŒ์กฑ๋˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ

Deadlock Avoidance

  • ์ž์›์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ deadlock์˜ ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์›์„ ํ• ๋‹น
  • ์‹œ์Šคํ…œ state๊ฐ€ ์›๋ž˜ state๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž์› ํ• ๋‹น

Deadlock Detection and recovery

  • Deadlock ๋ฐœ์ƒ์€ ํ—ˆ์šฉํ•˜๋˜ ๊ทธ์— ๋Œ€ํ•œ detection ๋ฃจํ‹ด์„ ๋‘์–ด deadlock ๋ฐœ๊ฒฌ์‹œ recover

Deadlock Ignorance

  • Deadlock์„ ์‹œ์Šคํ…œ์ด ์ฑ…์ž„์ง€์ง€ ์•Š์Œ
  • UNIX๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ OS๊ฐ€ ์ฑ„ํƒ

Deadlock Prevention

Mutual Exclusion

  • ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋˜๋Š” ์ž์›์˜ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ์„ฑ๋ฆฝํ•ด์•ผ ํ•จ

Hold and WAit

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์›์„ ์š”์ฒญํ•  ๋•Œ ๋‹ค๋ฅธ ์–ด๋–ค ์ž์›๋„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
  • ๋ฐฉ๋ฒ• 1. ํ”„๋กœ์„ธ์Šค ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ํ• ๋‹น๋ฐ›๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋ฐฉ๋ฒ• 2. ์ž์›์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋ณด์œ  ์ž์›์„ ๋ชจ๋‘ ๋†“๊ณ  ๋‹ค์‹œ ์š”์ฒญ

No Preemption

  • process๊ฐ€ ์–ด๋–ค ์ž์›์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ ๋ณด์œ ํ•œ ์ž์›์ด ์„ ์ ๋จ
  • ๋ชจ๋“  ํ•„์š”ํ•œ ์ž์›์„ ์–ป์„ ์ˆ˜ ์žˆ์„ ๋•Œ ๊ทธ ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์‹œ ์‹œ์ž‘๋œ๋‹ค.
  • State๋ฅผ ์‰ฝ๊ฒŒ saveํ•˜๊ณ  restoreํ•  ์ˆ˜ ์žˆ๋Š” ์ž์›์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ (CPU, memory)

Circular Wait

  • ๋ชจ๋“  ์ž์› ์œ ํ˜•์— ํ• ๋‹น ์ˆœ์„œ๋ฅผ ์ •ํ•˜์—ฌ ์ •ํ•ด์ง„ ์ˆœ์„œ๋Œ€๋กœ๋งŒ ์ž์› ํ• ๋‹น
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ˆœ์„œ๊ฐ€ 3์ธ ์ž์› R[i]๋ฅผ ๋ณด์œ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆœ์„œ๊ฐ€ 1์ธ ์ž์›R[j]๋ฅผ ํ• ๋‹น๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  R[i]๋ฅผ release ํ•ด์•ผํ•œ๋‹ค.

Utilication ์ €ํ•˜, throughput ๊ฐ์†Œ, starvation ๋ฌธ์ œ

Deadlock Avoidance

Deadlock avoidance

  • ์ž์› ์š”์ฒญ์— ๋Œ€ํ•œ ๋ถ€๊ฐ€์ •๋ณด๋ฅผ ์ด์šฉํ•ด์„œ ์ž์› ํ• ๋‹น์ด deadlock์œผ๋กœ ๋ถ€ํ„ฐ ์•ˆ์ „(safe)ํ•œ์ง€๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์‚ฌํ•ด์„œ ์•ˆ์ „ํ•œ ๊ฒฝ์šฐ์—๋งŒ ํ• ๋‹น
  • ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ๋ชจ๋ธ์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฐ ์ž์›๋ณ„ ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ์„ ์–ธํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž„

safe state

  • ์‹œ์Šคํ…œ ๋‚ด์˜ ํ”„๋กœ์„ธ์Šค๋“ค์— ๋Œ€ํ•œ safe sequence๊ฐ€ ์กด์žฌํ•˜๋Š” ์ƒํƒœ

safe sequence

  • ํ”„๋กœ์„ธ์Šค์˜ sequence <P[1], P[2], ... P[n]>์ด safeํ•˜๋ ค๋ฉด P[i] (1<=i<=n)์˜ ์ž์› ์š”์ฒญ์ด "๊ฐ€์šฉ ์ž์› + ๋ชจ๋“  Pj์˜ ๋ณด์œ  ์ž์›"์— ์˜ํ•ด ์ถฉ์กฑ๋˜์–ด์•ผ ํ•จ
  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ๋‹ค์Œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์„ ๋ณด์žฅ
    • P[i]์˜ ์ž์› ์š”์ฒญ์ด ์ฆ‰์‹œ ์ถฉ์กฑ๋  ์ˆ˜ ์—†์œผ๋ฉด ๋ชจ๋“  Pj๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    • P[i-1]์ด ์ข…๋ฃŒ๋˜๋ฉด P[i]์˜ ์ž์› ์š”์ฒญ์„ ๋งŒ์กฑ์‹œ์ผœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

Deadlock Avoidance

์‹œ์Šคํ…œ์ด safe state์— ์žˆ์œผ๋ฉด

  • no deadlock

์‹œ์Šคํ…œ์ด unsafe state์— ์žˆ์œผ๋ฉด

  • possibillity of deadlock

Deadlock Avoidance

  • ์‹œ์Šคํ…œ์ด unsafe state์— ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด์žฅ
  • 2๊ฐ€์ง€ ๊ฒฝ์šฐ์˜ avoidance ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Single instance per resource types
      • Resource Allocation Graph algorithm ์‚ฌ์šฉ
    • Multiple instances per resource types
      • Banker's Algorithm ์‚ฌ์šฉ

Banker's Algorithm

๊ฐ€์ •

  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ์ž์›์˜ ์ตœ๋Œ€ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ฏธ๋ฆฌ ๋ช…์‹œ
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์š”์ฒญ ์ž์›์„ ๋ชจ๋‘ ํ• ๋‹น๋ฐ›์€ ๊ฒฝ์šฐ ์œ ํ•œ ์‹œ๊ฐ„ ์•ˆ์— ์ด๋“ค ์ž์›์„ ๋‹ค์‹œ ๋ฐ˜๋‚ฉํ•œ๋‹ค.

๋ฐฉ๋ฒ•

  • ๊ธฐ๋ณธ ๊ฐœ๋… : ์ž์›์š”์ฒญ์‹œ safe ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ๊ฒฝ์šฐ์—๋งŒ ํ• ๋‹น
  • ์ด ์š”์ฒญ ์ž์›์˜ ์ˆ˜๊ฐ€ ๊ฐ€์šฉ ์ž์› ์ˆ˜๋ณด๋‹ค ์ ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒ (๊ทธ๋Ÿฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—†์œผ๋ฉด unsafe ์ƒํƒœ)
  • ๊ทธ๋Ÿฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์›์„ ํ• ๋‹น
  • ํ• ๋‹น๋ฐ›์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ชจ๋“  ์ž์›์„ ๋ฐ˜๋‚ฉ
  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ด๋Ÿฌํ•œ ๊ณผ์ • ๋ฐ˜๋ณต

Example of Banker's Algorithm

5 processes P[0], P[1], P[2], P[3], P[4]

3 resource types A(10), B(5), C(7) instances

Snapshot at Time T[0]

Allocation Max Available Need (Max - Allocation)
A B C A B C A B C A B C
P[0] 0 1 0 7 5 3 3 3 2 7 4 3
P[1] 2 0 0 3 2 2 1 2 2
P[2] 3 0 2 9 0 2 6 0 0
P[3] 2 1 1 2 2 2 0 1 1
P[4] 0 0 2 4 3 3 4 3 1
  • sequence < P[1], P[3], P[4], P[2],P[0]>๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ์‹œ์Šคํ…œ์€ safe state

Deadlock Detection and Recovery

Recovery

Process termination

  • Abort all deadlocked processes
  • Abort one processes at a time until the deadlock cycle is eliminated

Resource Preemption

  • ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•  victim์˜ ์„ ์ •
  • safe state๋กœ rollbackํ•˜์—ฌ process๋ฅผ restart
  • Starvation ๋ฌธ์ œ
    • ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์†ํ•ด์„œ victim์œผ๋กœ ์„ ์ •๋˜๋Š” ๊ฒฝ์šฐ
    • cost factor์— rollback ํšŸ์ˆ˜๋„ ๊ฐ™์ด ๊ณ ๋ ค

Deadlock Ignorance

Deadlock์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์•„๋ฌด๋Ÿฐ ์กฐ์น˜๋„ ์ทจํ•˜์ง€ ์•Š์Œ

  • Deadlock์ด ๋งค์šฐ ๋“œ๋ฌผ๊ฒŒ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ deadlock์— ๋Œ€ํ•œ ์กฐ์น˜ ์ž์ฒด๊ฐ€ ๋” ํฐ overhead์ผ ์ˆ˜ ์žˆ์Œ
  • ๋งŒ์•ฝ, ์‹œ์Šคํ…œ์— deadlock์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋Š๋‚€ ํ›„ ์ง์ ‘ process๋ฅผ ์ฃฝ์ด๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ€์ฒ˜
  • UNIX, Window ๋“ฑ ๋Œ€๋ถ€๋ถ„์˜ ๋ฒ”์šฉ OS๊ฐ€ ์ฑ„ํƒ

Memory Management (1)

Logical vs. Physical Address

Logical address (=virtual address)

  • ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ€์ง€๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„
  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค 0๋ฒˆ์ง€๋ถ€ํ„ฐ ์‹œ์ž‘
  • CPU๊ฐ€ ๋ณด๋Š” ์ฃผ์†Œ๋Š” logical address์ž„

Physical address

  • ๋ฉ”๋ชจ๋ฆฌ์— ์‹ค์ œ ์˜ฌ๋ผ๊ฐ€๋Š” ์œ„์น˜

  • ์ฃผ์†Œ ๋ฐ”์ธ๋”ฉ : ์ฃผ์†Œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ

    • Symbolic Address -> Logical Address -> Physical address (์ด ์‹œ์ ์€ ์–ธ์ œ?, next page)

์ฃผ์†Œ ๋ฐ”์ธ๋”ฉ (Address Binding )

Compile time binding

  • ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ(physical address)๊ฐ€ ์ปดํŒŒ์ผ ์‹œ ์•Œ๋ ค์ง
  • ์‹œ์ž‘ ์œ„์น˜ ๋ณ€๊ฒฝ์‹œ ์žฌ์ปดํŒŒ์ผ
  • ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ ˆ๋Œ€ ์ฝ”๋“œ(absolute code) ์ƒ์„ฑ

Load time binding

  • Loader์˜ ์ฑ…์ž„ํ•˜์— ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋ถ€์—ฌ
  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žฌ๋ฐฐ์น˜๊ฐ€๋Šฅ์ฝ”๋“œ(relocatable code)๋ฅผ ์ƒ์„ฑํ•œ ๊ฒฝ์šฐ ๊ฐ€๋Šฅ

Execution time binding (=Run time binding)

  • ์ˆ˜ํ–‰์ด ์‹œ์ž‘๋œ ์ดํ›„์—๋„ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒ ์œ„์น˜๋ฅผ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ์Œ
  • CPU๊ฐ€ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•  ๋•Œ๋งˆ๋‹ค binding์„ ์ ๊ฒ€(address mapping table)
  • ํ•˜๋“œ์›จ์–ด์ ์ธ ์ง€์›์ด ํ•„์š”(e.g., base and limit registers, MMU)

์ฃผ์†Œ๋ฐ”์ธ๋”ฉ (Address Binding)

  • ์†Œ์Šค์ฝ”๋“œ(Symbolic address) > ์ปดํŒŒ์ผ > ์‹คํ–‰ํŒŒ์ผ(Logical address) > ์‹คํ–‰์‹œ์ž‘ > ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ(Physical address)
  • ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐ”์ธ๋”ฉ ํ•˜๋Š” ๋ฐฉ๋ฒ• : (Compile time binding, Load time binding, Run time binding)

Memory-Management Unit

MMU(Memory-Management Unit)

  • logical address๋ฅผ physical address๋กœ ๋งคํ•‘ํ•ด ์ฃผ๋Š” Hardware device

MMU scheme

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์—์„œ ์ˆ˜ํ–‰๋˜๋ฉฐ ์ƒ์„ฑํ•ด๋‚ด๋Š” ๋ชจ๋“  ์ฃผ์†Œ๊ฐ’์— ๋Œ€ํ•ด base register(=relocation register)์˜ ๊ฐ’์„ ๋”ํ•œ๋‹ค.

user program

  • logical address๋งŒ์„ ๋‹ค๋ฃฌ๋‹ค.
  • ์‹ค์ œ physical address๋ฅผ ๋ณผ ์ˆ˜ ์—†์œผ๋ฉฐ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.

Hardware Support for Address Translation

  • ์šด์˜์ฒด์ œ ๋ฐ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ
    • Relocation register : ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์˜ ์ตœ์†Œ๊ฐ’ (=base register)
    • Limit register : ๋…ผ๋ฆฌ์  ์ฃผ์†Œ์˜; ๋ฒ”์œ„

Some Terminologies

  1. Dynamic Loading

  2. Dynamic Linking

  3. Overlays

  4. Swapping

Dynamic Loading

  • ํ”„๋กœ์„ธ์Šค ์ „์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฏธ๋ฆฌ ๋‹ค ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•ด๋‹น ๋ฃจํ‹ด์ด ๋ถˆ๋ ค์งˆ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ์— load ํ•˜๋Š” ๊ฒƒ
  • memory utilization์˜ ํ–ฅ์ƒ

  • ๊ฐ€๋”์‹ ์‚ฌ์šฉ๋˜๋Š” ๋งŽ์€ ์–‘์˜ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ์œ ์šฉ

    • ์˜ˆ : ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฃจํ‹ด
  • ์šด์˜์ฒด์ œ์˜ ํŠน๋ณ„ํ•œ ์ง€์› ์—†์ด ํ”„๋กœ๊ทธ๋žจ ์ž์ฒด์—์„œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ(OS๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ง€์› ๊ฐ€๋Šฅ)

  • Loading : ๋ฉ”๋ชจ๋ฆฌ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ

Overlays

  • ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค์˜ ๋ถ€๋ถ„ ์ค‘ ์‹ค์ œ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ์„ ์˜ฌ๋ฆผ
  • ํ”„๋กœ์„ธ์Šค์˜ ํฌ๊ธฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํด ๋•Œ ์œ ์šฉ
  • ์šด์˜์ฒด์ œ์˜ ์ง€์›์—†์ด ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๊ตฌํ˜„
  • ์ž‘์€ ๊ณต๊ฐ„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ์ดˆ์ฐฝ๊ธฐ ์‹œ์Šคํ…œ์—์„œ ์ˆ˜์ž‘์—…์œผ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ตฌํ˜„
    • Manual Overlay
    • ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋งค์šฐ ๋ณต์žก

Swapping

  • Swapping
    • ํ”„๋กœ์„ธ์Šค๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ backing store๋กœ ์ซ“์•„๋‚ด๋Š” ๊ฒƒ
  • Backing store(=swap area)
    • ๋””์Šคํฌ
      • ๋งŽ์€ ์‚ฌ์šฉ์ž์˜ ํ”„๋กœ์„ธ์Šค ์ด๋ฏธ์ง€๋ฅผ ๋‹ด์„ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋น ๋ฅด๊ณ  ํฐ ์ €์žฅ ๊ณต๊ฐ„
  • Swap in / Swap out
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(swapper)์— ์˜ํ•ด swap out ์‹œํ‚ฌ ํ”„๋กœ์„ธ์Šค ์„ ์ •
    • priority-based CPU scheduling algorithm
      • priority๊ฐ€ ๋‚ฎ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ swapped out ์‹œํ‚ด
      • priority๊ฐ€ ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ ค ๋†“์Œ
    • Compile time ํ˜น์€ load time binding์—์„œ๋Š” ์›๋ž˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋กœ swap in ํ•ด์•ผํ•จ
    • Execution time binding์—์„œ๋Š” ์ถ”ํ›„ ๋นˆ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์•„๋ฌด ๊ณณ์—๋‚˜ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ์Œ
    • swap time์€ ๋Œ€๋ถ€๋ถ„ transfer time(swap๋˜๋Š” ์–‘์— ๋น„๋ก€ํ•˜๋Š” ์‹œ๊ฐ„)์ž„

Dynamic Linking

  • Linking์„ ์‹คํ–‰ ์‹œ๊ฐ„(execution time)๊นŒ์ง€ ๋ฏธ๋ฃจ๋Š” ๊ธฐ๋ฒ•
  • Static linking
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํŒŒ์ผ ์ฝ”๋“œ์— ํฌํ•จ๋จ
    • ์‹คํ–‰ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ์ปค์ง
    • ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„(eg. printf ํ•จ์ˆ˜์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ)
  • Dynamic linking
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹คํ–‰์‹œ ์—ฐ๊ฒฐ(link)๋จ
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ ๋ถ€๋ถ„์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฃจํ‹ด์˜ ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•œ stub์ด๋ผ๋Š” ์ž‘์€ ์ฝ”๋“œ๋ฅผ ๋‘ 
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์œผ๋ฉด ๊ทธ ๋ฃจํ‹ด์˜ ์ฃผ์†Œ๋กœ ๊ฐ€๊ณ  ์—†์œผ๋ฉด ๋””์Šคํฌ์—์„œ ์ฝ์–ด์˜ด
    • ์šด์˜์ฒด์ œ์˜ ๋„์›€์ด ํ•„์š”

Allocation of Physical Memory

  • ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋‘ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜์–ด ์‚ฌ์šฉ

    • OS ์ƒ์ฃผ ์˜์—ญ
      • interrupt vector์™€ ํ•จ๊ป˜ ๋‚ฎ์€ ์ฃผ์†Œ ์˜์—ญ ์‚ฌ์šฉ
    • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ์˜์—ญ
      • ๋†’์€ ์ฃผ์†Œ ์˜์—ญ ์‚ฌ์šฉ
  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค ์˜์—ญ์˜ ํ• ๋‹น ๋ฐฉ๋ฒ•

    • Contiguous allocation
      • ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฐ์†์ ์ธ ๊ณต๊ฐ„์— ์ ์žฌ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ
        • Fixed partition allocation
        • Variable partition allocation
    • Noncontiguous allocation
      • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ์˜์—ญ์— ๋ถ„์‚ฐ๋˜์–ด ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ์Œ
        • Paging
        • Segmentation
        • Paged Segmentation

Contiguous Allocation

  • Contiguous allocation

    • ๊ณ ์ •๋ถ„ํ• (Fixed partition) ๋ฐฉ์‹

      • ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช‡ ๊ฐœ์˜ ์˜๊ตฌ์  ๋ถ„ํ• (partition)๋กœ ๋‚˜๋ˆ”
      • ๋ถ„ํ• ์˜ ํฌ๊ธฐ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ๋ฐฉ์‹๊ณผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ์‹์ด ์กด์žฌ
      • ๋ถ„ํ• ๋‹น ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ ์ ์žฌ
      • ์œตํ†ต์„ฑ์ด ์—†์Œ
        • ๋™์‹œ์— ๋ฉ”๋ชจ๋ฆฌ์— load๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ˆ˜๊ฐ€ ๊ณ ์ •๋จ
        • ์ตœ๋Œ€ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ ํ”„๋กœ๊ทธ๋žจ ํฌ๊ธฐ ์ œํ•œ
      • Internal fragmentation ๋ฐœ์ƒ(external fragmentation๋„ ๋ฐœ์ƒ)
    • ๊ฐ€๋ณ€๋ถ„ํ• (Variable partition) ๋ฐฉ์‹

      • ํ”„๋กœ๊ทธ๋žจ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ ๋ คํ•ด์„œ ํ• ๋‹น
      • ๋ถ„ํ• ์˜ ํฌ๊ธฐ, ๊ฐœ์ˆ˜๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•จ
      • ๊ธฐ์ˆ ์  ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ํ•„์š”
      • External fragmentation ๋ฐœ์ƒ

Contiguous Allocation 2

  • Hole
    • ๊ฐ€์šฉ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„
    • ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ hole๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ ์—ฌ๋Ÿฌ ๊ณณ์— ํฉ์–ด์ ธ ์žˆ์Œ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ์ˆ˜์šฉ๊ฐ€๋Šฅํ•œ hole์„ ํ• ๋‹น
    • ์šด์˜์ฒด์ œ๋Š” ๋‹ค์Œ์˜ ์ •๋ณด๋ฅผ ์œ ์ง€
      • a) ํ• ๋‹น ๊ณต๊ฐ„
      • b) ๊ฐ€์šฉ ๊ณต๊ฐ„(hole)

Contiguous Allocation 3

Dynamic Storage-Allocation Problem

  • ๊ฐ€๋ณ€ ๋ถ„ํ•  ๋ฐฉ์‹์—์„œ size n์ธ ์š”์ฒญ์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ์ ์ ˆํ•œ hole์„ ์ฐพ๋Š” ๋ฌธ์ œ

    • First-fit
      • Size๊ฐ€ n ์ด์ƒ์ธ ๊ฒƒ ์ค‘ ์ตœ์ดˆ๋กœ ์ฐพ์•„์ง€๋Š” hole์— ํ• ๋‹น
    • Best-fit
      • Size๊ฐ€ n ์ด์ƒ์ธ ๊ฐ€์žฅ ์ž‘์€ hole์„ ์ฐพ์•„์„œ ํ• ๋‹น
      • Hole๋“ค์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํฌ๊ธฐ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ชจ๋“  hole์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผํ•จ
      • ๋งŽ์€ ์ˆ˜์˜ ์•„์ฃผ ์ž‘์€ hole๋“ค์ด ์ƒ์„ฑ๋จ
    • Worst-fit
      • ๊ฐ€์žฅ ํฐ hole์— ํ• ๋‹น
      • ์—ญ์‹œ ๋ชจ๋“  ๋ฆฌ์ŠคํŠธ๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•จ
      • ์ƒ๋Œ€์ ์œผ๋กœ ์•„์ฃผ ํฐ hole๋“ค์ด ์ƒ์„ฑ๋จ
  • First-fit๊ณผ best-fit์ด worst-fit๋ณด๋‹ค ์†๋„์™€ ๊ณต๊ฐ„ ์ด์šฉ๋ฅ  ์ธก๋ฉด์—์„œ ํšจ๊ณผ์ ์ธ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง(์‹คํ—˜์ ์ธ ๊ฒฐ๊ณผ)

Contiguous Allocation

  • compaction
    • external fragmentation ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•
    • ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ•œ๊ตฐ๋ฐ๋กœ ๋ชฐ๊ณ  hole๋“ค์„ ๋‹ค๋ฅธ ํ•œ ๊ณณ์œผ๋กœ ๋ชฐ์•„ ํฐ block์„ ๋งŒ๋“œ๋Š” ๊ฒƒ
    • ๋งค์šฐ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž„
    • ์ตœ์†Œํ•œ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ด๋™์œผ๋กœ compactioํ•˜๋Š” ๋ฐฉ๋ฒ•(๋งค์šฐ ๋ณต์žกํ•œ ๋ฌธ์ œ)
    • Compaction์€ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ๊ฐ€ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋™์ ์œผ๋กœ ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

Implementation of Page Table

  • Page table์€ main memory์— ์ƒ์ฃผ
  • Page-table base register (PTBR)๊ฐ€ page table์„ ๊ฐ€๋ฆฌํ‚ด
  • Page-table length register (PTLR)๊ฐ€ ํ…Œ์ด๋ธ” ํฌ๊ธฐ๋ฅผ ๋ณด๊ด€
  • ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์—ฐ์‚ฐ์—๋Š” 2๋ฒˆ์˜ memory access ํ•„์š”
  • page table ์ ‘๊ทผ 1๋ฒˆ, ์‹ค์ œ data/instruction ์ ‘๊ทผ 1๋ฒˆ
  • ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด associative register ํ˜น์€ translation look-aside buffer (TLB)๋ผ ๋ถˆ๋ฆฌ๋Š” ๊ณ ์†์˜ lookup hardware cache ์‚ฌ์šฉ

Associative Register

  • Associative registers (TLB) : parallel search๊ฐ€ ๊ฐ€๋Šฅ
    • TLB์—๋Š” page table ์ค‘ ์ผ๋ถ€๋งŒ ์กด์žฌ.
  • Address translation
    • page table ์ค‘ ์ผ๋ถ€๊ฐ€ associative register์— ๋ณด๊ด€๋˜์–ด์žˆ์Œ
    • ๋งŒ์•ฝ ํ•ด๋‹น page #๊ฐ€ associative register์— ์žˆ๋Š” ๊ฒฝ์šฐ ๊ณง๋ฐ”๋กœ frame#์„ ์–ป์Œ
    • TLB๋Š” context switch ๋•Œ flush (remove old entries)

Effective Access Time

  • Associative register lookup time = ์—ก์‹ค๋ก 
  • memory cycle time = 1
  • Hit ratio = ์•ŒํŒŒ
    • associatvie register์—์„œ ์ฐพ์•„์ง€๋Š” ๋น„์œจ
  • Effective Access Time(EAT)

Two-Level Page Table

  • ํ˜„์žฌ์˜ ์ปดํ“จํ„ฐ๋Š” address space๊ฐ€ ๋งค์šฐ ํฐ ํ”„๋กœ๊ทธ๋žจ ์ง€์›
    • 32 bit address ์‚ฌ์šฉ์‹œ : 2^^32(4G)์˜ ์ฃผ์†Œ ๊ณต๊ฐ„
      • page size๊ฐ€ 4K์‹œ 1M๊ฐœ์˜ page table entry ํ•„์š”
      • ๊ฐ page entry๊ฐ€ 4B์‹œ ํ”„๋กœ์„ธ์Šค๋‹น 4M์˜ page table ํ•„์š”
      • ๊ทธ๋Ÿฌ๋‚˜, ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ 4G์˜ ์ฃผ์†Œ ๊ณต๊ฐ„ ์ค‘ ์ง€๊ทนํžˆ ์ผ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ page table ๊ณต๊ฐ„์ด ์‹ฌํ•˜๊ฒŒ ๋‚ญ๋น„๋จ
    • page table ์ž์ฒด๋ฅผ page๋กœ ๊ตฌ์„ฑ
    • ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋Œ€ํ•œ outer page table์˜ ์—”ํŠธ๋ฆฌ ๊ฐ’์€ NULL(๋Œ€์‘ํ•˜๋Š” inner page table์ด ์—†์Œ)

Two-Level Paging Example

  • logical address (on 32-bit machine with 4K page size)์˜ ๊ตฌ์„ฑ

    • 20 bit์˜ page number
    • 12 bit์˜ page offset
  • page table ์ž์ฒด๊ฐ€ page๋กœ ๊ตฌ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— page number๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋‰œ๋‹ค.

    • 10-bit์˜ page number.
    • 10-bit์˜ page offset.
  • ๋”ฐ๋ผ์„œ logical address๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    page number page offset
    p1 p2 d
    10 10 12
  • P1์€ outer page table์˜ index์ด๊ณ 
  • P2๋Š” outer page table์˜ page์—์„œ์˜ ๋ณ€์œ„(displacement)

Multilevel Paging and Performance

  • Address space๊ฐ€ ๋” ์ปค์ง€๋ฉด ๋‹ค๋‹จ๊ณ„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํ•„์š”
  • ๊ฐ ๋‹จ๊ณ„์˜ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์ด ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋ฏ€๋กœ logical address์˜ physical address ๋ณ€ํ™˜์— ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ํ•„์š”
  • TLB๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ.
  • 4๋‹จ๊ณ„ ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ
    • ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์ด 100ns, TLB ์ ‘๊ทผ ์‹œ๊ฐ„์ด 20ns์ด๊ณ 
    • TLB hit ratio๊ฐ€ 98%์ธ ๊ฒฝ์šฐ
      • effective memory access time = 0.98 _ 120 + 0.02 _ 520 = 128 nanoseconds.
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ฃผ์†Œ๋ณ€ํ™˜์„ ์œ„ํ•ด 28ns๋งŒ ์†Œ์š”

Memory Protection

  • Page table์˜ ๊ฐ entry๋งˆ๋‹ค ์•„๋ž˜์˜ bit๋ฅผ ๋‘”๋‹ค.

    • Protection bit

      • page์— ๋Œ€ํ•œ ์ ‘๊ทผ ๊ถŒํ•œ (read/write/read-only)
    • Valid-invalid bit

      • "valid"๋Š” ํ•ด๋‹น ์ฃผ์†Œ์˜ frame์— ๊ทธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์œ ํšจํ•œ ๋‚ด์šฉ์ด ์žˆ์Œ์„ ๋œปํ•จ (์ ‘๊ทผ ํ—ˆ์šฉ)

      • "invalid"๋Š” ํ•ด๋‹น ์ฃผ์†Œ์˜ frame์— ์œ ํšจํ•œ ๋‚ด์šฉ์ด ์—†์Œ*์„ ๋œปํ•จ(์ ‘๊ทผ ๋ถˆํ—ˆ)

      • "*" i) ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ทธ ์ฃผ์†Œ ๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

      • "*" ii) ํ•ด๋‹น ํŽ˜์ด์ง€๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์žˆ์ง€ ์•Š๊ณ  swap area์— ์žˆ๋Š” ๊ฒฝ์šฐ

Inverted Page Table

  • page table์ด ๋งค์šฐ ํฐ ์ด์œ 

    • ๋ชจ๋“  process๋ณ„๋กœ ๊ทธ logical address์— ๋Œ€์‘ํ•˜๋Š” ๋ชจ๋“  page์— ๋Œ€ํ•ด page table entry๊ฐ€ ์กด์žฌ.
    • ๋Œ€์‘ํ•˜๋Š” page๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋“  ์•„๋‹ˆ๋“  ๊ฐ„์— page table์—๋Š” entry๋กœ ์กด์žฌ
  • Inverted page table

    • Page frame ํ•˜๋‚˜๋‹น page table์— ํ•˜๋‚˜์˜ entry๋ฅผ ๋‘” ๊ฒƒ (system-wide)
    • ๊ฐ page table entry๋Š” ๊ฐ๊ฐ์˜ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์˜ page frame์ด ๋‹ด๊ณ  ์žˆ๋Š” ๋‚ด์šฉ ํ‘œ์‹œ(process-id, process์˜ logical address)
    • ๋‹จ์ 
      • ํ…Œ์ด๋ธ” ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•ด์•ผํ•จ
    • ์กฐ์น˜
      • associative register ์‚ฌ์šฉ (expensive)

Shared Page

  • Shared code
    • Re-entrant Code (=Pure code)
    • read-only๋กœ ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— ํ•˜๋‚˜์˜ code๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ(eg, text editors, compilers, window systems)
    • Shared code๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ logical address space์—์„œ ๋™์ผํ•œ ์œ„์น˜ ์žˆ์–ด์•ผํ•จ
  • Private code and data
    • ๊ฐ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋…์ž์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆผ
    • Private data๋Š” logical address space์˜ ์•„๋ฌด ๊ณณ์— ์™€๋„ ๋ฌด๋ฐฉ

Segmentation

  • ํ”„๋กœ๊ทธ๋žจ์€ ์˜๋ฏธ ๋‹จ์œ„์ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ segment๋กœ ๊ตฌ์„ฑ
    • ์ž‘๊ฒŒ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ํ•จ์ˆ˜ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ์„ธ๊ทธ๋จผํŠธ๋กœ ์ •์˜
    • ํฌ๊ฒŒ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ์ •์˜ ๊ฐ€๋Šฅ
    • ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” code, data, stack ๋ถ€๋ถ„์ด ํ•˜๋‚˜์”ฉ์˜ ์„ธ๊ทธ๋จผํŠธ๋กœ ์ •์˜๋จ
  • Segment๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ logical unit๋“ค์ž„
main(),
function,
global variables,
stack,
symbol table, arrays

Segmentation Architecture

  • Logical address๋Š” ๋‹ค์Œ์˜ ๋‘ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ

    • <segment-number, offset>
  • Segment table

    • each table entry has:
      • base - starting physical address of the segment
      • limit - length of the segment
  • Segment-table base register(STBR)

    • ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์—์„œ์˜ segment table์˜ ์œ„์น˜
  • Segment-table length register(STLR)

    • ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•˜๋Š” segment์˜ ์ˆ˜
      • segment number s is legal if s < STLR

Segmentation Architecture (Cont.)

  • Protection
    • ๊ฐ ์„ธ๊ทธ๋จผํŠธ ๋ณ„๋กœ protection bit๊ฐ€ ์žˆ์Œ
    • Each entry:
      • Valid bit = 0 > illegal segment
      • Read/Write/Execution ๊ถŒํ•œ bit
  • Sharing
    • shared segment
    • same segment number
    • segment๋Š” ์˜๋ฏธ๋‹จ์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณต์œ (sharing)๊ณผ ๋ณด์•ˆ(protection)์— ์žˆ์–ด paging๋ณด๋‹ค ํ›จ์”ฌ ํšจ๊ณผ์ ์ด๋‹ค.
  • Allocation
    • first fit / best fit
    • external fragmentation ๋ฐœ์ƒ
    • segment์˜ ๊ธธ์ด๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฐ€๋ณ€๋ถ„ํ•  ๋ฐฉ์‹์—์„œ์™€ ๋™์ผํ•œ ๋ฌธ์ œ์ ๋“ค์ด ๋ฐœ์ƒ

Segmentation with Paging

  • pure segmentation๊ณผ์˜ ์ฐจ์ด์ 
    • segment-table entry๊ฐ€ segment์˜ base address๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ segment๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” page table์˜ base address๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

9. Virtual Memory

Demand Paging

  • ์‹ค์ œ๋กœ ํ•„์š”ํ•  ๋•Œ page๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ
    • I/O ์–‘์˜ ๊ฐ์†Œ
    • Memory ์‚ฌ์šฉ๋Ÿ‰ ๊ฐ์†Œ
    • ๋น ๋ฅธ ์‘๋‹ต ์‹œ๊ฐ„
    • ๋” ๋งŽ์€ ์‚ฌ์šฉ์ž ์ˆ˜์šฉ
  • Valid / Invalid bit์˜ ์‚ฌ์šฉ
    • Invalid์˜ ์˜๋ฏธ
      • ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ ์ฃผ์†Œ ์˜์—ญ์ธ ๊ฒฝ์šฐ
      • ํŽ˜์ด์ง€๊ฐ€ ๋ฌผ๋ฆฌ์  ๋ฉ”๋ชจ๋ฆฌ์— ์—†๋Š” ๊ฒฝ์šฐ
    • ์ฒ˜์Œ์—๋Š” ๋ชจ๋“  page entry๊ฐ€ invalid๋กœ ์ดˆ๊ธฐํ™”
    • address translation ์‹œ์— invalid bit์ด set๋˜์–ด ์žˆ๋‹ค๋ฉด >> "page fault"

Page Fault

  • invalid page๋ฅผ ์ ‘๊ทผํ•˜๋ฉด MMU๊ฐ€ trap์„ ๋ฐœ์ƒ์‹œํ‚ด(page fault trap)
  • Kernel mode๋กœ ๋“ค์–ด๊ฐ€์„œ page fault handler๊ฐ€ invoke๋จ
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ page fault๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
    1. Invalid reference ? (eg. bad address, protection violation) => abort process.
    2. Get an empty page frame(์—†์œผ๋ฉด ๋บ์–ด์˜จ๋‹ค: replace)
    3. ํ•ด๋‹น ํŽ˜์ด์ง€๋ฅผ disk์—์„œ memory๋กœ ์ฝ์–ด์˜จ๋‹ค.
    • 3-1. disk I/O๊ฐ€ ๋๋‚˜๊ธฐ๊นŒ์ง€ ์ด ํ”„๋กœ์„ธ์Šค๋Š” CPU๋ฅผ preempt ๋‹นํ•จ (block)
    • 3-2. Disk read๊ฐ€ ๋๋‚˜๋ฉด page tables entry ๊ธฐ๋ก, valid/invalid bit = "valid"
    • 3-3. ready queue์— process๋ฅผ insert -> dispatch later
    1. ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์žก๊ณ  ๋‹ค์‹œ running
    2. ์•„๊นŒ ์ค‘๋‹จ๋˜์—ˆ๋˜ instruction์„ ์žฌ๊ฐœ

Performance of Demand Paging

  • Page Fault Rate 0 <= p <= 1.0
    • if p = 0, no page faults
    • if p = 1, every reference is a fault
  • Effective Access Time
    • =(1-p) * memory access
    • +p (OS & HW page fault overhead)
    • +[swap page out if needed]
      • swap page in
      • OS & HW restart overhead

Free frame์ด ์—†๋Š” ๊ฒฝ์šฐ

  • Page replacement

    • ์–ด๋–ค frame์„ ๋นผ์•—์•„์˜ฌ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ
    • ๊ณง๋ฐ”๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ page๋ฅผ ์ซ“์•„๋‚ด๋Š” ๊ฒƒ์ด ์ข‹์Œ
    • ๋™์ผํ•œ ํŽ˜์ด์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ซ“๊ฒจ๋‚ฌ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
  • Replacement Algorithm

    • page-fault rate๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ‰๊ฐ€
      • ์ฃผ์–ด์ง„ page reference string์— ๋Œ€ํ•ด page fault๋ฅผ ์–ผ๋งˆ๋‚˜ ๋‚ด๋Š”์ง€ ์กฐ์‚ฌ
    • reference string์˜ ์˜ˆ
      • 1,2,3,4,1,2,5,1,2,3,4,5.

Page Replacement

  1. swap out victim page
  2. change to invalid (page table[frame, valid-invalid bit])
  3. swap desired page in
  4. reset page table for new page

Optimal Algorithm

  • MIN (OPT) : ๊ฐ€์žฅ ๋จผ ๋ฏธ๋ž˜์— ์ฐธ์กฐ๋˜๋Š” page๋ฅผ replace
  • 4 frames example
    • 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
  • ๋ฏธ๋ž˜์˜ ์ฐธ์กฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์•„๋Š”๊ฐ€ ?
    • Offline algorithm
  • ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์— ๋Œ€ํ•œ upper bound ์ œ๊ณต
    • Belady's optimal algorithm, MIN, OPT๋“ฑ์œผ๋กœ ๋ถˆ๋ฆผ

FIFO (First In First Out) Algorithm

  • FIFO : ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ์„ ๋จผ์ € ๋‚ด์ซ“์Œ

    • 3 page frames : 9 page faults
    • 4 page frames : 10 page faults
  • FIFO Anomaly (Belady's Anomaly)

    • more frames => less page faults

LRU (Least Recently Used) Algorithm

  • LRU : ๊ฐ€์žฅ ์˜ค๋ž˜ ์ „์— ์ฐธ์กฐ๋œ ๊ฒƒ์„ ์ง€์›€

LFU (Least Frequently Used) Algorithm

  • LFU : ์ฐธ์กฐ ํšŸ์ˆ˜(reference count)๊ฐ€ ๊ฐ€์žฅ ์ ์€ ํŽ˜์ด์ง€๋ฅผ ์ง€์›€
    • ์ตœ์ € ์ฐธ์กฐ ํšŸ์ˆ˜์ธ page๊ฐ€ ์—ฌ๋Ÿฟ ์žˆ๋Š” ๊ฒฝ์šฐ
      • LFU ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž์ฒด์—์„œ๋Š” ์—ฌ๋Ÿฌ page ์ค‘ ์ž„์˜๋กœ ์„ ์ •ํ•œ๋‹ค.
      • ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๊ฐ€์žฅ ์˜ค๋ž˜์ „์— ์ฐธ์กฐ๋œ page๋ฅผ ์ง€์šฐ๊ฒŒ ๊ตฌํ˜„ ํ• ์ˆ˜๋„ ์žˆ๋‹ค.
    • ์žฅ๋‹จ์ 
      • LRU์ฒ˜๋Ÿผ ์ง์ „ ์ฐธ์กฐ ์‹œ์ ๋งŒ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์žฅ๊ธฐ์ ์ธ ์‹œ๊ฐ„ ๊ทœ๋ชจ๋ฅผ ๋ณด๊ธฐ ๋•Œ๋ฌธ์— page์˜ ์ธ๊ธฐ๋„๋ฅผ ์ข€ ๋” ์ •ํ™•ํžˆ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ์Œ
      • ์ฐธ์กฐ ์‹œ์ ์˜ ์ตœ๊ทผ์„ฑ์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•จ
      • LRU๋ณด๋‹ค ๊ตฌํ˜„์ด ๋ณต์žกํ•จ

LRU์™€ LFU ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌํ˜„

  • LRU : O(1) complexity (LRU page ~ MRU page)
  • ์ตœ์„  LPU : O(log n) complexity (LFU page ~ MRU page) - mean heap
  • ์ตœ์•… LPU : O(n) complexity (LFU page ~ MRU page, ํ•œ์ค„๋กœ ์ค„ ์„ธ์šฐ๊ธฐ ํ•  ๋•Œ)

๋‹ค์–‘ํ•œ ์บ์Š ํ™˜๊ฒฝ

  • ์บ์Š ๊ธฐ๋ฒ•
    • ํ•œ์ •๋œ ๋น ๋ฅธ ๊ณต๊ฐ„(=์บ์‰ฌ)์— ์š”์ฒญ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ํ›„์† ์š”์ฒญ์‹œ ์บ์‰ฌ๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์„œ๋น„์Šคํ•˜๋Š” ๋ฐฉ์‹
    • paging system์™ธ์—๋„ cache memory, buffer caching, Web caching ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์‚ฌ์šฉ
  • ์บ์‰ฌ ์šด์˜์˜ ์‹œ๊ฐ„ ์ œ์•ฝ
    • ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‚ญ์ œํ•  ํ•ญ๋ชฉ์„ ๊ฒฐ์ •ํ•˜๋Š” ์ผ์— ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๊ฒฝ์šฐ ์‹ค์ œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ
    • Buffer caching์ด๋‚˜ Web caching์˜ ๊ฒฝ์šฐ
      • O(1)์—์„œ O(log n) ์ •๋„๊นŒ์ง€ ํ—ˆ์šฉ
    • Paging system์ธ ๊ฒฝ์šฐ
      • page fault์ธ ๊ฒฝ์šฐ์—๋งŒ OS๊ฐ€ ๊ด€์—ฌํ•จ
      • ํŽ˜์ด์ง€๊ฐ€ ์ด๋ฏธ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ฐธ์กฐ์‹œ๊ฐ๋“ฑ์˜ ์ •๋ณด๋ฅผ OS๊ฐ€ ์•Œ ์ˆ˜ ์—†์Œ
      • O(1)์ธ LRU์˜ list์กฐ์ž‘์กฐ์ฐจ ๋ถˆ๊ฐ€๋Šฅ

Clock Algorithm

  • Clock algorithm
    • LRU์˜ ๊ทผ์‚ฌ(approximation) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์—ฌ๋Ÿฌ ๋ช…์นญ์œผ๋กœ ๋ถˆ๋ฆผ
      • Second chance algorithm
      • NUR(Not Used Recently) ๋˜๋Š” NRU(Not Recently Used)
    • Reference bit์„ ์‚ฌ์šฉํ•ด์„œ ๊ต์ฒด ๋Œ€์ƒ ํŽ˜์ด์ง€ ์„ ์ • (circular list)
    • reference bit๊ฐ€ 0์ธ ๊ฒƒ์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ํฌ์ธํŠธ๋ฅผ ํ•˜๋‚˜์”ฉ ์•ž์œผ๋กœ ์ด๋™
    • ํฌ์ธํ„ฐ ์ด๋™ํ•˜๋Š” ์ค‘์— reference bit 1์€ ๋ชจ๋‘ 0์œผ๋กœ ๋ฐ”๊ฟˆ
    • Reference bit์ด 0์ธ ๊ฒƒ์„ ์ฐพ์œผ๋ฉด ๊ทธ ํŽ˜์ด์ง€๋ฅผ ๊ต์ฒด
    • ํ•œ ๋ฐ”ํ€ด ๋˜๋Œ์•„์™€์„œ๋„(=second chance) 0์ด๋ฉด ๊ทธ๋•Œ์—๋Š” replace ๋‹นํ•จ
    • ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํŽ˜์ด์ง€๋ผ๋ฉด second chance๊ฐ€ ์˜ฌ ๋•Œ 1
  • Clock algorithm์˜ ๊ฐœ์„ 
    • reference bit๊ณผ modified bit (dirty bit)์„ ํ•จ๊ป˜ ์‚ฌ์šฉ
    • referce bit = 1 : ์ตœ๊ทผ์— ์ฐธ์กฐ๋œ ํŽ˜์ด์ง€
    • modified bit = 1 : ์ตœ๊ทผ์— ๋ณ€๊ฒฝ๋œ ํŽ˜์ด์ง€(I/O๋ฅผ ๋™๋ฐ˜ํ•˜๋Š” ํŽ˜์ด์ง€)

Page Frame์˜ Allocation

  • Allocation problem : ๊ฐ process์— ์–ผ๋งˆ๋งŒํผ์˜ page frame์„ ํ• ๋‹นํ•  ๊ฒƒ์ธ๊ฐ€ ?
  • Allocation์˜ ํ•„์š”์„ฑ :
    • ๋ฉ”๋ชจ๋ฆฌ ์ฐธ์กฐ ๋ช…๋ น์–ด ์ˆ˜ํ–‰์‹œ ๋ช…๋ น์–ด, ๋ฐ์ดํ„ฐ ๋“ฑ ์—ฌ๋Ÿฌ ํŽ˜์ด์ง€ ๋™์‹œ ์ฐธ์กฐ
      • ๋ช…๋ น์–ด ์ˆ˜ํ–‰์„ ์œ„ํ•ด ์ตœ์†Œํ•œ ํ• ๋‹น๋˜์–ด์•ผ ํ•˜๋Š” frame์˜ ์ˆ˜๊ฐ€ ์žˆ์Œ
    • Loop๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” page๋“ค์€ ํ•œ๊บผ๋ฒˆ์— allocate ๋˜๋Š” ๊ฒƒ์ด ์œ ๋ฆฌํ•จ
      • ์ตœ์†Œํ•œ์˜ allocation์ด ์—†์œผ๋ฉด ๋งค loop๋งˆ๋‹ค page fault
  • Allocation Scheme
    • Equal allocation : ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์— ๋˜‘๊ฐ™์€ ๊ฐฏ์ˆ˜ ํ• ๋‹น
    • Proportional allocation : ํ”„๋กœ์„ธ์Šค ํฌ๊ธฐ์— ๋น„๋ก€ํ•˜์—ฌ ํ• ๋‹น
    • Priority allocation : ํ”„๋กœ์„ธ์Šค์˜ priority์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ํ• ๋‹น

Global vs. Local Replacement

Global replacement

  • Replace์‹œ ๋‹ค๋ฅธ process์— ํ• ๋‹น๋œ frame์„ ๋นผ์•—์•„ ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • Process๋ณ„ ํ• ๋‹น๋Ÿ‰์„ ์กฐ์ ˆํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ž„
  • FIFO, LRU, LFU ๋“ฑ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ global replacement๋กœ ์‚ฌ์šฉ์‹œ์— ํ•ด๋‹น
  • Working set, PFF ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

Local replacement

  • ์ž์‹ ์—๊ฒŒ ํ• ๋‹น๋œ frame ๋‚ด์—์„œ๋งŒ replacement
  • FIFO, LRU, LFU ๋“ฑ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ process๋ณ„๋กœ ์šด์˜์‹œ

Thrashing

  • ํ”„๋กœ์„ธ์Šค์˜ ์›ํ™œํ•œ ์ˆ˜ํ–‰์— ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ page frame ์ˆ˜๋ฅผ ํ• ๋‹น ๋ฐ›์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ ๋ฐœ์ƒ
  • Page fault rate์ด ๋งค์šฐ ๋†’์•„์ง
  • CPU utilization์ด ๋†’์•„์ง
  • OS๋Š” MPD (Multiprogramming degree)๋ฅผ ๋†’์—ฌ์•ผ ํ•œ๋‹ค๊ณ  ํŒ๋‹จ
  • ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์— ์ถ”๊ฐ€๋จ (higher MPD)
  • ํ”„๋กœ์„ธ์Šค ๋‹น ํ• ๋‹น๋œ frame์˜ ์ˆ˜๊ฐ€ ๋”์šฑ ๊ฐ์†Œ
  • ํ”„๋กœ์„ธ์Šค๋Š” page์˜ swap in / swap out์œผ๋กœ ๋งค์šฐ ๋ฐ”์จ
  • ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๊ฐ„์— CPU๋Š” ํ•œ๊ฐ€ํ•จ
  • low throughput

Working-Set Model

Locality of reference

  • ํ”„๋กœ์„ธ์Šค๋Š” ํŠน์ • ์‹œ๊ฐ„๋™์•ˆ ์ผ์ • ์žฅ์†Œ๋งŒ์„ ์ง‘์ค‘์ ์œผ๋กœ ์ฐธ์กฐํ•œ๋‹ค.
  • ์ง‘์ค‘์ ์œผ๋กœ ์ฐธ์กฐ๋˜๋Š” ํ•ด๋‹น page๋“ค์˜ ์ง‘ํ•ฉ์„ locality set์ด๋ผ ํ•จ.

Working-set Model

  • Locality์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์ • ์‹œ๊ฐ„๋™์•ˆ ์›ํ™œํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜๊ธฐ ์œ„ํ•ด ํ•œ๊บผ๋ฒˆ์— ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์žˆ์–ด์•ผ ํ•˜๋Š” page๋“ค์˜ ์ง‘ํ•ฉ์„ Working Set์ด๋ผ ์ •์˜ํ•จ
  • Working Set ๋ชจ๋ธ์—์„œ๋Š” process์˜ working set ์ „์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ์žˆ์–ด์•ผ ์ˆ˜ํ–‰๋˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ชจ๋“  frame์„ ๋ฐ˜๋‚ฉํ•œ ํ›„ swap out (suspend)
  • Thrashing์„ ๋ฐฉ์ง€ํ•จ
  • Multiprogramming degree๋ฅผ ๊ฒฐ์ •ํ•จ

Working-Set Algorithm

  • Working set์˜ ๊ฒฐ์ •
    • Working set window๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ƒ„
    • window size๊ฐ€ ๋ธํƒ€์ธ ๊ฒฝ์šฐ
      • ์‹œ๊ฐ t[i]์—์„œ์˜ working set WS (t[i])
        • Time interval[t[i]-๋ธํƒ€, t[i]] ์‚ฌ์ด์— ์ฐธ์กฐ๋œ ์„œ๋กœ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋“ค์˜ ์ง‘ํ•ฉ
        • Working set์— ์†ํ•œ page๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€, ์†ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋ฒ„๋ฆผ
        • (์ฆ‰, ์ฐธ์กฐ๋œ ํ›„ ๋ธํƒ€ ์‹œ๊ฐ„๋™์•ˆ ํ•ด๋‹น page๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•œ ํ›„ ๋ฒ„๋ฆผ)

Working-Set Algorithm

Working-Set Algorithm

  • Process๋“ค์˜ working set size์˜ ํ•ฉ์ด page frame์˜ ์ˆ˜๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ
    • ์ผ๋ถ€ process๋ฅผ swap out์‹œ์ผœ ๋‚จ์€ process์˜ working set์„ ์šฐ์„ ์ ์œผ๋กœ ์ถฉ์กฑ์‹œ์ผœ ์ค€๋‹ค. (MPD๋ฅผ ์ค„์ž„)
  • Working set์„ ๋‹ค ํ• ๋‹นํ•˜๊ณ ๋„ page frame์ด ๋‚จ๋Š” ๊ฒฝ์šฐ
    • Swap out ๋˜์—ˆ๋˜ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ working set์„ ํ• ๋‹น (MPD๋ฅผ ํ‚ค์›€)

Window size ๋ธํƒ€

  • Working set์„ ์ œ๋Œ€๋กœ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” window size๋ฅผ ์ž˜ ๊ฒฐ์ •ํ•ด์•ผ ํ•จ
  • ๋ธํƒ€ ๊ฐ’์ด ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด locality set์„ ๋ชจ๋‘ ์ˆ˜์šฉํ•˜์ง€ ๋ชปํ•  ์šฐ๋ ค
  • ๋ธํƒ€ ๊ฐ’์ด ํฌ๋ฉด ์—ฌ๋Ÿฌ ๊ทœ๋ชจ์˜ locality set ์ˆ˜์šฉ
  • ๋ธํƒ€๊ฐ’์ด ๋ฌดํ•œ๋Œ€๋ฉด ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” page๋ฅผ working set์œผ๋กœ ๊ฐ„์ฃผ

PFF (Page-Fault Frequency) Scheme

  • page-fault rate์˜ ์ƒํ•œ๊ฐ’๊ณผ ํ•˜ํ•œ๊ฐ’์„ ๋‘”๋‹ค.
    • Page fault rate์ด ์ƒํ•œ๊ฐ’์„ ๋„˜์œผ๋ฉด frame์„ ๋” ํ• ๋‹นํ•œ๋‹ค.
    • Page fault rate์ด ํ•˜ํ•œ๊ฐ’ ์ดํ•˜์ด๋ฉด ํ• ๋‹น frame ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค.
  • ๋นˆ frame์ด ์—†์œผ๋ฉด ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋ฅผ swap out

Page Size์˜ ๊ฒฐ์ •

  • Page size๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๋ฉด

    • ํŽ˜์ด์ง€ ์ˆ˜ ์ฆ๊ฐ€

    • ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ํฌ๊ธฐ ์ฆ๊ฐ€

    • Internal fragmentation ๊ฐ์†Œ

    • Disk transfer์˜ ํšจ์œจ์„ฑ ๊ฐ์†Œ

      • Seek/rotation vs. transfer
    • ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ด์šฉ์ด ํšจ์œจ์ 

      • Locality์˜ ํ™œ์šฉ ์ธก๋ฉด์—์„œ๋Š” ์ข‹์ง€ ์•Š์Œ
  • Trend

    • Larger page size

File Systems

File and File System

File

  • "A named collection of related information"
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋น„ํœ˜๋ฐœ์„ฑ์˜ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜์— ์ €์žฅ
  • ์šด์˜์ฒด์ œ๋Š” ๋‹ค์–‘ํ•œ ์ €์žฅ์žฅ์น˜๋ฅผ file์ด๋ผ๋Š” ๋™์ผํ•œ ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
  • Operation
    • create, read, write reposition (lseek), delete, open, close ๋“ฑ

File attribute(ํ˜น์€ ํŒŒ์ผ์˜ metadata)

  • ํŒŒ์ผ ์ž์ฒด์˜ ๋‚ด์šฉ์ด ์•„๋‹ˆ๋ผ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๋“ค
  • ํŒŒ์ผ ์ด๋ฆ„, ์œ ํ˜•, ์ €์žฅ๋œ ์œ„์น˜, ํŒŒ์ผ ์‚ฌ์ด์ฆˆ
  • ์ ‘๊ทผ ๊ถŒํ•œ(์ฝ๊ธฐ/์“ฐ๊ธฐ/์‹คํ–‰), ์‹œ๊ฐ„ (์ƒ์„ฑ/๋ณ€๊ฒฝ/์‚ฌ์šฉ), ์†Œ์œ ์ž ๋“ฑ

File system

  • ์šด์˜์ฒด์ œ์—์„œ ํŒŒ์ผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„
  • ํŒŒ์ผ ๋ฐ ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋””๋ ‰ํ† ๋ฆฌ ์ •๋ณด๋“ฑ์„ ๊ด€๋ฆฌ
  • ํŒŒ์ผ์˜ ์ €์žฅ ๋ฐฉ๋ฒ• ๊ฒฐ์ •
  • ํŒŒ์ผ ๋ณดํ˜ธ ๋“ฑ

Directory and Logical Disk

Directory

  • ํŒŒ์ผ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ค‘ ์ผ๋ถ€๋ฅผ ๋ณด๊ด€ํ•˜๊ณ  ์žˆ๋Š” ์ผ์ข…์˜ ํŠน๋ณ„ํ•œ ํŒŒ์ผ
  • ๊ทธ ๋””๋ ‰ํ† ๋ฆฌ์— ์†ํ•œ ํŒŒ์ผ ์ด๋ฆ„ ๋ฐ ํŒŒ์ผ attribute๋“ค
  • operation
    • search for a file, create a file, delete a file
    • list a directory, rename a file, traverse the file system

Partition(=Logical Disk)

  • ํ•˜๋‚˜์˜ (๋ฌผ๋ฆฌ์ ) ๋””์Šคํฌ ์•ˆ์— ์—ฌ๋Ÿฌ ํŒŒํ‹ฐ์…˜์„ ๋‘๋Š”๊ฒŒ ์ผ๋ฐ˜์ 
  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๋””์Šคํฌ๋ฅผ ํ•˜๋‚˜์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ธฐ๋„ ํ•จ
  • (๋ฌผ๋ฆฌ์ ) ๋””์Šคํฌ๋ฅผ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๊ตฌ์„ฑํ•œ ๋’ค ๊ฐ๊ฐ์˜ ํŒŒํ‹ฐ์…˜์— file system์„ ๊น”๊ฑฐ๋‚˜ swapping๋“ฑ ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

Open()

open("a/b/c")

  • ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ํŒŒ์ผ c์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ๋กœ ๊ฐ€์ง€๊ณ  ์˜ด
  • ์ด๋ฅผ ์œ„ํ•˜์—ฌ directory path๋ฅผ search
    • ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ "/"๋ฅผ openํ•˜๊ณ  ๊ทธ ์•ˆ์—์„œ ํŒŒ์ผ "a"์˜ ์œ„์น˜ ํš๋“
    • ํŒŒ์ผ "a"๋ฅผ openํ•œ ํ›„ readํ•˜์—ฌ ๊ทธ ์•ˆ์—์„œ ํŒŒ์ผ "b"์˜ ์œ„์น˜ ํš๋“
    • ํŒŒ์ผ "b"๋ฅผ openํ•œ ํ›„ readํ•˜์—ฌ ๊ทธ ์•ˆ์—์„œ ํŒŒ์ผ "c"์˜ ์œ„์น˜ ํš๋“
    • ํŒŒ์ผ "c"๋ฅผ openํ•œ๋‹ค.
  • Directory path์˜ search์— ๋„ˆ๋ฌด ๋งŽ์€ ์‹œ๊ฐ„ ์†Œ์š”
    • Open์„ read / write์™€ ๋ณ„๋„๋กœ ๋‘๋Š” ์ด์œ ์ž„
    • ํ•œ๋ฒˆ openํ•œ ํŒŒ์ผ์€ read/write์‹œ directory seach ๋ถˆํ•„์š”
  • Open file table
    • ํ˜„์žฌ open๋œ ํŒŒ์ผ๋“ค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ณด๊ด€์†Œ (in memory)
    • ๋””์Šคํฌ์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋ช‡ ๊ฐ€์ง€ ์ •๋ณด๊ฐ€ ์ถ”๊ฐ€
      • openํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜
      • File offset : ํŒŒ์ผ ์–ด๋Š ์œ„์น˜ ์ ‘๊ทผ์ค‘์ธ์ง€ ํ‘œ์‹œ(๋ณ„๋„ ํ…Œ์ด๋ธ” ํ•„์š”)
  • File descripter (file handle, file control block)
    • Open file table์— ๋Œ€ํ•œ ์œ„์น˜ ์ •๋ณด (ํ”„๋กœ์„ธ์Šค ๋ณ„)

File Protection

  • ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•ด ๋ˆ„๊ตฌ์—๊ฒŒ ์–ด๋–ค ์œ ํ˜•์˜ ์ ‘๊ทผ(read/write/execution)์„ ํ—ˆ๋ฝํ•  ๊ฒƒ์ธ๊ฐ€?

Access Control ๋ฐฉ๋ฒ•

  • Access control list : ํŒŒ์ผ๋ณ„๋กœ ๋ˆ„๊ตฌ์—‘ ์–ด๋–ค ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ‘œ์‹œ
  • Capability : ์‚ฌ์šฉ์ž๋ณ„๋กœ ์ž์‹ ์ด ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ํŒŒ์ผ ๋ฐ ํ•ด๋‹น ๊ถŒํ•œ ํ‘œ์‹œ

Grouping

  • ์ „์ฒด user๋ฅผ owner, group, public์˜ ์„ธ ๊ทธ๋ฃน์œผ๋กœ ๊ตฌ๋ถ„
  • ๊ฐ ํŒŒ์ผ์— ๋Œ€ํ•ด ์„ธ ๊ทธ๋ฃน์˜ ์ ‘๊ทผ ๊ถŒํ•œ(rwx)๋ฅผ 3๋น„ํŠธ์”ฉ์œผ๋กœ ํ‘œ์‹œ
  • ์˜ˆ) Unix (owner | group | other)

Password

  • ํŒŒ์ผ๋งˆ๋‹ค password๋ฅผ ๋‘๋Š” ๋ฐฉ๋ฒ•(๋””๋ ‰ํ† ๋ฆฌ ํŒŒ์ผ์— ๋‘๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅ)
  • ๋ชจ๋“  ์ ‘๊ทผ ๊ถŒํ•œ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ password : all-or-nothing
  • ์ ‘๊ทผ ๊ถŒํ•œ๋ณ„ password : ์•”๊ธฐ ๋ฌธ์ œ, ๊ด€๋ฆฌ ๋ฌธ์ œ

Access Methods

์‹œ์Šคํ…œ์ด ์ œ๊ณตํ•˜๋Š” ํŒŒ์ผ ์ •๋ณด์˜ ์ ‘๊ทผ ๋ฐฉ์‹

  • ์ˆœ์ฐจ ์ ‘๊ทผ(sequential access)
    • ์นด์„ธํŠธ ํ…Œ์ดํ”„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ฒ˜๋Ÿผ ์ ‘๊ทผ
    • ์ฝ๊ฑฐ๋‚˜ ์“ฐ๋ฉด offset์€ ์ž๋™์ ์œผ๋กœ ์ฆ๊ฐ€
  • ์ง์ ‘ ์ ‘๊ทผ(direct access, random access)
    • LP ๋ ˆ์ฝ”๋“œ ํŒ๊ณผ ๊ฐ™์ด ์ ‘๊ทผํ•˜๋„๋ก ํ•จ
    • ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž„์˜์˜ ์ˆœ์„œ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

11. File System Implementation

Allocation of File Data in Disk

  • Contiguous Allocation
  • Linked Allocation
  • Indexed Allocation

Contiguous Allocation

  • ๋‹จ์ 
    • external fragmentation
    • File grow๊ฐ€ ์–ด๋ ค์›€
      • file ์ƒ์„ฑ์‹œ ์–ผ๋งˆ๋‚˜ ํฐ hole์„ ๋ฐฐ๋‹นํ•  ๊ฒƒ์ธ๊ฐ€ ?
      • grow ๊ฐ€๋Šฅ vs ๋‚ญ๋น„ (internal fragmentation)
  • ์žฅ์ 
    • Fast I/O
      • ํ•œ๋ฒˆ์˜ seek/rotation์œผ๋กœ ๋งŽ์€ ๋ฐ”์ดํŠธ transfer
      • Realtime file์šฉ์œผ๋กœ, ๋˜๋Š” ์ด๋ฏธ run ์ค‘์ด๋˜ process์˜ swapping
    • Direct access(=random access) ๊ฐ€๋Šฅ

Linked Allocation

  • ์žฅ์ 

    • External fragmentation ๋ฐœ์ƒ ์•ˆ ํ•จ
  • ๋‹จ์ 

    • No random access
    • Reliability ๋ฌธ์ œ
      • ํ•œ sector๊ฐ€ ๊ณ ์žฅ๋‚˜ pointer๊ฐ€ ์œ ์‹ค๋˜๋ฉด ๋งŽ์€ ๋ถ€๋ถ„์„ ์žƒ์Œ
    • Pointer๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์ด block์˜ ์ผ๋ถ€๊ฐ€ ๋˜์–ด ๊ณต๊ฐ„ ํšจ์œจ์„ฑ์„ ๋–จ์–ด๋œจ๋ฆผ
      • 512 bytes/secore, 4bytes/pointer
  • ๋ณ€ํ˜•

    • File-allocation table(FAT) ํŒŒ์ผ ์‹œ์Šคํ…œ
      • ํฌ์ธํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์œ„์น˜์— ๋ณด๊ด€ํ•˜์—ฌ reliability์™€ ๊ณต๊ฐ„ํšจ์œจ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ

Indexed Allocation

  • ์žฅ์ 
    • External fragmentatio์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
    • Direct access ๊ฐ€๋Šฅ
  • ๋‹จ์ 
    • Small file์˜ ๊ฒฝ์šฐ ๊ณต๊ฐ„ ๋‚ญ๋น„(์‹ค์ œ๋กœ ๋งŽ์€ file๋“ค์ด small)
    • Too Large file์˜ ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ block์œผ๋กœ index๋ฅผ ์ €์žฅํ•˜๊ธฐ์— ๋ถ€์กฑ
      • ํ•ด๊ฒฐ๋ฐฉ์•ˆ
          1. linked scheme
          1. multi-level index

Unix ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ

Partition
  {
  Boot block,
  Super block,
  []Inode list,
  Data block
  }
Inode list
{
  mode,
  owners(2),
  timestamps(3),
  size block,
  count,
  direct blocks [data....],
  single indirect,
  double indirect,
  triple indirect
}

Unix ํŒŒ์ผ์‹œ์Šคํ…œ์˜ ๊ตฌ์กฐ

์œ ๋‹‰์Šค ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ์ค‘์š” ๊ฐœ๋…

  • Boot block
    • ๋ถ€ํŒ…์— ํ•„์š”ํ•œ ์ •๋ณด (bootstrap loader)
  • Superblock
    • ํŒŒ์ผ์‹œ์Šคํ…œ์— ๊ด€ํ•œ ์ด์ฒด์ ์ธ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
  • Inode
    • ํŒŒ์ผ ์ด๋ฆ„์„ ์ œ์™ธํ•œ ํŒŒ์ผ์˜ ๋ชจ๋“  ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
  • Data block
    • ํŒŒ์ผ์˜ ์‹ค์ œ ๋‚ด์šฉ์„ ๋ณด๊ด€

Free-Space Management

Bit map or bit vector

bit[i] = {
  0 => block[i] free
  1 => block[i] occupied
}
  • Bit map์€ ๋ถ€๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•จ
  • ์—ฐ์†์ ์ธ n๊ฐœ์˜ free block์„ ์ฐพ๋Š”๋ฐ ํšจ๊ณผ์ 

Free-Space Management

  • Linked list

    • ๋ชจ๋“  free block๋“ค์„ ๋งํฌ๋กœ ์—ฐ๊ฒฐ (free list)
    • ์—ฐ์†์ ์ธ ๊ฐ€์šฉ๊ณต๊ฐ„์„ ์ฐพ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š๋‹ค.
    • ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๊ฐ€ ์—†๋‹ค.
  • Grouping

    • linked list ๋ฐฉ๋ฒ•์˜ ๋ณ€ํ˜•
    • ์ฒซ๋ฒˆ์งธ free block์ด n๊ฐœ์˜ pointer๋ฅผ ๊ฐ€์ง
      • n-1 pointer๋Š” free data block์„ ๊ฐ€๋ฆฌํ‚ด
      • ๋งˆ์ง€๋ง‰ pointer๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” block์€ ๋˜ ๋‹ค์‹œ n pointer๋ฅผ ๊ฐ€์ง
  • Counting

    • ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์ข…์ข… ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์—ฐ์†์ ์ธ block์„ ํ• ๋‹นํ•˜๊ณ  ๋ฐ˜๋‚ฉํ•œ๋‹ค๋Š” ์„ฑ์งˆ์— ์ฐฉ์•ˆ
    • (first free block, # of contiguous free blocks)์„ ์œ ์ง€

Directory Implementation

  • Linear list

    • <file name, file์˜ metadata>์˜ list
    • ๊ตฌํ˜„์ด ๊ฐ„๋‹จ
    • ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์— ํŒŒ์ผ์ด ์žˆ๋Š”์ง€ ์ฐพ๊ธฐ ์œ„ํ•ด์„œ๋Š” linear search ํ•„์š” (time-consuming)
  • Hash Table

    • linear list + hashing
    • Hash table์€ file name์„ ์ด ํŒŒ์ผ์˜ linear list์˜ ์œ„์น˜๋กœ ๋ฐ”๊พธ์–ด์คŒ
    • search time์„ ์—†์•ฐ
    • Collision ๋ฐœ์ƒ ๊ฐ€๋Šฅ

VFS and NFS

  • Virtual File System(VFS)

    • ์„œ๋กœ ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ file system์— ๋Œ€ํ•ด ๋™์ผํ•œ ์‹œ์Šคํ…œ ์ฝœ ์ธํ„ฐํŽ˜์ด์Šค(API)๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” OS์˜ layer
  • Network File System(NFS)

    • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ํŒŒ์ผ์ด ๊ณต์œ ๋  ์ˆ˜ ์žˆ์Œ
    • NFS๋Š” ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ์˜ ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ผ ๊ณต์œ  ๋ฐฉ๋ฒ•์ž„

Page Cache and Buffer Cache

  • Page Cache
    • Virtual memory์˜ paging system์—์„œ ์‚ฌ์šฉํ•˜๋Š” page frame์„ caching์˜ ๊ด€์ ์—์„œ ์„ค๋ช…ํ•˜๋Š” ์šฉ์–ด
    • Memory-Mapped I/O๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ file์˜ I/O์—์„œ๋„ page cache ์‚ฌ์šฉ
  • Memory-Mapped I/O
    • File์˜ ์ผ๋ถ€๋ฅผ virtual memory์— mapping์‹œํ‚ด
    • ๋งคํ•‘์‹œํ‚จ ์˜์—ญ์— ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์—ฐ์‚ฐ์€ ํŒŒ์ผ์˜ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•จ
  • Buffer Cache
    • ํŒŒ์ผ์‹œ์Šคํ…œ์„ ํ†ตํ•œ I/O ์—ฐ์‚ฐ์€ ๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์ • ์˜์—ญ์ธ buffer cache ์‚ฌ์šฉ
    • File ์‚ฌ์šฉ์˜ locality ํ™œ์šฉ
      • ํ•œ๋ฒˆ ์ฝ์–ด์˜จ block์— ๋Œ€ํ•œ ํ›„์† ์š”์ฒญ์‹œ buffer cache์—์„œ ์ฆ‰์‹œ ์ „๋‹ฌ
    • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉ
    • Replacement algorithm ํ•„์š” (LRU, LFU ๋“ฑ)
  • Unified Buffer Cache
    • ์ตœ๊ทผ์˜ OS์—์„œ๋Š” ๊ธฐ์กด์˜ buffer cache๊ฐ€ page cache์— ํ†ตํ•ฉ๋จ

12. Disk Management and Scheduling

Disk Structure

  • logical block
    • ๋””์Šคํฌ์˜ ์™ธ๋ถ€์—์„œ ๋ณด๋Š” ๋””์Šคํฌ์˜ ๋‹จ์œ„ ์ •๋ณด ์ €์žฅ ๊ณต๊ฐ„๋“ค
    • ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ 1์ฐจ์› ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ทจ๊ธ‰
    • ์ •๋ณด๋ฅผ ์ „์†กํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„
  • Sector
    • Logical block์ด ๋ฌผ๋ฆฌ์ ์ธ ๋””์Šคํฌ์— ๋งคํ•‘๋œ ์œ„์น˜
    • Sector 0์€ ์ตœ์™ธ๊ณฝ ์‹ค๋ฆฐ๋”์˜ ์ฒซ ํŠธ๋ž™์— ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ์„นํ„ฐ์ด๋‹ค.

Disk Scheduling

  • Access time์˜ ๊ตฌ์„ฑ
    • Seek time
      • ํ—ค๋“œ๋ฅผ ํ•ด๋‹น ์‹ค๋ฆฐ๋”๋กœ ์›€์ง์ด๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
    • Rotational latency
      • ํ—ค๋“œ๊ฐ€ ์›ํ•˜๋Š” ์„นํ„ฐ์— ๋„๋‹ฌํ•˜๊ธฐ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ํšŒ์ „์ง€์—ฐ์‹œ๊ฐ„
    • Transfer time
      • ์‹ค์ œ ๋ฐ์ดํ„ฐ์˜ ์ „์†ก ์‹œ๊ฐ„
  • Disk bandwith
    • ๋‹จ์œ„ ์‹œ๊ฐ„ ๋‹น ์ „์†ก๋œ ๋ฐ”์ดํŠธ์˜ ์ˆ˜
  • Disk Scheduling
    • seek time์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ
    • Seek time ~ seek distance

Disk Management

  • physical formatting (Low-level formatting)

    • ๋””์Šคํฌ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋„๋ก ์„นํ„ฐ๋“ค๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •
    • ๊ฐ ์„นํ„ฐ๋Š” header + ์‹ค์ œ data(๋ณดํ†ต 512 bytes) + trailer๋กœ ๊ตฌ์„ฑ
    • header์™€ trailer๋Š” sector number, ECC (Error-Correcting Code) ๋“ฑ์˜ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜๋ฉฐ controller๊ฐ€ ์ง์ ‘ ์ ‘๊ทผ ๋ฐ ์šด์˜
  • Partitioning

    • ๋””์Šคํฌ๋ฅผ ํ•˜๋‚˜ ์ด์ƒ์˜ ์‹ค๋ฆฐ๋” ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •
    • OS๋Š” ์ด๊ฒƒ์„ ๋…๋ฆฝ์  disk๋กœ ์ทจ๊ธ‰(logical disk)
  • Logical formatting

    • ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ
    • FAT, inode, free space ๋“ฑ์˜ ๊ตฌ์กฐ ํฌํ•จ
  • Booting

    • ROM์— ์žˆ๋Š” "small bootstrap loader"์˜ ์‹คํ–‰
    • sector 0 (boot block)์„ loadํ•˜์—ฌ ์‹คํ–‰
    • sector 0์€ "full Bootstrap loader program"
    • OS๋ฅผ ๋””์Šคํฌ์—์„œ loadํ•˜์—ฌ ์‹คํ–‰

Disk Scheduling Algorithm

  • ํ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค๋ฆฐ๋” ์œ„์น˜์˜ ์š”์ฒญ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋””์Šคํฌ ํ—ค๋“œ 53๋ฒˆ์—์„œ ์‹œ์ž‘ํ•œ ๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋Š” ?
  • 98, 183, 37, 122, 14, 124, 65, 67
  • FCFS
  • SSTF
  • SCAN
  • C-SCAN
  • N-SCAN
  • LOOK
  • C-LOOK

FCFS(First Come First Service)

  • ์ด head์˜ ์ด๋™ : 640 cylinders
  • head starts at 53

SSTF (Shortest Seek Time First)

  • starvation ๋ฌธ์ œ
  • ์ด head์˜ ์ด๋™ : 236 cylinders

SCAN

  • disk arm์ด ๋””์Šคํฌ์˜ ํ•œ์ชฝ ๋์—์„œ ๋‹ค๋ฅธ์ชฝ ๋์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ๊ฐ€๋Š” ๊ธธ๋ชฉ์— ์žˆ๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋‹ค๋ฅธ ํ•œ์ชฝ ๋์— ๋„๋‹ฌํ•˜๋ฉด ์—ญ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ์˜ค๋Š” ๊ธธ๋ชฉ์— ์žˆ๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๋‹ค์‹œ ๋ฐ˜๋Œ€์ชฝ ๋์œผ๋กœ ์ด๋™ํ•œ๋‹ค.
  • ๋ฌธ์ œ์  : ์‹ค๋ฆฐ๋” ์œ„์น˜์— ๋”ฐ๋ผ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๋‹ค๋ฅด๋‹ค.

SCAN

  • ์ด head์˜ ์ด๋™ : 208 cylinders

C-SCAN

  • ํ—ค๋“œ๊ฐ€ ํ•œ์ชฝ ๋์—์„œ ๋‹ค๋ฅธ์ชฝ ๋์œผ๋กœ ์ด๋™ํ•˜๋ฉฐ ๊ฐ€๋Š” ๊ธธ๋ชฉ์— ์žˆ๋Š” ๋ชจ๋“  ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
  • ๋‹ค๋ฅธ์ชฝ ๋์— ๋„๋‹ฌํ–ˆ์œผ๋ฉด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ๊ณง๋ฐ”๋กœ ์ถœ๋ฐœ์ ์œผ๋กœ ๋‹ค์‹œ ์ด๋™
  • SCAN๋ณด๋‹ค ๊ท ์ผํ•œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•œ๋‹ค.

Other Algorithm

  • N-SCAN
    • SCAN์˜ ๋ณ€ํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ์ผ๋‹จ arm์ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์›€์ง์ด๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๊ทธ ์‹œ์ ์ดํ›„์— ๋„์ฐฉํ•œ job์€ ๋˜๋Œ์•„์˜ฌ ๋•Œ service
  • LOOK and C-LOCK
    • SCAN์ด๋‚˜ C-SCAN์€ ํ—ค๋“œ๊ฐ€ ๋””์Šคํฌ ๋์—์„œ ๋์œผ๋กœ ์ด๋™
    • LOOK๊ณผ C-LOOK์€ ํ—ค๋“œ๊ฐ€ ์ง„ํ–‰์ค‘์ด๋‹ค๊ฐ€ ๊ทธ ๋ฐฉํ–ฅ์— ๋”์ด์ƒ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์š”์ฒญ์ด ์—†์œผ๋ฉด ํ—ค๋“œ์˜ ์ด๋™๋ฐฉํ–ฅ์„ ์ฆ‰์‹œ ๋ฐ˜๋Œ€๋กœ ์ด๋™

Disk-Scheduling Algorithm์˜ ๊ฒฐ์ •

  • SCAN, C-SCAN ๋ฐ ๊ทธ ์‘์šฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ LOOK, C-LOOK ๋“ฑ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋””์Šคํฌ ์ž…์ถœ๋ ฅ์ด ๋งŽ์€ ์‹œ์Šคํ…œ์—์„œ ํšจ์œจ์ ์ธ ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์Œ
  • File์˜ ํ• ๋‹น ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋””์Šคํฌ ์š”์ฒญ์ด ์˜ํ–ฅ์„ ๋ฐ›์Œ
  • ๋””์Šคํฌ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•„์š”ํ•  ๊ฒฝ์šฐ ๋‹ค๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ๋„๋ก OS์™€ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ž‘์„ฑ๋˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ค.

Swap-Space Management

  • Disk๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ด์œ 
    • memory์˜ volatileํ•œ ํŠน์„ฑ > file system
    • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์„ ์œ„ํ•œ memory๊ณต๊ฐ„ ๋ถ€์กฑ > swap space(swap area)
  • Swap-space
    • Virtual memory system์—์„œ๋Š” ๋””์Šคํฌ๋ฅผ memory์˜ ์—ฐ์žฅ ๊ณต๊ฐ„์œผ๋กœ ์‚ฌ์šฉ
    • ํŒŒ์ผ์‹œ์Šคํ…œ ๋‚ด๋ถ€์— ๋‘˜ ์ˆ˜๋„ ์žˆ์œผ๋‚˜ ๋ณ„๋„ partition ์‚ฌ์šฉ์ด ์ผ๋ฐ˜์ 
      • ๊ณต๊ฐ„ํšจ์œจ์„ฑ๋ณด๋‹ค๋Š” ์†๋„ ํšจ์œจ์„ฑ์ด ์šฐ์„ 
      • ์ผ๋ฐ˜ ํŒŒ์ผ๋ณด๋‹ค ํ›จ์”ฌ ์งง์€ ์‹œ๊ฐ„๋งŒ ์กด์žฌํ•˜๊ณ  ์ž์ฃผ ์ฐธ์กฐ๋จ
      • ๋”ฐ๋ผ์„œ, block์˜ ํฌ๊ธฐ ๋ฐ ์ €์žฅ ๋ฐฉ์‹์ด ์ผ๋ฐ˜ ํŒŒ์ผ์‹œ์Šคํ…œ๊ณผ ๋‹ค๋ฆ„

RAID

  • RAID(Redundant Array of Independent Disks)
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋””์Šคํฌ๋ฅผ ๋ฌถ์–ด์„œ ์‚ฌ์šฉ
  • RAID์˜ ์‚ฌ์šฉ ๋ชฉ์ 
    • ๋””์Šคํฌ ์ฒ˜๋ฆฌ ์†๋„ ํ–ฅ์ƒ
      • ์—ฌ๋Ÿฌ ๋””์Šคํฌ์— block์˜ ๋‚ด์šฉ์„ ๋ถ„์‚ฐ ์ €์žฅ
      • ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฝ์–ด์˜ด (interleaving, striping)
    • ์‹ ๋ขฐ์„ฑ(reliability) ํ–ฅ์ƒ
      • ๋™์ผ ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ๋””์Šคํฌ์— ์ค‘๋ณต ์ €์žฅ
      • ํ•˜๋‚˜์˜ ๋””์Šคํฌ๊ฐ€ ๊ณ ์žฅ(failure)์‹œ ๋‹ค๋ฅธ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์˜ด(Mirroring, shadowing)
      • ๋‹จ์ˆœํ•œ ์ค‘๋ณต ์ €์žฅ์ด ์•„๋‹ˆ๋ผ ์ผ๋ถ€ ๋””์Šคํฌ์— parity๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ณต๊ฐ„์˜ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

์ถœ์ฒ˜ : Kocw ์ดํ™”์—ฌ๋Œ€ ๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜ "์šด์˜์ฒด์ œ" ๊ฐ•์˜ ์ฒจ๋ถ€

About

Studying "Operating System"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published