Skip to content

Latest commit

Β 

History

History
124 lines (75 loc) Β· 3.08 KB

0.boot.md

File metadata and controls

124 lines (75 loc) Β· 3.08 KB

πŸ“– [Booting Proccess]

1. κ°œλ… μš”μ•½

λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ˜ λΆ€νŒ… κ³Όμ •κ³Ό ν•€ν† μŠ€μ˜ λΆ€νŒ… 과정을 비ꡐ. 이 κ³Όμ •μ—μ„œ init ν”„λ‘œμ„ΈμŠ€, νŒŒμΌμ‹œμŠ€ν…œ μ΄ˆκΈ°ν™” κ³Όμ • μ„€λͺ…


2. μ„ΈλΆ€ μ„€λͺ…

μ‹€μ œ λ¦¬λˆ…μŠ€ μ‹œμŠ€ν…œμ˜ λΆ€νŒ…κ³Όμ •μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  1. BIOS
  2. Boot Loader
  3. Kernel
  4. Upstart

ν•΄λ‹Ή λΆ€νŒ… ν”„λ‘œμ„ΈμŠ€κ°€ μ™„λ£Œλ˜λ©΄ νŒŒμΌμ‹œμŠ€ν…œ μ ‘κ·Ό, μœ μ € ν”„λ‘œκ·Έλž¨ 싀행이 κ°€λŠ₯ν•œ idle μƒνƒœλ‘œ μ „ν™˜λœλ‹€.

BIOS

컴퓨터에 전원이 κ³΅κΈ‰λ˜λ©΄ λ©”μΈλ³΄λ“œμ˜ ROMμ—μ„œ μ‹€ν–‰λ˜λŠ” firmware이닀. λΆ€νŒ…μ—μ„œ BIOS의 역할은 disk상에 MBR에 μžˆλŠ” boot loaderλ₯Ό ν˜ΈμΆœν•˜μ—¬ μ‹€ν–‰ν•˜λŠ” 것이닀.

λΆ€νŒ… λ””μŠ€ν¬

Boot Loader

boot loaderλŠ”

[κ°œλ…μ— λŒ€ν•œ ꡬ체적인 μ„€λͺ…을 μž‘μ„±ν•©λ‹ˆλ‹€. κ΅¬ν˜„κ³Ό κ΄€λ ¨λœ λ™μž‘ 원리, μ£Όμš” κ°œλ…, κ΄€λ ¨ μš©μ–΄ 등을 ν¬ν•¨ν•©λ‹ˆλ‹€.]

Kernel

Upstart

ref


3. κ΄€λ ¨ μ½”λ“œ

[이 κ°œλ…κ³Ό κ΄€λ ¨λœ μ½”λ“œ μœ„μΉ˜λ‚˜ κ΅¬ν˜„ 방법을 μ„€λͺ…ν•©λ‹ˆλ‹€.]

  • 파일 μœ„μΉ˜: 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 */
}

4. Pintosμ—μ„œμ˜ μ—­ν• 

[ν•΄λ‹Ή κ°œλ…μ΄ Pintosμ—μ„œ μ–΄λ–»κ²Œ μ‚¬μš©λ˜κ³ , κ΅¬ν˜„ μ‹œ μ–΄λ–€ λΆ€λΆ„μ—μ„œ μ€‘μš”ν•œ 역할을 ν•˜λŠ”μ§€ μž‘μ„±ν•©λ‹ˆλ‹€.]

예:

  • μŠ€λ ˆλ“œ 관리:
    • μŠ€λ ˆλ“œλŠ” Pintosμ—μ„œ κΈ°λ³Έ μ‹€ν–‰ λ‹¨μœ„λ‘œ, CPU μŠ€μΌ€μ€„λ§ 및 λ™κΈ°ν™”μ˜ μ£Όμš” λŒ€μƒμž…λ‹ˆλ‹€.
    • μŠ€λ ˆλ“œμ˜ μƒνƒœ(ready, running, blocked)λŠ” CPU μŠ€μΌ€μ€„λ§μ— 영ν–₯을 μ€λ‹ˆλ‹€.

5. 이해λ₯Ό λ•λŠ” 예제

[κ°œλ…μ„ μ΄ν•΄ν•˜λŠ” 데 도움이 λ˜λŠ” κ°„λ‹¨ν•œ μ½”λ“œ μ˜ˆμ œλ‚˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.]

예:

/* μŠ€λ ˆλ“œ 생성과 μ‹€ν–‰ */
struct thread *t = thread_create("worker", PRI_DEFAULT, worker_function, NULL);
/* μƒμ„±λœ μŠ€λ ˆλ“œ μ‹€ν–‰ */
thread_unblock(t);

6. μ£Όμš” κ΅¬ν˜„ 단계

[이 κ°œλ…μ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 단계 및 μ ‘κ·Ό 방식을 λ‚˜μ—΄ν•©λ‹ˆλ‹€.]

  1. [단계 1: μ„€λͺ…]
  2. [단계 2: μ„€λͺ…]
  3. [단계 3: μ„€λͺ…]

7. κ΄€λ ¨ κ°œλ…

[이 κ°œλ…κ³Ό κ΄€λ ¨λœ λ‹€λ₯Έ κ°œλ…μ΄λ‚˜ κ΅¬ν˜„ μš”μ†Œλ₯Ό λ§ν¬ν•˜κ±°λ‚˜ κ°„λ‹¨νžˆ μ„€λͺ…ν•©λ‹ˆλ‹€.]

  • [κ΄€λ ¨ κ°œλ… 1]
  • [κ΄€λ ¨ κ°œλ… 2]

예:

  • μŠ€μΌ€μ€„λ§(Scheduling): μŠ€λ ˆλ“œμ˜ μ‹€ν–‰ μˆœμ„œλ₯Ό κ²°μ •ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜. κΈ°λ³Έ μ•Œκ³ λ¦¬μ¦˜μ€ priority schedulingμž…λ‹ˆλ‹€.

8. 참고 자료

[νŒ€μ›λ“€μ΄ 더 깊이 이해할 수 μžˆλ„λ‘ μ°Έκ³ ν•  자료(λ¬Έμ„œ, 링크 λ“±)λ₯Ό μ œκ³΅ν•˜μ„Έμš”.]