hyojeonglee / osfall2019

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

[proj1] Error handling에 대한 질문 / process 출력에 관한 질문 #9

Open kooyunmo opened 5 years ago

kooyunmo commented 5 years ago

안녕하세요 조교님. 몇 가지 질문이 있습니다.

1. Ptree 출력은 swapper 부터인가요?

project1 pdf 문서의 example program output 부분에서는 ptree 출력시에 swapper부터 출력을 하고 있고, github의 project1 readme에서는 systemd와 kthread부터 출력을 하고 있습니다.

현재는 후자의 기준대로 구현을 하였는데 무엇이 맞는건가요?


2. Error handling 상황에서 return value는 무엇으로 해야하나요?

pdf 자료에서 에러 발생시(-EINVAL, -EFAULT)에는 errno와 perror로 에러 메세지를 출력하라고만 되어있고 리턴값은 무엇으로 해야하는지 설명이 안되어 있는데 이 상황에는 -1을 리턴해도 괜찮나요? 그게 아니라면 에러 상황시 리턴값은 무엇으로 해야하는지 궁금합니다.


3. Error handling 방법

perror() 함수의 경우 stdio.h에 포함되어있는데 커널에 이를 넣으면 빌드에 오류가 발생합니다. 에러 상황일 경우, 커널의 syscall_ptree()함수에서는 errno를 세팅만 하고 에러에 대한 출력(perror)는 유저 테스트 코드에서 하는 게 맞나요?


4. syscall ptree의 인자 중 nr로 음수가 들어가는 경우

nr이 음수가 되면 kmalloc 시에 바로 에러가 발생할 것 같은데 이와 같은 경우도 고려를 해야하나요?

hyojeonglee commented 5 years ago

안녕하세요.

  1. 둘 중 무엇으로 하셔도 괜찮습니다.
  2. 네, -1로 하시면 됩니다.
  3. 말씀하신 내용이 맞습니다.
  4. nr이 음수인 경우는 고려하지 않습니다.
yoona3316 commented 5 years ago

조교님 3번이 자꾸 헷갈려서 질문 드립니다. syscall 함수 내부에서 EINVAL이 발생할 경우, -EINVAL을 리턴하고 유저 application에서 리턴값이 -1일경우 errno를 읽어들인 뒤 perror를 프린트한다고 생각했는데 syscall 함수 내에서 EINVAL이 발생하면 -1을 리턴하고 errno를 -EINVAL로 세팅하는 건가요?

hyojeonglee commented 5 years ago

먼저 생각하셨던 것이 맞습니다. 시스템콜에서 EINVAL 등을 리턴하고 유저 단에서 말씀하신대로 처리하면 됩니다.