[ν΄λΉ κ°λ μ ν΅μ¬ λ΄μ©μ κ°λ¨ν μμ½ν©λλ€. μ΄ κ°λ μ΄ λ¬΄μμ΄λ©°, μ μ€μνμ§μ λν΄ μ€λͺ νμΈμ.]
[κ°λ μ λν ꡬ체μ μΈ μ€λͺ μ μμ±ν©λλ€. ꡬνκ³Ό κ΄λ ¨λ λμ μ리, μ£Όμ κ°λ , κ΄λ ¨ μ©μ΄ λ±μ ν¬ν¨ν©λλ€.]
- [μ£Όμ νΉμ§ 1]
- [μ£Όμ νΉμ§ 2]
μ:
- μ€λ λ(Thread): Pintosμμ λͺ¨λ μ€ν λ¨μλ μ€λ λλ‘ κ΅¬νλ©λλ€. κ° μ€λ λλ κ³ μ ν μ€νκ³Ό 컨ν μ€νΈλ₯Ό κ°μ§λ©°, μ¬λ¬ μ€λ λκ° CPUλ₯Ό 곡μ ν©λλ€.
[μ΄ κ°λ κ³Ό κ΄λ ¨λ μ½λ μμΉλ ꡬν λ°©λ²μ μ€λͺ ν©λλ€.]
- νμΌ μμΉ:
src/threads/[νμΌλͺ ]
- μ£Όμ ν¨μ:
function_name()
: [ν¨μμ μν λ° κ°λ¨ν μ€λͺ ]function_name_2()
: [ν¨μμ μν λ° κ°λ¨ν μ€λͺ ]
μ:
/* threads/thread.c */
/* μ€λ λλ₯Ό μ΄κΈ°ννλ ν¨μ */
void initialize_thread(struct thread *t, const char *name, int priority) {
ASSERT(t != NULL);
ASSERT(name != NULL);
t->priority = priority;
/* Additional initialization code here */
}
[ν΄λΉ κ°λ μ΄ Pintosμμ μ΄λ»κ² μ¬μ©λκ³ , ꡬν μ μ΄λ€ λΆλΆμμ μ€μν μν μ νλμ§ μμ±ν©λλ€.]
μ:
- μ€λ λ κ΄λ¦¬:
- μ€λ λλ Pintosμμ κΈ°λ³Έ μ€ν λ¨μλ‘, CPU μ€μΌμ€λ§ λ° λκΈ°νμ μ£Όμ λμμ λλ€.
- μ€λ λμ μν(ready, running, blocked)λ CPU μ€μΌμ€λ§μ μν₯μ μ€λλ€.
[κ°λ μ μ΄ν΄νλ λ° λμμ΄ λλ κ°λ¨ν μ½λ μμ λ μλ리μ€λ₯Ό μμ±ν©λλ€.]
μ:
/* μ€λ λ μμ±κ³Ό μ€ν */
struct thread *t = thread_create("worker", PRI_DEFAULT, worker_function, NULL);
/* μμ±λ μ€λ λ μ€ν */
thread_unblock(t);
[μ΄ κ°λ μ ꡬννκΈ° μν΄ νμν λ¨κ³ λ° μ κ·Ό λ°©μμ λμ΄ν©λλ€.]
- [λ¨κ³ 1: μ€λͺ ]
- [λ¨κ³ 2: μ€λͺ ]
- [λ¨κ³ 3: μ€λͺ ]
[μ΄ κ°λ κ³Ό κ΄λ ¨λ λ€λ₯Έ κ°λ μ΄λ ꡬν μμλ₯Ό λ§ν¬νκ±°λ κ°λ¨ν μ€λͺ ν©λλ€.]
- [κ΄λ ¨ κ°λ 1]
- [κ΄λ ¨ κ°λ 2]
μ:
- μ€μΌμ€λ§(Scheduling): μ€λ λμ μ€ν μμλ₯Ό κ²°μ νλ μκ³ λ¦¬μ¦. κΈ°λ³Έ μκ³ λ¦¬μ¦μ
priority scheduling
μ λλ€.
[νμλ€μ΄ λ κΉμ΄ μ΄ν΄ν μ μλλ‘ μ°Έκ³ ν μλ£(λ¬Έμ, λ§ν¬ λ±)λ₯Ό μ 곡νμΈμ.]