PintOS-Project1-Priority Scheduling

no-glass-otackuยท2025๋…„ 4์›” 12์ผ
0

OS design

๋ชฉ๋ก ๋ณด๊ธฐ
2/2

๐Ÿ“ threads/
โ”œโ”€โ”€ thread.h โ† ์šฐ์„ ์ˆœ์œ„ ํ•„๋“œ ๋ฐ ํ•จ์ˆ˜ ์„ ์–ธ
โ”œโ”€โ”€ thread.c โ† ์Šค์ผ€์ค„๋ง ๋กœ์ง, donation, ready_list ์ฒ˜๋ฆฌ
โ”œโ”€โ”€ synch.c โ† ์„ธ๋งˆํฌ์–ด, ๋ฝ, ์กฐ๊ฑด๋ณ€์ˆ˜ โ†’ donation ๋ฐ˜์˜
โ”œโ”€โ”€ synch.h โ† ๊ด€๋ จ ๊ตฌ์กฐ์ฒด ํ•„๋“œ ์ถ”๊ฐ€

๐Ÿ” ์„ธ๋งˆํฌ์–ด(Semaphore)๋ž€?
์„ธ๋งˆํฌ์–ด๋Š” ๊ณต์œ  ์ž์›์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” "ํ—ˆ๊ฐ€์ฆ" ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๋Š” ๋ณ€์ˆ˜์•ผ.
๋ชฉ์ : ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ํ•˜๋‚˜์˜ ์ž์›์„ ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ถฉ๋Œ์„ ๋ง‰๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•จ.

  • sema_down()
    ํ—ˆ๊ฐ€์ฆ์„ ํš๋“ํ•˜๋ ค๋Š” ์‹œ๋„. ํ—ˆ๊ฐ€์ฆ์ด ์—†์œผ๋ฉด waiters ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด๊ฐ€์„œ block ์ƒํƒœ๋กœ ์ „ํ™˜๋จ
  • sema_up()
    ํ—ˆ๊ฐ€์ฆ์„ ๋ฐ˜ํ™˜. waiters ๋ฆฌ์ŠคํŠธ์—์„œ ์šฐ์„ ์ˆœ์œ„ ๋†’์€ ์Šค๋ ˆ๋“œ๋ฅผ ๊นจ์›€ unblock
  • waiters ๊ธฐ๋‹ค๋ฆฌ๋Š” ์Šค๋ ˆ๋“œ ๋ชฉ๋ก (์ •๋ ฌ ๊ธฐ์ค€: priority)

Main goal
ํ˜„์žฌ PintOS ์Šค์ผ€์ค„๋Ÿฌ๋Š” FIFO ๋ฐฉ์‹ โ†’ ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์Šค์ผ€์ค„๋ง์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒŒ ๋ชฉํ‘œ

๐ŸŽฏ ๋ชฉํ‘œ

  • ready_list๋ฅผ priority ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•ด์„œ ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์Šค๋ ˆ๋“œ๋ฅผ ๋จผ์ € ์‹คํ–‰
  • ์„ธ๋งˆํฌ์–ด, ๋ฝ, ์กฐ๊ฑด๋ณ€์ˆ˜ ๋“ฑ ๋™๊ธฐํ™” ๊ตฌ์กฐ์—์„œ๋„ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์Šค๋ ˆ๋“œ ๋จผ์ € ๊นจ์–ด๋‚˜๊ฒŒ ํ•˜๊ธฐ
  • Preemption (์„ ์ ): ์ƒˆ๋กœ ๋“ค์–ด์˜จ ์Šค๋ ˆ๋“œ๊ฐ€ ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฉด CPU ๋บ๊ธฐ

๐Ÿ“Œ ๊ตฌํ˜„์—์„œ ๊ณ ๋ คํ•  ํ•ต์‹ฌ ์„ธ ๊ฐ€์ง€
1. Priority Scheduling

  • ready_list์—์„œ ํ•ญ์ƒ priority ๋†’์€ ์Šค๋ ˆ๋“œ ๋จผ์ € ์‹คํ–‰

  • ์ƒˆ ์Šค๋ ˆ๋“œ๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ํ˜„์žฌ running ์Šค๋ ˆ๋“œ์™€ ์šฐ์„ ์ˆœ์œ„ ๋น„๊ต

  1. Priority Synchronization
  • Lock, Semaphore, Condition Variable ๋“ฑ์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์Šค๋ ˆ๋“œ๋„ priority ์ˆœ ์ •๋ ฌ
  1. Priority Donation
  • ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฝ์„ ์žก๊ณ  ์žˆ์–ด์„œ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” ๋ฌธ์ œ ํ•ด๊ฒฐ
profile
Move forward

0๊ฐœ์˜ ๋Œ“๊ธ€