SW Jungle/TIL
-
PintOS Project 3 VM swap in/outSW Jungle/TIL 2024. 5. 28. 02:42
핀토스 프로젝트 3 의 마지막 구현 과제인 (cow 제외) swap in/out 구현에 대한 이야기를 작성 해보려고 한다.기초적인 swap in out 에 대한 이야기와 내가 구현한 방법과 어이없는 실수로 인한 디버깅을 이야기 해보겠다. Swap in / out 이 뭔데요???운영체제의 메모리 관리 기법중 하나이다. 당장 사용할 (페이지폴트나서 요청받은) 새로운 물리 메모리가 필요한데 이미 (사용자 영역의) 물리 메모리가 꽉차서 더이상 새로운 물리 메모리 프레임도 할당 받지 못 할 때 안쓰는 다른 프레임을 하드 디스크의 스왑 영역에 보내버리고 그 공간을 지금 쓰고싶은 페이지에게 주는 것이다. Swap in / out Flow메모리가 꽉 차서 frame 할당 받는 것에 실패한다.현재 물리 메모리에 올라가있..
-
PintOS's Memory StructorSW Jungle/TIL 2024. 5. 21. 19:58
이번글에서는 핀토스 VM 프로젝트를 진행하며 공부하게된 페이징 기법과 핀토스의 메모리 구조에 대해 글을 써보려고한다. 더보기목차프레임 과 페이지페이징핀토스에서의 주소 변환핀토스의 메모리 구조프레임과 페이지프레임(frame): 물리 메모리를 일정한 크기로 나눈 블록이다. 페이지(page): 가상 메모리를 일정한 크기로 나눈 블록이다. 프레임과 페이지의 크기는 동일한 크기를 가지며 이 일정한 크기는 페이지 크기이다.일정한 크기 == 페이지 크기(사이즈) == 2^12 == 4096 주소 하나당 1byte의 크기를 저장 할 수 있다. 따라서, 4096개의 주소 * 1byte = 4kB 이므로, 페이지 하나는 4kB의 크기를 가진다. 페이지나 프레임이나 4096개의 연속된 행이 있는 리스트 라고 보았을 때 4..
-
pintos forkSW Jungle/TIL 2024. 5. 14. 06:17
sw사관학교 정글 과정중 pintos project 2 진행중에 구현한 fork 의 과정을 추척하는 글을 작성 해보려고 한다. 목차pintos에서의 forkfork 과정 추적1. userprogram 에서 fork 함수 호출 2. lib/user/syscall.c 에서의 처리 3. syscall-entry.S 4. userprog/syscall.c 의 syscall_handler 함수 5. userprog/process.c 의 process_fork() 6. threads/thread.c thread_create() 함수 7. do_fork 8. 다시 process_fork결론 pintos에서의 fork Pintos에서 'fork' 구현 목표는 부모 프로세스의 주소 공간을 정확하게 복사하여 자식 프로세스..
-
malloc lab binary 케이스 메모리 이용률 개선하기SW Jungle/TIL 2024. 4. 18. 17:16
#MallocLab 96점 받는법segregated free list를 적용하고, realloc을 개선한 버전을 돌려보았다../mdrver -V 를 돌려보자위와 같은 결과를 받았다 다 좋은데 7, 8번 케이스만 메모리 활용도가 반토막 나있다!해당 케이스는 traces 폴더의 binary.rep 과 binary2.rep 이다. 직접 파일을 까보자.까보면102410012000240001a 0 16a 1 112a 2 16a 3 112a 4 16a 5 112a 6 16a 7 112a 8 16a 9 112a 10 16a 11 112a 12 16a 13 112a 14 16a 15 112a 16 16a 17 112a 18 16a 19 112a 20 16a 21..
-
변수에 대한 이해SW Jungle/TIL 2024. 4. 12. 10:48
변수메모리 연결자 변수는 메모리 칸에 연결해주는 연결자라고 생각할 수 있다. 프로그래밍 언어에서 변수를 선언할 때, 실제로 하는 일은 메모리 '칸'을 예약하는 것이다.이 칸은 변수의 데이터 타입에 의해 결정되고, 시스템에게 얼마만큼의 메모리 칸을 할당해야하는지 알려준다.exint a; : 4 바이트 즉, 4칸 만큼의 메모리 칸을 쓸거고 그 주소를 a가 알고 있고 a가 찾아갈것이다.이는 사실int *a = get_memory(size of int) // 사용할 데이터 타입만큼의 주소를 할당해주고 주소를 저장한다.*a; // 해당 주소를 찾아가 해당 칸에 값을 저장한다.를 줄여 놓은 것이다.사실 변수는 진짜 값이 저장되는 곳(메모리)의 시작 위치와 그..
-
week01SW Jungle/TIL 2024. 3. 24. 15:36
알고리즘 주차 시작 기초적인 입 출력, 반복문 문제를 풀고 크게 재귀, 정렬, 완전탐색, 분할 정복, 이분 탐색의 문제들을 풀었다. 배운 지식을 이야기 하기 전에 한주동안 배운 방법론은 해야할 과제가 많고 시간이 부족하다면, 해결하는데 사용되는 기반 지식 혹은 이미 해결한 사례를 빨리 익히고 넘어가고 나중에 활용하는 것이다. 예를 들어 하 문제들은 공부를 하고 푸는데도 오래걸린다면 그냥 답을 보고 내것이 될때 까지 빨리 익히고 난이도가 높은 문제에서 어떻게 활용할지 고민하는데 시간을 쓰자 컴퓨터 사고로의 전환 우리의 과제는 알고리즘 문제를 쭉 푸는 것이지만 이번 주차의 이름은 '컴퓨터 사고로의 전환' 이다. 왜 이런 이름이 붙었는지는 문제를 풀면서 깨닫게 되었다. 어떤 문제를 풀때 우리 사람은 간단하게 ..
-
Week00. 개발일지SW Jungle/TIL 2024. 3. 17. 17:31
jinja2, https, session, token, jwt, .env, db 주소 숨겨서 깃허브에 올리기, 폴링, 서버부하테스트 오자마자 3박 4일 프로젝트를 진행함 정글러들의 위치를 팀원들에게 적극적으로 도움을 요청하지 않은 것이 후회됨. 중요한 정보를 숨겨서 깃허브에 올리기 프로젝트에 사용하는 코드에 db 비밀번호가 담긴 몽고db 주소가 담겨있어 이를 그대로 깃에 올리면 안됨. 중요한 정보들을 따로 불러와서 코딩하는 방법이 필요했음. .env 포트, DB관련 정보, API_KEY등 개발자 혼자서 또는 팀만 알아야 하는 값이 있다. 이를 위해 dotenv 패키지 이며 환경변수 파일을 외부에 만들어 저장시켜 소스코드 내에 하드코딩하지 않고 사용할수 있다. python에서 .env 사용하기 프로젝트 최..