일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 크래프톤정글4기
- 핀토스
- 파이썬
- 크래프톤정글
- 연결리스트
- 네트워크
- pintos
- 유니티
- KRAFTON JUNGLE
- 추상클래스와인터페이스
- Unity
- 4기
- 전쟁-전투
- User Stack
- c#
- 이벤트 함수 실행 순서
- 크래프톤 정글
- BFS
- 다익스트라
- 오블완
- project3
- 크래프톤 정글 4기
- C
- anonymous page
- kraftonjungle
- 알고리즘
- 백준
- TiL
- 알고리즘수업-너비우선탐색2
- 티스토리챌린지
- Today
- Total
목록전체 글 (173)
말감로그

📆2024. 04.02 Memory Mapped Files는 파일을 기반으로 매핑하는 페이지를 구현하는 것이다. 파일과 메모리 매핑은 System Call인 mmap()을 통해 이루어진다. Pintos에서는 vm/file.c의 do_mmap()을 이용해서 매핑을 수행하는데, 그 이전에 mmap()에 전달된 인자들에 대한 검증이 먼저 이루어져야 한다. 시스템 콜 mmap() 1. offset의 값이 PGSIZE에 알맞게 align되어 있지 않은 경우 2. addr이 NULL이거나, addr이 page-aligned되지 않았거나 kernel 영역인 경우 3. 매핑하려는 페이지가 이미 존재하는 페이지와 겹칠 때 (=spt에 존재하는 페이지일 때) 4. 찾는 파일이 디스크에 없는 경우 5. fd로 열린 파일의 ..

7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토의 인접한 곳은 왼쪽, 오른쪽, 앞, 뒤 네 방향에 있는 토마..

📆2024.4.1 1. Stack Growth 완성 2. 백준 - 숨바꼭질 Stack Growth 조건 1. addr이 rsp보다 높은 주소를 가리켜야 한다. 2. rsp - 8에 접근한 경우에도 stack growth로 해결한다. 3. USER_STACK 아래에 있어야 하고, USER_STACK - (1MB) 위에 있어야 한다. -> USER_STACK 영역 내에 있어야 한다. bool vm_try_handle_fault(struct intr_frame *f UNUSED, void *addr UNUSED, bool user UNUSED, bool write UNUSED, bool not_present UNUSED) { struct supplemental_page_table *spt UNUSED = &t..
11659번: 구간 합 구하기 4 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j www.acmicpc.net 문제 수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오. 입력 첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j가 주어진다. 출력 총 M개의 줄에 입력으로 주어진 i번째 수부터 j번째 수까지 합을 출력한다. 제한 1 ≤ N ≤ 100,000 1 ≤ M..

load_segment 흐름 load_segment (메모리만 로드) - > setupstack( 페이지 요구하고 매핑) -> page_fault (커널 제어권 획득) -> vm_try_handler (페이지 물리 프레임 매핑 ) -> lazy load segmet ( 프레임에 세그먼트 할당 ) 🤔궁금했던 점 왜 load_segment 부분에서 페이지를 load할 때 uninit 페이지 생성하지 않고 anonymous 페이지로 생성하는가? load_segment를 보면, vm_alloc_page_with_initializer를 호출할 때, 타입 인자를 VM_ANON으로 넘겨서, 모든 uninit 페이지가 page fault 이후 Anonymous로 생성되게 만들어놓은 것을 볼 수 있다. 왜 filed_b..

Implement Supplemental Page Table 가장 먼저 구현해야 할 것은 Supplemental Page Table이다. 기존에 핀토스에서는 pml4라는 페이지 테이블을 제공하고 있지만 가상 메모리를 구현하기에는 그 역할이 부족하다. pml4의 경우 주어진 va에 대해 실제 kva(물리메모리)로의 단순한 변환만을 해주고 있다. 즉, 우리가 사용할 페이지라는 구조체의 정보에 대한 어떠한 정보도 가지고 있지 않다. 그래서 SPT는 각각의 페이지에 대한 정보를 추가적으로 보충해주는 역할을 수행한다. SPT의 목적 1) 페이지 폴트가 발생했을 경우 해당 페이지 폴트가 발생한 페이지를 찾을 수 있고, 우리가 찾은 페이지가 가지고 있는 여러 가지 데이터들에 접근하기 위해서다. 2) 커널이 프로세스(..
7568번: 덩치 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩 www.acmicpc.net 문제 우리는 사람의 덩치를 키와 몸무게, 이 두 개의 값으로 표현하여 그 등수를 매겨보려고 한다. 어떤 사람의 몸무게가 x kg이고 키가 y cm라면 이 사람의 덩치는 (x, y)로 표시된다. 두 사람 A 와 B의 덩치가 각각 (x, y), (p, q)라고 할 때 x > p 그리고 y > q 이라면 우리는 A의 덩치가 B의 덩치보다 "더 크다"고 말한다. 예를 들어 어떤 A, B 두 사람의 덩치가 각각 (56, 177), (45, 165) 라고 한다..
📆2024.03.28 1. Anonymous Page 구현 중 2. 백준 3. 티타임 spt_find_page 수정 Management Memory 구현했던 부분 찬찬히 깃북이랑 다시 읽어보다가 어제 구현한 spt_find_page 부분을 잘못 구현한 점을 찾아서 수정하였다. (사실 아직 맞는지 확인할 방법이 없음) 기존에는 struct page *page = NULL; 그대로 설정해뒀는데 이 상태로 하면 페이지 구조체가 할당되지 않은 상태에서 해당 페이지의 va의 인자로 받은 va를 넘길 수 없기 때문이다. 그래서 malloc()을 통해 새로운 페이지 구조체를 할당해서 포인터를 사용할 수 있도록 수정해주었고, free(page) 또한 추가해주었다. 해당 페이지를 찾았을 때에도 페이지를 반환하기 전에 메..
📆2024.03.27 1. PintOS Project3 VM (Memory Management) Implement Supplemental Page Table : 각 페이지에 대한 추가적인 정보를 담고 있을 보충 페이지 테이블을 구현해야 한다. /* 새 보조 페이지 테이블을 초기화합니다. */ void supplemental_page_table_init (struct supplemental_page_table *spt UNUSED) { hash_init(&spt->hash_table, page_hash, page_less, NULL); } struct page * spt_find_page (struct supplemental_page_table *spt UNUSED, void *va UNUSED) { st..