[Pintos] tests 디렉터리의 모든 txt파일 CRLF 없애기
·
크래프톤 정글/Code 정글(C언어)
tests 디렉터리의 모든 txt파일 CRLF 없애기Project3까지 와서도 CRLF는 테스트에 있어 큰 걸림돌인데요. Project2에서는 sample.txt만 변환하면 됐지만, 이번 프로젝트부터는 여러 txt 파일이 테스트에 사용됩니다. 때문에 일일이 CRLF를 변환해줘야 하는 귀찮음이 있는데, 이를 명령어 한 번으로 해결하는 방법을 알아봅니다. 구체적인 해결 방법1. tests 디렉터리의 상위 디렉터리로 이동ls 명령어를 입력했을 때, tests 디렉터리가 나타나는 디렉터리로 이동합니다. 2. Dos2Unix 설치Dos2Unix가 이미 설치되어 있다면 이 단계를 넘어가도 좋습니다. 만약 설치되지 않았다면 아래의 명령어를 입력해 Dos2Unix를 설치해줍니다.sudo apt update && su..
[Pintos] Virtual Memory 구현하기 Part2: 파일과 페이지 공유 및 교체하기 (Memory Mapped Files, Swap In/Out, Copy On Write)
·
크래프톤 정글/Code 정글(C언어)
Virtual Memory 구현하기 Part2: 파일과 페이지 공유 및 교체하기 (Memory Mapped Files, Swap In/Out, Copy On Write)이번 글에서는 Virtual Memory의 나머지 부분들인 Memory Mapped Files, Swap In/Out, Copy On Write를 마저 구현해 봅니다. ※ 주의: 제 컴퓨터 기준에서는, All Pass가 뜨는 것을 확인했으나, 다른 조원들의 컴퓨터에서 page-merge.* 테스트가 간헐적으로 실패하는 것을 확인했습니다. 따라서 그대로 적용하기보다는, 참고만 하시는 것을 추천드립니다. 사전준비: 전역 Lock 외부 공유 및 활용하기merge 관련 테스트 통과를 위해서는 process.c에 있는 load 함수의 filesy..
[Pintos] Virtual Memory 구현하기 Part1: Lazy Load 방식으로 프로그램 실행하기 (Memory Management, Anonymous Page, Stack Growth)
·
크래프톤 정글/Code 정글(C언어)
Virtual Memory 구현하기 Part1: Lazy Load 방식으로 프로그램 실행하기 (Memory Management, Anonymous Page, Stack Growth) Pintos Project3 Virtual Memory의 경우, Project1, 2에 비해 난이도가 상당히 높아졌는데요. 그럼에도 불구하고 선배 기수 분들이 정리를 잘 해주셔서 난관에 부딪혔을 때 참고해서 헤쳐나갈 수 있었습니다. 다만 블로그에 잘못된 코드가 올라가 있는 경우가 있어 적절히 수정하면서 적용해 나가야 했던 점이 아쉬웠는데, 이런 점을 없애보자는 취지로 구현 과정만 다이렉트로 정리해 보려고 합니다. ※ 주의: 제 컴퓨터 기준에서는, All Pass가 뜨는 것을 확인했으나, 다른 조원들의 컴퓨터에서 page-me..
[Pintos] OSTEP 기반 Virtual Memory 배경지식 정리: 왜 VM이 필요한가
·
크래프톤 정글/Code 정글(C언어)
OSTEP 기반 Virtual Memory 배경지식 정리: 왜 VM이 필요한가무언가에 대한 코드를 구현하기에 앞서 우리가 항상 생각해야 하는 부분은 바로 도대체 문제가 무엇인지, 그래서 이걸 해결하기 위한 방법으로 우리가 무언가를 구현하게 되었음을 아는 것인데요. 이는 VM에서도 다르지 않습니다. 이를 위해 이번 글에서 OSTEP을 참고하여 VM의 기반이 되는 배경지식들을 정리하고 하나의 흐름으로 엮어 봅니다. 주소 공간과 멀티프로그래밍의 등장멀티프로그래밍 및 시분할(Time-Sharing) 시대가 도래하면서 사용자들은 여러 프로그램을 동시에 실행할 수 있게 되었는데요. 이는 여러 프로그램을 메모리에 올려놓고, 하나가 대기 중일 때 다른 프로그램을 실행하는 방식을 통해 CPU 사용률을 극대화함으로써 구..
[Pintos] Virtual Memory Layout 정리
·
크래프톤 정글/Code 정글(C언어)
Virtual Memory Layout 정리Virtual Memory 구현을 시작하기 전에, Virtual Memory가 어떻게 구성되어 있는지를 팀 전체가 명확히 이해할 필요성을 느꼈는데요. 이에 따라 함께 모여서 가상 메모리 레이아웃을 보드에 정리하는 시간을 가졌습니다. 그 과정에서 전통적으로 코드 세그먼트(code segment)의 시작 주소는 0x400000이라는 것을 확인할 수 있었습니다. 하지만 실제로 Pintos가 프로그램을 실행할 때 사용하는 코드 세그먼트의 시작 주소는 0x08048000이라는 점도 함께 알게 되었지요. 또한, 가상 주소 공간에서 페이지는 세그먼트별로 연속적인 주소를 가지며 증가하지만, 실제로 이를 저장하는 물리 주소 공간에서 프레임의 주소는 할당되는 순서대로 결정되기 때..
[Pintos] Virtual Memory 전체적인 큰 그림 그리기
·
크래프톤 정글/Code 정글(C언어)
Virtual Memory 전체적인 큰 그림 그리기저번 Project2에서 유저 프로그램 실행과 시스템 콜에 대해 다뤘다면, 이번 Project3에서는 Virtual Memory와 Page Fault 처리를 구현하게 되는데요. 그에 앞서 Virtual Memory가 도대체 왜 필요한지, 무슨 일을 하는지, 그리고 Page Fault는 어떻게 처리되는지에 대한 전체적인 큰 그림을 그려 봅니다. 기존 Pintos의 문제점 및 VM의 필요성1. 물리 메모리 용량의 한계실행 중 프로세스, 스레드 수가 많아지면 메모리가 부족해지고, 이는 실행 거부(OOM) 및 성능 급락으로 이어짐물리 메모리보다 큰 프로그램은 실행 불가2. 프로세스 간 보호 및 격리의 부족한 프로세스가 다른 프로세스 메모리를 덮어쓰는 경우 치명..
[Pintos] Pintos-Kaist Project2 User Programs Solution 및 Docker 기반 프로젝트 실습 템플릿
·
크래프톤 정글/Code 정글(C언어)
Pintos-Kaist Project2 User Programs Solution 및 Docker 기반 프로젝트 실습 템플릿이번에 Pintos-kaist Project2를 진행하면서 Part1, Part2로 나눈 뒤, 각각의 큰 흐름 속에서 기능 그룹 별로 세세한 구현 과정을 정리해 보았는데요. 이를 통해 User Programs에 대한 Solution이 완성되어 공유해 드리고자 합니다. 제가 개인적으로 느꼈던 아쉬움은 문제가 생겼을 때 블로그를 아무리 뒤져 보아도 파편화된 정보들밖에 없었고, GPT 또한 크게 도움이 되지 않았던 것이었습니다. 그래서 이번에 전체 과정에 대한 해답을 정리하면서 이러한 점이 해소될 수 있었으면 하는 바램입니다. 그리고 이 솔루션을 직접 적용해볼 수 있는 Docker 기반 C..
[Pintos] User Programs 테스트 및 디버깅 정보 공유
·
크래프톤 정글/Code 정글(C언어)
User Programs 테스트 및 디버깅 정보 공유이번 User Programs 프로젝트를 진행하면서 가장 힘들었던 건 모든 테스트를 통과하기 위한 끝이 없는 디버깅이었습니다. 분명 완벽하게 짜여졌다고 생각한 코드들이 알고 보니 심각한 버그를 초래하고 있었던가 하면, 그러한 심각한 코드를 고치는 과정에서 멀쩡한 코드를 건드리거나 또 다른 버그를 만들어내는 실수를 하기도 했지요. 뿐만 아니라 각 기능별 단일 테스트는 통과했지만, 모든 기능 구현이 완료된 뒤 수행하게 되는 두 기능 이상이 포함된 종합 테스트는 저희 팀에게 또 다른 챌린지로 다가왔습니다. 여러 기능이 복합적으로 작동하는 상황에서 생기는 미묘한 충돌과 예외 상황은 단일 테스트에선 결코 드러나지 않던 것들이었기 때문입니다. 이번 글에서는 이렇게..