:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
11/04/06 03:02
저도 아직 프로그래밍을 공부하는 중이라 정확하게 답변을 달 수 없지만 참고가 되셨으면 합니다.
1. 프로그램이 나타내고자 하는 것이 5열 10행 : This is user1 (무한표기) 5열 11행 : .I'm runnig now. (맨앞의 '.' 글자만 계속해서 바뀜) 의 출력을 통해서 "커널이 동작중입니다." 라는 의미를 알려주기 위한 코드인 것 같습니다. 그런데 str2[0]++; 코드만 있으면 ascii 값이 계속해서 1이 더해지면서 무한으로 바뀌기 때문에 어느순간 overflow가 생기면서 컴퓨터에 오류가 생기는 것 같습니다. str2[0]++; 코드 다음에 if(str2[0] == '9') str[2] = '.'; 를 추가해주시면 5열 11행에 출력되는 맨앞의 글자가 ./0123456789./0123456789./01234..... 이런식으로 계속해서 변할 것 같습니다. 무한반복문을 빠져나와야 하는 쪽에 초점을 두시기 보다 무한반복문이 왜 사용되었는지(단순하게 커널이 동작중임을 나타냄)에 초점을 두시면 좋겠네요. 제 생각으론 책의 앞부분에 나올 법한 예제로써 커널의 개념을 잡기 위한 예제로 보입니다. 2. main() 이 정상완료가 되면 0을 반환하는 것으로 알고 있습니다. 비정상완료시 0이 아닌 값(ex: 1, -12312, 23231)을 반환하기 때문에 return 0; 을 써주는 것은 main() 이 정상적으로 종료되었다고 알려주기 위함일 뿐 필수는 아닙니다. 따라서 void main(), int main(void), int main() 등의 main함수를 작성하실 때 return 0; 을 쓰나 안쓰나 프로그램에 큰 영향을 주지 않으며 warning이나 error검출이 되지 않습니다. 하지만 OS구축에 관심이 계시다면 커널들의 상태나 리소스 관리시 실행되고 있거나 실행완료된 프로그램들이 제대로 동작하였는가를 OS가 리턴 값을 통해서 판별하는 경우가 있으므로 int를 반환하는 main함수를 작성하신다면 return 0;을 써주는 습관을 들이는 것이 좋을 것 같습니다.
11/04/06 16:58
소프트웨어 인터럽트는 하드웨어 인터럽트와 다릅니다. (OS가 제공하는) 일종의 function call 로 보시면 됩니다. print_string() 내부의 int 0x80 이 해당 코드입니다.
str2[0]++ 가 계속 수행되면 결국 0 이 될 텐데, null string 을 전달받은 int 0x80 이 무슨 동작을 하는지는 해당 문서를 찾아보아야 합니다.
|