리λ μ€ μμ€ν μ λΆν κ³Όμ κ³Ό νν μ€μ λΆν κ³Όμ μ λΉκ΅. μ΄ κ³Όμ μμ init νλ‘μΈμ€, νμΌμμ€ν μ΄κΈ°ν κ³Όμ μ€λͺ
μ€μ 리λ μ€ μμ€ν μ λΆν κ³Όμ μ λ€μκ³Ό κ°λ€.
- BIOS
- Boot Loader
- Kernel
- Upstart
ν΄λΉ λΆν νλ‘μΈμ€κ° μλ£λλ©΄ νμΌμμ€ν μ κ·Ό, μ μ νλ‘κ·Έλ¨ μ€νμ΄ κ°λ₯ν idle μνλ‘ μ νλλ€.
μ»΄ν¨ν°μ μ μμ΄ κ³΅κΈλλ©΄ λ©μΈλ³΄λμ ROMμμ μ€νλλ firmwareμ΄λ€. λΆν μμ BIOSμ μν μ diskμμ MBRμ μλ boot loaderλ₯Ό νΈμΆνμ¬ μ€ννλ κ²μ΄λ€.
boot loaderλ
[κ°λ μ λν ꡬ체μ μΈ μ€λͺ μ μμ±ν©λλ€. ꡬνκ³Ό κ΄λ ¨λ λμ μ리, μ£Όμ κ°λ , κ΄λ ¨ μ©μ΄ λ±μ ν¬ν¨ν©λλ€.]
[μ΄ κ°λ κ³Ό κ΄λ ¨λ μ½λ μμΉλ ꡬν λ°©λ²μ μ€λͺ ν©λλ€.]
- νμΌ μμΉ:
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
μ λλ€.
[νμλ€μ΄ λ κΉμ΄ μ΄ν΄ν μ μλλ‘ μ°Έκ³ ν μλ£(λ¬Έμ, λ§ν¬ λ±)λ₯Ό μ 곡νμΈμ.]