From a15f4657e7055ce931a2b409d4cb8af109fdd978 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=ED=99=8D=20=EC=9C=A0=EB=B9=88?= <sara150@ajou.ac.kr>
Date: Sun, 22 Dec 2024 21:59:02 +0900
Subject: [PATCH] Add new file

---
 PROJECT1 : THREADS/3. Priority Scheduling.md | 27 ++++++++++++++++++++
 1 file changed, 27 insertions(+)
 create mode 100644 PROJECT1 : THREADS/3. Priority Scheduling.md

diff --git a/PROJECT1 : THREADS/3. Priority Scheduling.md b/PROJECT1 : THREADS/3. Priority Scheduling.md
new file mode 100644
index 0000000..abdfb32
--- /dev/null
+++ b/PROJECT1 : THREADS/3. Priority Scheduling.md	
@@ -0,0 +1,27 @@
+# 우선순위 스케줄링
+
+### Pintos의 우선순위 스케줄링 및 우선순위 기부 기능 구현
+
+현재 실행 중인 스레드보다 우선순위가 높은 스레드가 준비 목록에 추가되면 현재 스레드는 즉시 프로세서를 새 스레드에 양보해야 합니다.마찬가지로 스레드가 락, 세마포어 또는 조건 변수를 기다리는 경우 가장 우선순위가 높은 대기 스레드가 먼저 깨어나야 합니다. 스레드는 언제든지 자신의 우선순위를 높이거나 낮출 수 있지만 우선순위를 낮춰 더 이상 가장 높은 우선순위가 아닌 스레드는 즉시 CPU를 양보해야 합니다.스레드는 언제든지 자신의 우선순위를 높이거나 낮출 수 있지만 우선순위를 낮춰 더 이상 가장 높은 우선순위가 아닌 스레드는 즉시 CPU를 양보해야 합니다.
+
+스레드 우선순위는 `PRI_MIN(0)`에서 `PRI_MAX(63)`까지입니다. 숫자가 낮을수록 우선순위가 낮아지므로 우선순위 0이 가장 낮은 우선순위이고 우선순위 63이 가장 높은 우선순위입니다. 초기 스레드 우선순위는 `thread_create()`에 인수로 전달됩니다. 다른 우선순위를 선택할 이유가 없으면 `PRI_DEFAULT(31)`를 사용합니다. `PRI_` 매크로는 `threads/thread.h`에 정의되어 있으며 해당 값을 변경해서는 안 됩니다.
+
+우선순위 스케줄링의 한 가지 문제는 "우선순위 역전(priority inversion)"입니다. 각각 높은 우선순위, 중간 우선순위, 낮은 우선순위 스레드인 H, M, L을 고려합니다. H가 L을 기다려야 하고(예를 들어 L이 보유한 락을 위해) M이 준비 목록에 있는 경우, 낮은 우선순위 스레드는 CPU 타임을 얻지 못하기 때문에 H는 CPU 타임을 절대 얻지 못합니다. 이 문제에 대한 부분적 해결책은 L이 락락을 보유한 동안 H가 L에 우선순위를 "기부"하고, L이 락을 해제(따라서 H가 획득)하면 기부를 회수하는 것입니다.
+
+우선순위 기부를 구현하세요. 우선순위 기부가 필요한 모든 상황을 고려해야 합니다. 여러 우선순위가 단일 스레드에 기부되는 여러 기부를 확실히 처리할 수 있어야 합니다. 중첩된 기부도 처리해야 합니다: H가 M이 보유한 잠금을 기다리고 있고 M이 L이 보유한 잠금을 기다리고 있는 경우 M과 L 모두 H의 우선순위로 올려져야 합니다. 필요한 경우 중첩된 우선순위 기부의 깊이에 8레벨과 같이 합리적인 제한을 적용할 수 있습니다.
+
+락에 대한 우선순위 기부를 구현해야 합니다. 다른 Pintos 동기화 구성에 대한 우선 순위 기부를 구현할 필요는 없습니다. 모든 경우에 대한 우선 순위 스케줄링을 구현해야 합니다.
+
+마지막으로 스레드가 자체 우선 순위를 조사하고 수정할 수 있도록 하는 다음 함수를 구현합니다. 이러한 함수의 스켈레톤 코드는 `threads/thread.c`에 제공됩니다.
+
+`void thread_set_priority (int new_priority);`
+
+> 현재 스레드의 우선 순위를 새 우선 순위로 설정합니다. 현재 스레드의 변경된 우선순위가 더 가장 높은 우선 순위를 갖지 않는다면 프로세서 사용을 양보합니다.
+
+`int thread_get_priority (void);`
+
+> 현재 스레드의 우선 순위를 반환합니다. 우선 순위 기부가 이뤄진다면 더 높은(기부된) 우선 순위를 반환합니다.
+
+스레드가 다른 스레드의 우선 순위를 직접 수정할 수 있도록 하는 인터페이스는 구현할 필요는 없습니다.
+
+우선 순위 스케줄러는 이후 프로젝트에서 사용되지 않습니다.
-- 
GitLab