μ΄λ² μ£Ό Jungle Week10~11μμλ PintOS: User Programs λ¨κ³λ₯Ό μ§ννλ©°,
μλ ν
μ€νΈμΌμ΄μ€λ€μ λͺ¨λ ν΅κ³Όν΄μΌ νλ€.
| ν μ€νΈ μ΄λ¦ | μλ―Έ |
|---|---|
args-none | μΈμ μμ΄ μ€ν (μ: run echo) |
args-single | μΈμ 1κ° (μ: run echo hello) |
args-multiple | μΈμ μ¬λ¬ κ° (μ: run echo a b c) |
args-many | μΈμ κ΅μ₯ν λ§μ΄ (μ€ν κ²½κ³ ν μ€νΈ) |
args-dbl-space | μΈμ μ¬μ΄ κ³΅λ°±μ΄ μ€λ³΅λ κ²½μ°λ μ²λ¦¬λλμ§ |
νΉν μ΄μ λ¨κ³μμ ꡬνν κΈ°λ₯λ€μ΄
μ΄λ² μ£Ό μμ€ν
μ½, νλ‘μΈμ€ μ€ν λ‘μ§ λ±μ μν΄
λ§κ°μ§ μλ μκΈ° λλ¬Έμ, μ 체 ν
μ€νΈμ μ¬κ²μ¦μ΄ νμμ΄λ€.
νμ¬ κ΅¬νν λ²μ:
args-none, args-single, args-multiple, args-many, args-dbl-space
β μ¦, Argument Passing κΈ°λ₯μ λ¨Όμ ꡬννκ³ μμ.
μμ€ν
μ½μ μμ§ κ΅¬ννμ§ μμκΈ° λλ¬Έμ ν
μ€νΈ κ²°κ³Όμ pass νμΈμ λΆκ°
λμ μλμ²λΌ μ§μ λͺ
λ Ήμ΄λ₯Ό μ€νν΄μ κ°μ μ μΌλ‘ νμΈ μ€μ΄λ€.
pintos -v -k -T 60 -m 20 --fs-disk=10 \
-p tests/userprog/args-multiple:args-multiple \
-- -q -f run 'args-multiple a b c d e f g'
β μ΄λ₯Ό ν΅ν΄ Argument Passingμ΄ μ λλ‘ μνλμλμ§ stdoutμ ν΅ν΄ 체ν¬νλ λ°©μμ΄λ€.
Argument Passing ꡬν μ΄νμ 무μμ syscallμ λͺ¨λ ꡬννλ κ²μ΄ μλλΌ,
ν
μ€νΈ μμ‘΄μ±κ³Ό ꡬν λμ΄λλ₯Ό κ³ λ €ν μ λ΅μ μΈ κ΅¬ν μμκ° νμνλ€.
| μμ€ν μ½ | ꡬν μ΄μ |
|---|---|
halt | κ°μ₯ κ°λ¨. μμ€ν
μ’
λ£μ© (shutdown_power_off() νΈμΆ) |
exit | νλ‘μΈμ€ μ’ λ£ μ λ°νκ° μ λ¬. waitμ μ°κ²°λ¨ |
wait | λΆλͺ¨κ° μμ νλ‘μΈμ€μ μ’ λ£λ₯Ό κΈ°λ€λ¦Ό |
exec | μμ νλ‘μΈμ€λ₯Ό μ€ν. start_process() νΈμΆ νΈλ¦¬κ±° |
μ΄ λ€ κ°μ§λ syscall μ 체 ꡬ쑰λ₯Ό μΈν νλ λ° νμμ΄λ€.
syscall λ²νΈ β dispatch β handler ꡬν νλ¦μ μ΄λ μμ±ν΄μΌ νλ€.
| μμ€ν μ½ | ꡬν μ΄μ |
|---|---|
create, open | νμΌ μμ±, μ΄κΈ° κΈ°λ₯. νμΌ μμ€ν μ°λ μμ |
write, read | stdout / stdin μ²λ¦¬λΆν° μμ, μ μ°¨ νμ₯ |
close | μ΄λ¦° νμΌμ λ«κ³ μμ μ 리 |
μ¬κΈ°μλΆν°λ νμΌ λμ€ν¬λ¦½ν° ν μ΄λΈ, inode μ κ·Ό, λκΈ°ν(lock) λ±μ κ°λ μ΄ λ³Έκ²©μ μΌλ‘ λ±μ₯νλ€.
fork()μ μμ νλ‘μΈμ€ 볡μ¬| ν΅μ¬ ꡬν νλͺ© | μ€λͺ |
|---|---|
process_fork() | λΆλͺ¨μ λ μ§μ€ν° μν, μ€ν, νμ΄μ§ ν μ΄λΈ λ³΅μ¬ |
fd λ³΅μ¬ | νμΌ λμ€ν¬λ¦½ν° ν μ΄λΈ λ³΅μ¬ νμ |
λκΈ°ν | μμμ λ‘λ© μλ£λ₯Ό κΈ°λ€λ¦¬κΈ° μν΄ sema_down/up μ¬μ© |
fork-*,multi-child-fdλ±μ ν μ€νΈλ€μ΄ μ΄ κΈ°λ₯μ κ²μ¦νλ€.
| ν μ€νΈ μμ | μ€λͺ |
|---|---|
rox-* | μ€ν νμΌμ μ½κΈ° μ μ©μΌλ‘ λ§€ννλμ§ νμΈ |
bad-* | μλͺ»λ μ£Όμ μ κ·Όμ λν΄ page faultκ° μ λλμ§ νμΈ |
lg-*, sm-* | λκ·λͺ¨ ν λΉ/νμΌμ ν μ€νΈ. OOM(out of memory) μ²΄ν¬ |
syn-* | νμΌ λκΈ°ν μ²λ¦¬ νμΈ |
μ΄ λ¨κ³λ λμ΄λκ° λμΌλ©° lazy loading, stack growth, page fault handler ꡬνμ΄ νμν΄μ§λ€.
alarm-*, priority-* λ± ν
μ€νΈλ μ΄λ² μ£Όμ μ¬κ²μ¦ λμ[μλ£]
1. Argument Passing: args-none ~ args-dbl-space
[μ°μ ꡬν]
2. halt / exit / wait / exec β syscall ꡬ쑰 μ€μ
3. create / open / read / write / close β νμΌ syscall
4. fork / μμ λ©λͺ¨λ¦¬ λ³΅μ¬ / fd ν
μ΄λΈ 볡μ¬
5. rox / bad / lg / sm / syn λ± κ³ κΈ ν
μ€νΈ
[μ°Έκ³ ]
- ν
μ€νΈ νλλΉ μμ€ν
μ½μ μ‘°κΈμ© μΆκ°νλ©° μ μ§μ μΌλ‘ μμ±ν κ²
- syscall.c, process.c, file.c, pagedir.c λ± νμΌ μ€μ¬ λΆμ
μΆμ²