게시판 인덱스

 
 FAQFAQ   검색검색   멤버리스트멤버리스트   사용자 그룹사용자 그룹   사용자 등록하기사용자 등록하기 
 개인 정보개인 정보   비공개 메시지를 확인하려면 로그인하십시오비공개 메시지를 확인하려면 로그인하십시오   로그인로그인 

5-2 skeleton code의 수정 가능 여부

 
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2018)
이전 주제 보기 :: 다음 주제 보기  
글쓴이 메시지
이준혁



가입: 2018년 9월 6일
올린 글: 2

올리기올려짐: 2018년11월16일 14:29    주제: 5-2 skeleton code의 수정 가능 여부 인용과 함께 답변

비슷한 질문이 두 번 올라왔던 것 같은데 조교님의 답변 내용이 모순되는 것 같아 질문 드립니다.

https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=6732
https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=6720

reachable 리스트에 모든 서로 다른 로케이션을 추가하도록 만들면 구현이 상당히 지저분해 질 것 같은데
스켈레톤을 스펙이 망가지지 않는 선에서 고쳐도 되는 것이 맞나요?
위로
사용자 정보 보기 비밀 메시지 보내기
김무환



가입: 2018년 9월 12일
올린 글: 9

올리기올려짐: 2018년11월16일 14:47    주제: 질문 인용과 함께 답변

let new_m = List.filter (fun (l, _) -> List.mem l !reachable_locs) m in
if List.length new_m < mem_limit then
let _ = loc_id := !loc_id + 1 in
let new_l = (!loc_id, 0) in
(new_l, new_m)
else
raise GC_Failure

정확히, 이 부분을 수정해도 되는 것인가요?
위로
사용자 정보 보기 비밀 메시지 보내기
배요한
Site Admin


가입: 2018년 3월 6일
올린 글: 107

올리기올려짐: 2018년11월16일 15:28    주제: 인용과 함께 답변

안녕하세요,

malloc_with_gc 뼈대코드를 들여다 보면,

인용:
(* TODO : Complete this function.
* Implement the GC algorithm introduced in class material.
*)
let malloc_with_gc s m e c k =
if List.length m < mem_limit then
let _ = loc_id := !loc_id + 1 in
((!loc_id, 0), m)
else
let _ = reachable_locs := [] in
(* TODO : Add the code that marks the reachable locations.
* let _ = ...
*)
let new_m = List.filter (fun (l, _) -> List.mem l !reachable_locs) m in
if List.length new_m < mem_limit then
let _ = loc_id := !loc_id + 1 in
let new_l = (!loc_id, 0) in
(new_l, new_m)
else
raise GC_Failure


중에서
인용:
(* TODO : Add the code that marks the reachable locations.
* let _ = ...
*)
이 구간에서만 새로운 내용을 추가 할 수 있지, 그 외의 부분
인용:
if List.length m < mem_limit then
let _ = loc_id := !loc_id + 1 in
((!loc_id, 0), m)
else
let _ = reachable_locs := [] in

인용:
let new_m = List.filter (fun (l, _) -> List.mem l !reachable_locs) m in
if List.length new_m < mem_limit then
let _ = loc_id := !loc_id + 1 in
let new_l = (!loc_id, 0) in
(new_l, new_m)
else
raise GC_Failure

는 그대로 유지하셔야 합니다. 그렇게 하지 않으면, 숙제에서 요구된 gc가 탑제된 sm5, 즉, reachable한 로케이션들만 있는 메모리를 가지는 sm5의 동작을 바꾸는 상황이 됩니다.


https://ropas.snu.ac.kr/phpbb/viewtopic.php?t=6720의 2번질문에 대해 정확히 어떤 상황에서 바꾸려고 하는지 자세한 사항을 알 수 없어서, 숙제 스펙에 맞추라는 일반적인 답변밖에 드릴 수 없었습니다.
구현이 지저분해도 문제에서 요구하는 사항을 만족한다면 상관이 없습니다.



감사합니다.


TA 이동권
e-mail: dklee@ropas.snu.ac.kr

TA 배요한
e-mail: yhbae@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
김무환



가입: 2018년 9월 12일
올린 글: 9

올리기올려짐: 2018년11월16일 16:44    주제: 질문 인용과 함께 답변

그렇다면, 만약 (10, 0)은 접근하지 않을 예정이고 (10, 10)은 접근할 예정일 경우 두 곳 모두를 GC하지 말고 살려야 합니다. (조교님이 올려주신 테스트 케이스에 이런 것을 테스트하는 부분이 있었습니다)

그런데 만약 스켈레톤 코드를 그대로 두게 되면 reachable_locs에 (10, 0)과 (10, 10)을 모두 넣어야 하는데, (10, 0)은 접근하지 않을 예정이므로 부품들을 모두 순회해도 찾을 수 없습니다.

그렇다면 어떻게 해야 베이스가 같고 오프셋만 다른 경우를 정확히 처리할 수 있나요? 전혀 감이 오지 않아서 질문드립니다 ㅠㅠㅠ
위로
사용자 정보 보기 비밀 메시지 보내기
김무환



가입: 2018년 9월 12일
올린 글: 9

올리기올려짐: 2018년11월16일 16:46    주제: 질문 인용과 함께 답변

let new_m 이하를 적절히 수정하면 base가 같은지만 확인해서 new_m을 만들도록 처리하도록 할 수 있는데, 이렇게 해도 접근 가능한 메모리 주소만 갖고있게 한다는 숙제의 스펙을 만족하게 할 수 있는 것 같습니다. 이런 형태의 수정도 안되는 것인가요?
위로
사용자 정보 보기 비밀 메시지 보내기
배요한
Site Admin


가입: 2018년 3월 6일
올린 글: 107

올리기올려짐: 2018년11월16일 17:51    주제: 인용과 함께 답변

둘다 conservative하게 reachable_loc에 넣으시면 됩니다. 즉, (10,0)은 접근하지 않을 예정이지만, (10,9)는 접근할 예정이라면, 둘 다 넣도록 구현하시면 됩니다.

인용:
base가 같은지만 확인해서 new_m을 만들도록 처리하도록 할 수 있는데...이런 형태의 수정도 안되는 것인가요?

뼈대 코드를 바꾸면 안됩니다. 하지만, base만 같은 주소를 확인하고 모으는 보조 함수를 만들어서 콜하는 쪽으로 구현하면 뼈대 코드를 고칠 필요가 없습니다.


TA 이동권
e-mail: dklee@ropas.snu.ac.kr

TA 배요한
e-mail: yhbae@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
김무환



가입: 2018년 9월 12일
올린 글: 9

올리기올려짐: 2018년11월16일 20:09    주제: 질문 인용과 함께 답변

답변 감사합니다!
조교님, 이 내용에서 질문이 하나 더 있습니다.

만약 (1, 1)은 접근할 예정이고 (1, 2)는 접근하지 않을 예정이라면, 둘 모두 GC하지 않아야 한다고 하셨습니다.

그런데 만약 (1, 2)에 연결된 다른 접근하지 않을 예정인 location (2, 1)이 있다면, (2, 1)도 GC하지 않아야 하나요?
위로
사용자 정보 보기 비밀 메시지 보내기
배요한
Site Admin


가입: 2018년 3월 6일
올린 글: 107

올리기올려짐: 2018년11월17일 0:41    주제: 인용과 함께 답변

음...reachability에 대해 헷갈리시는 거 같아서 설명해 드립니다.

gc에는 두 가지 방법이 있을 수 있습니다.
1)현재 메모리 상태에서 도달할 수 있는 모든 메모리 주소들을 보수적으로 모으는 것입니다
2)이후에 실행될 코드를 분석해서 도달하게 될 더 적은 개수의 메모리 주소를 공격적으로 알아내는 방법입니다.

인용:

그런데 만약 (1, 2)에 연결된 다른 접근하지 않을 예정인 location (2, 1)이 있다면, (2, 1)도 GC하지 않아야 하나요?


1)의 방법에서는 (2,1)에 대해 gc를 안 하는게 됩니다. 왜냐하면, 이후에 (2,1)에 접근할 예정인지 아닐지 고려하지 않기 때문입니다.
반면 2)의 방법에서는 분석이 성공적으로 됐다면 (2,1)에 대해 gc를 할 수 있게 됩니다.

물론 두 방법 모두 안전합니다. 숙제에서 요구되는 사항은 1입니다.

TA 이동권
e-mail: dklee@ropas.snu.ac.kr

TA 배요한
e-mail: yhbae@ropas.snu.ac.kr
위로
사용자 정보 보기 비밀 메시지 보내기
이전 글 표시:   
이 게시판은 잠겼으므로 글을 올리거나, 답변을 하거나 수정을 할 수 없습니다   이 주제는 잠겼으므로 답변을 하거나 수정을 할 수 없습니다     게시판 인덱스 -> 4190.310 Programming Languages (Fall 2018) 시간대: GMT + 9 시간(한국)
페이지 11

 
건너뛰기:  
새로운 주제를 올릴 수 없습니다
답글을 올릴 수 없습니다
주제를 수정할 수 없습니다
올린 글을 삭제할 수 없습니다
투표를 할 수 없습니다


Powered by phpBB 2.0.21-7 (Debian) © 2001, 2005 phpBB Group
Translated by kss & drssay