π€«μ΅λͺ μ± λ³΄μ₯μ μν΄ νμ 1,2,3μΌλ‘ νκΈ°νμ΅λλ€.
ποΈμ λ νμ3μ λλ€.
95 κ° μ€ 1κ°fail
test | trial 4 (1/95) | trial 3 (18/95) | trial 2 (19/95) | trial 1 (18/95) |
---|---|---|---|---|
tests/threads/priority-donate-chain | β | β | β | β |
tests/userprog/args-none | β | β | β | β |
tests/userprog/args-single | β | β | β | β |
tests/userprog/args-multiple | β | β | β | β |
tests/userprog/args-many | β | β | β | β |
tests/userprog/args-dbl-space | β | β | β | β |
tests/userprog/halt | β | β | β | β |
tests/userprog/exit | β | β | β | β |
tests/userprog/create-normal | β | β | β | β |
tests/userprog/create-empty | β | β | β | β |
tests/userprog/create-null | β | β | β | β |
tests/userprog/create-bad-ptr | β | β | β | β |
tests/userprog/create-long | β | β | β | β |
tests/userprog/create-exists | β | β | β | β |
tests/userprog/create-bound | β | β | β | β |
tests/userprog/open-normal | β | β | β | β |
tests/userprog/open-missing | β | β | β | β |
tests/userprog/open-boundary | β | β | β | β |
tests/userprog/open-empty | β | β | β | β |
tests/userprog/open-null | β | β | β | β |
tests/userprog/open-bad-ptr | β | β | β | β |
tests/userprog/open-twice | β | β | β | β |
tests/userprog/open-twice | β | β | β | β |
tests/userprog/close-normal | β | β | β | β |
tests/userprog/close-twice | β | β | β | β |
tests/userprog/close-bad-fd | β | β | β | β |
tests/userprog/read-normal | β | β | β | β |
tests/userprog/read-bad-ptr | β | β | β | β |
tests/userprog/read-boundary | β | β | β | β |
tests/userprog/read-zero | β | β | β | β |
tests/userprog/read-stdout | β | β | β | β |
tests/userprog/read-bad-fd | β | β | β | β |
tests/userprog/write-normal | β | β | β | β |
tests/userprog/write-bad-ptr | β | β | β | β |
tests/userprog/write-boundary | β | β | β | β |
tests/userprog/write-zero | β | β | β | β |
tests/userprog/write-stdin | β | β | β | β |
tests/userprog/write-bad-fd | β | β | β | β |
tests/userprog/fork-once | β | β | β | β |
tests/userprog/fork-recursive | β | β | β | β |
tests/userprog/fork-read | β | β | β | β |
tests/userprog/fork-close | β | β | β | β |
tests/userprog/fork-boundary | β | β | β | β |
tests/userprog/exec-once | β | β | β | β |
tests/userprog/exec-arg | β | β | β | β |
tests/userprog/exec-boundary | β | β | β | β |
tests/userprog/exec-missing | β | β | β | β |
tests/userprog/exec-bad-ptr | β | β | β | β |
tests/userprog/exec-read | β | β | β | β |
tests/userprog/wait-simple | β | β | β | β |
tests/userprog/wait-twice | β | β | β | β |
tests/userprog/wait-killed | β | β | β | β |
tests/userprog/wait-bad-pid | β | β | β | β |
tests/userprog/multi-recurse | β | β | β | β |
tests/userprog/multi-child-fd | β | β | β | β |
tests/userprog/rox-simple | β | β | β | β |
tests/userprog/rox-child | β | β | β | β |
tests/userprog/rox-multichild | β | β | β | β |
tests/userprog/bad-read | β | β | β | β |
tests/userprog/bad-write | β | β | β | β |
tests/userprog/bad-read2 | β | β | β | β |
tests/userprog/bad-write2 | β | β | β | β |
tests/userprog/bad-jump | β | β | β | β |
tests/userprog/bad-jump2 | β | β | β | β |
tests/filesys/base/lg-create | β | β | β | β |
tests/filesys/base/lg-full | β | β | β | β |
tests/filesys/base/lg-random | β | β | β | β |
tests/filesys/base/lg-seq-block | β | β | β | β |
tests/filesys/base/lg-seq-random | β | β | β | β |
tests/filesys/base/sm-create | β | β | β | β |
tests/filesys/base/sm-full | β | β | β | β |
tests/filesys/base/sm-random | β | β | β | β |
tests/filesys/base/sm-seq-block | β | β | β | β |
tests/filesys/base/sm-seq-random | β | β | β | β |
tests/filesys/base/syn-read | β | β | β | β |
tests/filesys/base/syn-remove | β | β | β | β |
tests/filesys/base/syn-write | β | β | β | β |
tests/userprog/no-vm/multi-oom | β | β | β | β |
2023/06/02~2023/06/12
* μνν μν΅μ μν΄ νλ‘μ νΈ μ§ν μ λ
8μμ μΌμ 곡μ νμ¬ μ§ν μν© νμ
νμ¬ κΈ°λ‘νμ΅λλ€.
λ μ§ | νμ 1 | νμ 2 | νμ 3 |
---|---|---|---|
2023.06.01 | alarm clock ꡬν | κ°λ°νκ²½ μΈν (new branch) | |
2023.06.02 | alarm clock ꡬν | gitbook userprog λΆλΆ μ½κΈ° λ° μ 리νκΈ° | |
2023.06.03 | alarm clock ꡬν | gitbook λ΄μ©μ 리/ν΄μ λ° κ΄λ ¨ μλ£ μ‘°μ¬ | |
2023.06.04 | pintos μ€ν νλ¦ μ 리 | ||
2023.06.05 | priority scheduling κ³΅λΆ | μ΄μ체μ μ± μ½κΈ°:1~3 | argument passing ꡬν |
2023.06.06 | priority scheduling κ³΅λΆ | μ΄μ체μ μ± μ½κΈ°:4~7 | argument passing ꡬν |
2023.06.07 | priority scheduling κ³΅λΆ | μ΄μ체μ μ± μ½κΈ°:8~10 | argument passing ꡬν |
2023.06.08 | synchronization κ³΅λΆ | argument passing ꡬνμμ | argument passing λλ²κΉ & process & thread switching κ°λ κ³΅λΆ λ° μ 리 |
2023.06.09 | user program κ³΅λΆ | argument passing μλ£ | argument passing ꡬν λ΄μ© μ 리 |
2023.06.10 | user program κ³΅λΆ | system call ꡬν μ€ | argument passing λλ²κΉ &syscall ꡬνμμ |
2023.06.11 | system call ꡬν μ€ | syscall ꡬν & λλ²κΉ | |
2023.06.12 | system call ꡬν μ€ | syscall ꡬν & λλ²κΉ β‘οΈκ΅¬ν μμ±νκ³ λ΄μ© μ 리νκΈ° |
- μΈλ§ν¬μ΄ - κ΅μ°© μν(dead lock)μ λν ν΄λ² atomic operation
μμ¬νλ μ² νμ λ¬Έμ
- μμ€ν μ½μ λν΄μ μλ‘κ² μκ² λμμ΅λλ€. μ»΄ν¨ν° μμ€ν μμ, μ¬μ©μ λ 벨μ νλ‘μΈμ€λ μΌλ°μ μΌλ‘ νλμ¨μ΄μ μ§μ μ μΌλ‘ μ κ·Όν μ μμ΅λλ€. μ΄λ κ² μ€κ³λ μ΄μ λ μμ μ±κ³Ό 보μμ±μ μ μ§νκΈ° μν κ²μ λλ€. νμ§λ§ λλλ‘ νλ‘μΈμ€λ νλμ¨μ΄μ μ κ·Όν΄μΌ νλ κ²½μ°κ° λ°μν©λλ€. μλ₯Ό λ€μ΄μ νμΌ μμ€ν μ μ κ·Όνκ±°λ λ€ν¬μν¬ ν΅μ μ νκ±°λ νλμ¨μ΄ μ₯μΉλ₯Ό μ μ΄ν νμκ° μλ κ²½μ°μ λλ€. μ΄λ΄ κ²½μ° μ¬μ©μ νλ‘μΈμ€λ μμ€ν μ½μ μ¬μ©νμ¬ νμν μλΉμ€λ₯Ό μμ²ν©λλ€. μμ€ν μ½μ μ¬μ©νλ©΄, νλ‘μΈμ€λ μ μ 컀λλͺ¨λλ‘ μ νλλ©° μ΄ μνμμλ νλμ¨μ΄μ μ§κ² μ κ·Όμ΄ κ°λ₯νκ² λ©λλ€. μ΄ μμ μ μ΄μ 체μ κ° μ μ΄ν©λλ€.
- μμ€ν μ½, userκ³Ό kernel mode μνλ₯Ό μ€κ°λ νλ¦, λλ²κΉ ν΄ μ¬μ©λ² ft.backtrace
νμ 1: ν΄λ‘ μ½λ© νμ§ μκ³ ν΄κ²°νκΈ° μν΄ λλ²κΉ μ μκ°μ λ무 λ§μ΄ μ¬μ©ν μ
νμ 2: 첫 μ£Όμλ λ§€μ° μ΄λ €μ΄ μ£Όμ°¨μμ§λ§ μ΄λ² μ£Όμ°¨λ λ νλ€μλ ν μ£Όμμ΅λλ€. μΌλ¨ μ΄λ»κ² 곡λΆν΄μΌ νλ μ§μ λν΄ λ°©ν₯μ μ λλ‘ μ‘μ§ λͺ»νμ΅λλ€. κ°λ 곡λΆλ₯Ό μ§μ€μ μΌλ‘ ν΄μΌνλ κ²μΈμ§ μ£Όμ΄μ§ νμ€νΈλ₯Ό μ§νν΄μΌ νλ κ²μΈμ§ ν€λ§€μμ΅λλ€. λν 곡λΆλ₯Ό νμμμλ μ½λλ₯Ό 지 μ μμκ³ νΌμ νμΌλ‘ 무μΈκ°λ₯Ό μλνλ €κ³ νλ €λ μμ§κ° λ§μ΄ λΆμ‘±ν΄μ‘λ κ±° κ°μ΅λλ€.
νμ 3: μ½λμ μμ΄ λ°©λνλ€λ³΄λ μ 체μ μΈ νλ¦μ μ‘λκ² μ΄λ €μ μ΅λλ€. νμ κ·Έλμ μ΄κ±Έ μ ν΄μ£Όλ κ±°μ§?
λ₯Ό μκ°νλλ°, μλ‘μ΄ κ°λ
λ€κ³Ό λ°©λν μ½λλ λλ¬Έμ, μΌλ¨μ μ½λλ₯Ό λ―μ΄λ³΄μνλ κ² μ€νλ € λ μ μ§λ¬Έμ λ΅κ³Όλ λ©μ΄μ§κ² νλ κ±° κ°μμ κ°λ
μ μ‘κΈ°λ, μ½λλ₯Ό μ§κΈ°μλ μ΄λ €μμ΄ μμμ΅λλ€. κ²λ€κ° νμλ pptλ μΉ΄μ΄μ€νΈλ μ’ λ¬λΌμ Έμ ν·κ°λ¦Ό..
π€
λ°©λ²μ μ ν΄μ Έμμ§ μλ€λ κ²μ΄ ν΅μ¬μΈ κ±° κ°μ΅λλ€. μ κΈμ λ§ κ·Έλλ‘ μ΄μλ¨κΈ° μν΄ μλ¨κ³Ό λ°©λ²μ κ°λ¦¬λ©΄ μλκ² λ€λΌλ λ€μ§μ νκ² λ κ±° κ°μ΅λλ€. λ€λ€ ν€λ©κ³ μμΌλ©΄μλ μ΅μ μ λ€ν΄μ κΈΈμ μ°Ύμλκ°λ €λ λͺ¨μ΅μ 보면μ κ·Έλλ μΌλ¨ ν΄λ³΄μλΌλ λ§μμ κ°μ§κ³ ν΄μΌμ§λΌλ μκ°μ΄ λ€μμ΅λλ€.
μΌλ¨ νΉκ°μ λ€μμ λ μ‘°κΈ λ°©ν₯ μ€μ μ λμμ΄ λμλ κ±° κ°μ΅λλ€. μ½λλ₯Ό ꡬννλ©΄μ osμ λν κ°μλ€λ μ°Έκ³ ν΄μ μ΄λ μ λ νλ¦μ λν μ΄ν΄λ₯Ό κ°μ§κ³ λ€μ μ κ·Όν΄μ project2μμ ꡬννκ³ μ νλ κ²(arg passing, system call)κ³Ό μ κ·Έκ²λ€μ ν΄μ€μΌνλ μ§(νμ¬ input λ°λ λ°©μμ λ¬Έμ , kernelκ³Ό userκ°μ μ΄λνκΈ° μν΄ νμν μλ¨)κ° ν¨μ¬ μλΏμμ΅λλ€.
void test_max_priority (void){
if(thread_current ()->priority < list_entry(list_max (&ready_list, cmp_priority, NULL), struct thread, elem)->priority){
return thread_yield();
if(!list_empty(&ready_list)){
if(thread_get_priority() < list_entry(list_front(&ready_list), struct thread, elem)->priority ){
return thread_yield();
}
hex_dump(_if.rsp, _if.rsp, KERN_BASE - _if.rsp, true);
ν΄λΉ μ½λλ₯Ό μκ°νλ μ΄μ λ argument parsingμ ꡬννκ³ μ²μμΌλ‘ testλ₯Ό λλ €λ³΄λ €κ³ νλ€κ° μμΈ μ²λ¦¬λ₯Ό νμ§ μμμ μλμ΄ λμ§ μμμ΅λλ€. νμ¬ κ΅¬κΈλ§μ νλ©΄μ ν΄κ²° λ°©λ²μ μ°Ύμμ΅λλ€.
void
test_max_priority(void) {
if(!intr_context() && !list_empty(&ready_list) && list_entry (list_front(&ready_list), struct thread, elem)->priority > thread_current()->priority)
thread_yield();
}
μ λ² μ£Όμλ μκ°νμλ μ½λμΈλ° λ€μ νλ² μμΈ μ²λ¦¬λ₯Ό νκ² λμμ΅λλ€. λ¬Έμ λ thread_yieldν¨μμμ μΈλΆ νλ‘μΈμ€μ λ΄λΆ νλ‘μΈμ€λ₯Ό ꡬλΆνμ§ λͺ»νλ λ¬Έμ κ° λ°μνμ¬ μ λͺ» νΈμΆλμκ³ !intr_context() μ΄ λΆλΆμ μΆκ°νμ¬ λ΄λΆ μΈν°λ½νΈκ° μ²λ¦¬ μ€ μΌ κ²½μ° trueλ₯Ό λ°ν μμΌμ£Όμ΄ μμΈ μ²λ¦¬λ₯Ό ν΄μ€μΌ νλ€λ κ²μ μκ² λμμ΅λλ€.