hyojeonglee / osfall2019

Undergraduate Operating Systems course (2019 fall)
17 stars 8 forks source link

task_struct => prinfo Kernel Panic #21

Closed chphch closed 5 years ago

chphch commented 5 years ago

task_struct에서 prinfo로 데이터를 옮기는 코드에서 커널 패닉이 발생하는 것 같습니다. 어떤 문제일 가능성이 있을까요?

read_lock, read_unlock 처리는 했습니다.

// 다른 코드 변화 없이 아래 줄이 있을땐 오류 발생, 없으면 오류가 발생하지 않음
p->state = ts->state;
hyojeonglee commented 5 years ago

프로그램이 죽는 시점에 ts->state에 있는 값을 printk로 확인해보시겠어요?

chphch commented 5 years ago

p-> state = ts->state 없이 printk만 하면 문제 없이 모두 화면에 찍힙니다.

커널이 죽는 시점에 창이 너무 빨리 위로 올라가서 그 순간의 값을 확인하기 어려운데 다른 방법이 있을까요?

yoona3316 commented 5 years ago

Ctrl+a 누르시고 esc누르시면 위로 올라간 창을 볼 수 있어요

hyojeonglee commented 5 years ago

네 위 학생분 말씀도 맞고, 추가로 p->state = ts->state 전후로 확인을 위해 printk("string")을 넣으셨다면 타이젠 쉘에서 dmesg | grep "string" 수행하셨을 때, "string"이 있는 라인을 확인할 수 있습니다.

hyojeonglee commented 5 years ago

또, 이 에러 관련해서 디버깅 방향을 p의 할당 (kmalloc) 등이 제대로 되었는지 확인하시는 쪽으로 가셔야할 것같습니다. prinfo buffer의 크기는 prinfo struct size * NR이 되어야합니다.