Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

책을 보다가.. 인터럽트 서비스 루틴과 함수에 관하여 궁금한 점이 있습니다.(질문 5개...) #47

Closed
chlahfo opened this issue Mar 27, 2023 · 2 comments

Comments

@chlahfo
Copy link

chlahfo commented Mar 27, 2023

  1. 135p 에 'CPU 는 하드웨어 인터럽트 요청을 보낸 대상으로부터 데이터 버스를 통해 인터럽트 벡터를 전달받습니다.' 라고 적혀있는데, 그 전 페이지에 인터럽트 벡터를 알면 인터럽트 서비스 루틴의 시작 주소를 알 수 있기 때문에 CPU 는 인터럽트 벡터를 통해 특정 인터럽트 서비스 루틴을 처음부터 실행할 수 있습니다. 라고 적혀있습니다. 그렇다면, 인터럽트 벡터는 주소버스를 타지 않고 데이터 버스를 타는 이유는 무엇인가요?? 인터럽트 벡터에 담겨있는 시작 주소를 전달 받아서 프로그램 카운터에 넣은 뒤 실행해야 할 것 같은데..제가 생각한 것과 동작이 다르거나 주소 외에 데이터 정보가 추가로 들어있는 건가요??

  2. 되게 멍청한 질문같긴 한데... 함수가 순차적으로 실행되면 메모리에서 스택영역(↔ 힙 영역)에 스택 프레임이 따로 쌓이잖아요..마찬가지로 인터럽트 서비스 루틴도 스택에 저장될 때, 스택 프레임이 쌓이는 건가요? 만약 맞다면 인터럽트 서비스 루틴의 스택 프레임도 함수의 스택프레임과 구조가 똑같나요??

  3. 2번과 비슷한 질문이지만 함수가 실행 될 때, 인터럽트 서비스 루틴은 함수와 비슷하게 동작할까요?? C언어에서 함수가 실행 될 때 CALL 과 RETURN 명령어가 실행된다는 것은 이해를 했는데.. 비슷한 맥락으로(스택에 저장된다는 점) 인터럽트 서비스 루틴이 발생했을 때도 CALL 과 RETURN 명령어가 실행 되는지 궁금합니다.

  4. 만약 둘 다 명령어가 실행된다면.. 큰 맥락으로 봤을 때, CALL(호출) > JUMP(호출한 곳으로 점프) > RETURN(다시 돌아감) 순으로 실행되나요? C언어에서의 RETURN 은 보통 값을 반환한다는 뜻을 가지는데, 여기서도 값을 반환한다는 뜻을 가지나요? 아니면 다시 CALL 전의 주소로 돌아간다는 뜻을 가지나요?

  5. 둘을 비교하다보니까 궁금해진건데, 인터럽트 등등 처럼... 하나의 프로그램은 하나의 거대한 함수라고 볼 수 있을까요? 프로그램도 명령어와 데이터로 이루어져있고, 함수도 명령어와 데이터로 이루어져있잖아요. 특히 C언어에서 꼭 프로그램은 main 문이 존재하기도 하구요..

@chlahfo
Copy link
Author

chlahfo commented Mar 27, 2023

악...ㅠㅠ 질문 올릴 때 오류나서 계속 올렸던 건데 죄다 올라가버렸네요..
똑같은 질문들인데 나머지 두 질문은 삭제해주실 수 있으신가요?? 부탁드립니다..

@kangtegong
Copy link
Owner

  1. 네 그렇습니다. 주소 뿐만이 아니라 다른 정보들도 함께 존재하기 때문입니다. 그리고 다른 정보에 대해서는 책에서는 굳이 언급하지는 않았습니다.
  2. 맞습니다 :)
  3. 네 그렇습니다. 함수 실행 과정과 유사합니다 (CALL-RETURN)
  4. 네 그렇습니다 :) 잘 이해하셨습니다.
  5. 그렇습니다. 실제로 인터럽트 서비스 루틴 코드를 관찰해보아도 그냥 함수일 뿐입니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants