Coding, Filming, and Nothing

운영체제 조교 중 재밌었던 메일이 와서, 기록용으로 적어둠


질문

안녕하세요 OOO 교수님의 OS n분반을 수강중인 XXX 학부생입니다.
다름이 아니라 과제에서 모두 구현을 마친 후 여러 테스트케이스를 시도하던중
메모리를 10만큼 allocate을 했을때 10 이상의 메모리에 assign이 가능한것을 확인 하였습니다.
이 때 core dump나 segmentation fault가 나야 하는것인지 아니면 해당 현상이 정상인지 파악이 불가능하여 연락 드립니다.

 

답변

 

그것이 정상일 수 있습니다.

운영체제에서 내용 중 가상 메모리를 관리하고 할당할 때, Paging 기법을 사용하는 것이 기억 나시나요?
C에서는 메모리동작이 page 단위로 할당되기 때문에 학우님께서 할당한 공간보다
추가적으로 공간을 더 사용할 수 있는 가능성이 항상 있습니다.

논리적으로는 요청한 공간이 아니기 때문에 read/write를 수행하면 bad memory address 에러가 뜨면서 운영체제가 프로그램을 죽여버리는 것이 정상적이나, page 단위로 할당이 되었고 internal fragmentation이 발생한 경우에는 프로그램이 계속 동작할 수 있습니다.

Page 단위의 동작을 직접 보시려면, 구조체 하나를 page 크기에 나누어 떨어지지 않게 선언한 후 동적할당을 합니다.
그 후에 할당된 크기를 조회하면 page 크기 단위로 더 크게 메모리가 할당된 것을 확인할 수 있습니다.


도움이 되셨으면 좋겠습니다.

 

 

도움줬었던 포뇨의 말

C계열은 동적할당할 때, 한 페이지 단위로 불러와서 종종 그럽니다... 그게 ㄹㅇ 짜증나요. 

이게 나중에 버그가 될 수 있는데 문제는 항상 터지는 버그가 아니라는게 문제죠. 알고 있으면 금방인데 이제 모르면 평생 모를 수 밖에 없습니다.

profile

Coding, Filming, and Nothing

@_안쑤

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!