[Pintos] Virtual Memory 구현하기 Part1: Lazy Load 방식으로 프로그램 실행하기 (Memory Management, Anonymous Page, Stack Growth)
·
크래프톤 정글/Code 정글(C언어)
보호되어 있는 글입니다.
일주일에 하루를 쉬어야 하는 이유
·
크래프톤 정글/마이 정글(WIL, 에세이)
처음 정글에 들어올 때의 나는 어땠나? 뭔가 열정도 넘치고, 배울 의지도 불타고, 더 나은 사람? 더 나은 개발자가 되기 위해서 간절하게 임했고. 그래, 간절했던 것 같다.그런데 이때에도 이미 주말 하루는 쉬어야 한다고 생각하고 있었다. 아무래도 사람은 기계가 아니니까. 아침 10시부터 저녁 11시까지 공식적인 학습 시간인 정글의 하루하루는 결코 녹록지 않다.이 최소한의 휴식이 없다면 당장은 괜찮아도, 점점 학습 능률이 떨어지고 그 유명한 번아웃이 찾아올지도 모른다는 생각이 들었다.그렇게 몇 주동안 주말 하루를 쉬었는데, 어느날 코치님의 더 치열하고 간절해야 한다는 명강연을 듣고 나서는 정말 필요할 때 나가는 주(머리 자르기, 병원 진료) 하루를 제외하고 아예 안 쉬는 주를 보내기도 했다.그러다가 요즈음..
[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. 프로세스 간 보호 및 격리의 부족한 프로세스가 다른 프로세스 메모리를 덮어쓰는 경우 치명..
[WIL] 12-13주차
·
크래프톤 정글/마이 정글(WIL, 에세이)
05.29Pintos Virtual Memory 사전 학습알고리즘 문제풀이 (BOJ 2110, 19637) 05.30[Pintos] Virtual Memory 전체적인 큰 그림 그리기https://just-live.tistory.com/entry/Pintos-Virtual-Memory-%EC%A0%84%EC%B2%B4%EC%A0%81%EC%9D%B8-%ED%81%B0-%EA%B7%B8%EB%A6%BC-%EA%B7%B8%EB%A6%AC%EA%B8%B0 [Pintos] Virtual Memory 전체적인 큰 그림 그리기Virtual Memory 전체적인 큰 그림 그리기저번 Project2에서 유저 프로그램 실행과 시스템 콜에 대해 다뤘다면, 이번 Project3에서는 Virtual Memory와 Page F..
[중간정리] 10-11주차
·
크래프톤 정글/CS기초(키워드, 개념정리)
커널 모드와 사용자 모드운영체제의 핵심 서비스는 커널 모드에서 실행되며, 그 중 하나가 바로 공유 자원 관리이다. 예를 들어 파일 시스템, 메모리 등과 같은 자원은 여러 프로세스에 의해 동시에 요청될 수 있고, 이에 대한 접근과 사용을 적절히 관리하는 것이 필수적이다. 커널 모드에서는 이러한 자원들에 대한 접근을 제어하고, 충돌이나 데이터 손상을 방지하는 역할을 한다. 사용자 모드에서는 이러한 공유 자원 관리를 직접 수행하지 않는데, 여러 사용자 또는 프로세스가 자원에 직접 접근할 경우 데이터의 일관성과 안정성이 위협받을 수 있기 때문이다. 컨텍스트 스위칭컨텍스트 스위칭 과정에서 운영체제는 현재 프로세스의 상태(컨텍스트)를 저장하고, 다음에 실행할 프로세스의 저장된 상태를 복원한다. 이때 저장되는 정보..
[Pintos] Pintos-Kaist Project2 User Programs Solution 및 프로젝트 실습 템플릿
·
크래프톤 정글/Code 정글(C언어)
Pintos-Kaist Project2 User Programs Solution 및 프로젝트 실습 템플릿이번에 Pintos-kaist Project2를 진행하면서 Part1, Part2로 나눈 뒤, 각각의 큰 흐름 속에서 기능 그룹 별로 세세한 구현 과정을 정리해 보았는데요. 이를 통해 User Programs에 대한 Solution이 완성되어 공유해 드리고자 합니다. 제가 개인적으로 느꼈던 아쉬움은 문제가 생겼을 때 블로그를 아무리 뒤져 보아도 파편화된 정보들밖에 없었고, GPT 또한 크게 도움이 되지 않았던 것이었습니다. 그래서 이번에 전체 과정에 대한 해답을 정리하면서 이러한 점이 해소될 수 있었으면 하는 바램입니다. 그리고 이 솔루션을 직접 적용해볼 수 있는 Clean init 프로젝트 실습 템플..