life is egg

[PINTOS] 구조체 초기화 본문

sw정글/C

[PINTOS] 구조체 초기화

삶은계란진재혁 2024. 5. 21. 01:15

pintos 프로젝트 3  가상메모리

 

가상메모리 관련 구현중 vm_alloc_page_with_initial() 함수에 관한 오류이다.

 

vm_alloc_page_with_initial() 은 페이지가 로드 될때 .. 스택을 늘려줘야할때 등등

 

가상메모리에 페이지를 할당해주고 첫번째 페이지폴트가 났을때 페이지가 어떤 방향으로 초기화 될지(nuinit_new) 초기화 해주는 함수이다. 


 

비슷해 보이는 코드이지만 page 구조체의 writable 초기화 위치가 다르다

 

왼쪽 코드는 uninit_new 를 호출하고 나서 writable을 초기화 해주고

 

오른쪽으 코드는 uninit_new 호출전에 writable을 초기화해준다

 

 

간단한 확인을위해 프린트문 찍어주고

 

 

 

 

출력결과를 보면 출력 결과가 다른걸  볼 수있다.

 

 

왼쪽의 코드는 자세히보면 page writable..... ! 오타네.... 무튼  writable의 결과가 모두 false로 출력 되는걸 알 수있다.

 

 

uninit_new 함수에서 무슨일이 일어나는지  봐야한다

 

 

 

uninit_new 함수에서  할당받은 페이지를 새로 초기화 시켜주 기때문에 uninit_new 전에 page의 writable을 초기화 해줘도 의미가 없던것..

 

지금보면 단순해 보이지만 당시에는 오랜동안 머릿속에 물음표를 띄운 문제였다.

 

 

배운점은..

프로젝트 초반에 투입될때는 함수들을 꼼꼼하게 확인...


 

 

그렇다면 왜 writable이 false로 들어올 때도 있고 true 들어올 때도 있을까?

 

vm_alloc_page_with_initial()는 현재 프로그램을 exec 하는 과정중.. load함수에서 호출되고 있는 함수인데

 

load시에 코드영역과 데이터영역을 할당해주는데 코드영역은 read only로 들어오고 데이터영역은  read only로 들어올 수도 있지만 writable하게 들어올 수 도 있기 때문

 

무튼 그렇다..

 

 

'sw정글 > C' 카테고리의 다른 글

[PINTOS] victim frame  (0) 2024.05.28
[PINTOS] syn_read 와... 인터럽트 검증 관련 오류  (0) 2024.05.14
[PINTOS] priority conditon variable test  (0) 2024.05.03
[PINTOS] 타이머 인터럽트의 주체는  (0) 2024.04.29
[Malloc] Implict  (0) 2024.04.18
Comments