[sw 정글] pintos 3주차 - part 6: Copy on write(cow) ALL PASS
·
지난 글 모음
목표 이전의 pintos는 fork할 때 부모가 메모리가 할당된 page에 대해서 자식에게 복사할 때 같은 내용의 물리메모리를 자식에게도 할당 해주었다. 이처럼 같은 메모리가 두번 복사되는 것은 메모리 낭비이다. 그렇기 fork시에 자식과 부모가 같은 물리 메모리를 가리키게 하고 해당 페이지에 write 요청이 발생하면 새로운 물리메모리를 할당하여 주도록 수정한다. 💡 fork 시 물리메모리를 모두 복사하지 않고 부모와 같은 물리메모리를 공유하다가 write작업 시 해당 페이지의 물리메모리를 새로 맵핑한다. COPY시 코드 수정 fork시에 page와 frame은 복사본은 자식에게 주지만 frame에 있는 kva에는 부모와 자식이 같은 곳을 가리고 있다. bool supplemental_page_tabl..
[sw 정글] pintos 3주차 - part 2: Anonymous page & Lazy Loading
·
지난 글 모음
Anonymous page 파일으로부터 매핑되지 않은, 커널로부터 할당된 페이지를 뜻한다. 익명 페이지는 힙을 거치지 않고 할당받은 메모리 공간 스택, 힙과 같은 실행 파일에서 사용됨 Lazy Loading(Demanding Paging) lazy loading은 메모리 로딩이 필요한 시점까지 지연되는 디자인 가상 page만 할당해두고 필요한 page를 요청하면 page fault가 발생하고 해당 page를 type에 맞게 초기화하고 frame과 연결하고 userprogram으로 제어권을 넘긴다. 지연로딩 순서 커널이 새 page를 요청하면 vm_alloc_page_with_initializer 호출 initializer는 페이지 구조를 할당하고 페이지 type에 따라 적절한 initalizer를 할당하..
[sw 정글] pintos 3주차 - part 1: Memory Management
·
지난 글 모음
1, 2 주차 pintos는 노션에만 대충 정리하여 블로그에 올릴 내용이 아닌듯하여 3주 차부터 올리려고 한다. 많은 정글 동료, 선배들이 좋은 내용을 많이 블로그에 작성해두었으니 부족한 내용은 좀 더 찾아보면 도움이 될 것이다. 기존 pintos 메모리 문제점 PML4를 가진 기존의 핀토스는 가상 메모리와 물리 메모리가 바로 맵핑되어 있다. 기존 핀토스 메모리 탑재 과정 각 세그멘트(stack, Data, BSS, Code)가 물리페이지에 탑재 heap 제외(pintos에는 heap이 없음) 이 페이지 테이블에 맵핑된 물리주소는 다른 프로세스와 같은 곳을 가리킬 수 있고 이럴 때 page fault가 된다. 그리고 한번 맵핑되면 물리메모리에서 항상 공간을 차지하기에 효율적인 메모리 관리가 되지 않는다...
[Malloc-Lab] 기본개념과 Implicit 구현하기
·
지난 글 모음
6주 차의 과제 malloc-lab 구현을 하기 위해 필요한 개념과 implicit 가용 리스트 구현 코드에 대해서 정리하는 글이다. 모든 글의 자세한 내용은 컴퓨터 시스템 책에 나와있으니 자세한 내용이 궁금하다면 책을 참고하기 바란다. 1. 동적 메모리 할당이 필요한 이유 & 알아야 하는 이유 이번 과제를 간단히 생각해서 동적 메모리 할당기를 만든다고 생각하면 된다. 이걸 만들기 앞서 왜 만들어야하는지 이유를 알아보자 만약 동적 메모리 할당 없이 정적으로만 메모리 할당이 가능하다면 어떤 일이 일어날까?? 일단 항상 필요한 메모리를 알아야 할 것이다. 100개의 숫자를 저장하는 배열이 필요하면 100개짜리 배열을 만들면 된다. 이때 100개가 아닌 1000개로 늘어나면 다시 배열을 1000개로 늘려야 할..
[week06] sw정글 사관학교 6주차 회고
·
지난 글 모음
6주 차 주제 malloc-lab malloc-lab 6주 차의 주제는 malloc-lab이다. c언어를 조금 공부해본 사람은 malloc이라는 함수를 알 것이다. c언어에서 동적으로 메모리를 할당하기 위해서 필요하고 사용하지 않는 메모리는 free()라는 함수를 사용하여 할당된 메모리를 반환하여 준다. 이 동적메모리 할당에 꼭 필요한 이 함수를 직접 구현하는 것이 이번 주의 목표이다. malloc 함수가 실행되면 어떻게 메모리를 할당하고 그 할당하기 위한 과정이 무엇이며 heap에 어떤 방식으로 저장하고 free를 하면 어떠한 것을 해주는지를 알아가고 있다. 그저 있는 함수를 사용할 때는 쓰기만 하면 되었는데 이것을 c언어로 구현하려니 쉽지가 않았다. 책을 보고 동작원리를 안다고 해서 코드로 작성할 수..
[sw 정글] 5/02 TIL c언어 및 Linked-list, 이진검색트리
·
지난 글 모음
C언어 공부내용 union 구조체와 비슷하며 메모리를 공유한다. 메모리를 공유하기 때문에 유니온은 멤버변수를 한번에 하나씩만 사용가능하다. union student{ int age; double grade; } student의 age를 사용하고 있다면 grade를 사용할 수 없다. lvalue, rvalue 대입연산자 위치를 말한다. a = 10 a는 lvalue가 되고 10이 rvalue가 된다. 배열은 modifiable lvalue가 아니므로 대입연산자의 왼쪽에 올 수 없다. 포인터 const int* pa = &a; *pa = 3; //올바르지 않은 문장 pa = &b // 올바른 문장 int* const pa = &a; *pa = 3 //올바른 문장 pa = &b; // 올바르지 않은 문장 co..
[week05] sw정글 사관학교 5주차 회고
·
지난 글 모음
week5 5주 차 회고 탐험 준비(3주) - c언어 1주 차 - RB트리 malloc-lab 웹서버 만들기 C언어의 시작 어려웠던 4주 차 DP, 그리디를 끝으로 알고리즘 주차가 종료되었다. 이제부터 본격적으로 C언어를 사용하는 주차가 되었다. 알고리즘에서 사용한 파이썬이 얼마나 편한 언어인지 몸소 느낄 수 있는 주차였다. 포인터, 동적 메모리 할당 등 파이썬에서는 신경 쓰지 않아도 되는 것을 하나하나 신경 쓰면서 작성해야 했고 그러한 부분에서 많은 에러가 발생했다. 전공 때 배웠던 c언어를 다시 상기시키고 c언어를 손에 익힐 겸 링크드 리스트와 이진 검색 트리를 구현하고 RB트리 구현으로 넘어갔다. 해당 내용은 정리해서 코드와 함께 올릴 예정이다. RB트리 구현을 앞두고 있다면 한번 연습하고 들어가는..
[week03 & week04] 3,4 주차 sw정글 회고
·
지난 글 모음
알고리즘 week03 그래프(vertex, edge, node, arc) BFS DFS 위상 정렬 알고리즘 week04 동적 프로그래밍 (DP) 그리디 프로그래밍 3주 차를 지나 4주 차 3 주자는 그래프와 BFS, DFS, 위상 정렬이었다. 위상 정렬은 3주 차를 통해 개념을 새로 배우게 되었고 BFS, DFS, 그래프는 정글을 입소하기 전에 공부를 하여 알고 있던 개념이였다. 알고있던 개념도 있었고 BFS, DFS는 문제의 유형만 파악한다면 어떻게 문제에 대해서 접근해야할지 느낌이 와서 풀어볼만 했다. 정글에서 과제로 준 문제도 모두 풀어보았고 팀원과의 모의시험을 진행하여 3주차 시험은 3문제를 모두 맞을 수 있었다. 3주 차에서 문제도 모두 풀었고 시험도 다 맞아서 4주 차가 시작되고 자심감이 많이..