• 카테고리

    질문 & 답변
  • 세부 분야

    데스크톱 앱 개발

  • 해결 여부

    해결됨

강사님 질문이 너무 많아 죄송합니다.

24.03.28 14:20 작성 24.03.28 22:17 수정 조회수 80

1

메모리를 내부적으로 64KB 와 4KB 로 관리하는 내역이 뭔지 좀 자세한 설명 부탁드릴 수 있는지요?

4KB 는 시스템에서 한번에 이동하는 즉 PAGE 단위라는 것은 알고 있는데 64KB 의 의미는 정확히 이해가 좀 안가서요....

또한 4Kb 를 넘어가는 메모리 요청은 한페이지를 넘어가는데 이 경우 메모리의 주소 관리 등은 어떻게 이루어 지는지 궁금합니다.

아울러 한가지만 더 여쭤보면 만약 스레드를 생성하고 대기하기도 전에 스레드가 종료되어 버리면 WaitForSingleObject는 어떻게 동작하나요?

또한 SetEvent() 를 호출하여 이벤트가 signalled 상태로 변경하면 WaitForSingleObject() 를 호출하는 모든 스레드는몇번이고 Event 가 non-signalled 로 전환되기 전까지는 몇번이고 WaitForSingleObject() 를 통해 Event 를 받을 수 있게 되는 건가요?

 

답변 1

답변을 작성해보세요.

0

관련 내용은 가상 메모리 시스템에 대한 질문이라 할 수 있겠습니다. 그러므로 우선 운영체제 수업에서 가상 메모리 부분에 대해 다시 한 번 학습하시기를 권합니다. 그렇지 않으면 모호한 내용을 암기하는 방식으로 공부 할 수 밖에 없습니다.

보통 64KB allocation size는 CPU가 1차 RAM 메모리를 관리하는 단위로 사용됩니다. 그리고 4KB를 넘어가는 경우는 여러 Page를 연속해 이어 붙여서 사용합니다. 가령 4KB + 1바이트가 필요하다면 결국 2개 Page 메모리가 필요합니다.

그리고 새로 생성한 스레드의 종료를 대기하기도 전에 대상 스레드가 종료된다면 WaitForSingleObject() 함수는 즉시 반환합니다.

마지막으로 이벤트 상태는 최초 생성시 Auto reset 속성을 부여한다면 SetEvent() 한번에 대해 WaitForSingleObject() 함수는 한 번만 호출됩니다. 가령 한 이벤트에 대해 세 스레드에서 모두 이를 대기하고 있었다면 그 중 하나반 반환하고 나머지 둘은 여전히 이벤트가 세트되기를 기다리게 됩니다. 참고하시기 바랍니다. 😄

감사합니다. 강사님