크래프톤 정글 27

Pintos Project3 - VM 시스템 초기화

✨가상 메모리 시스템 초기화 paging_init() 함수는 PintOS의 커널 페이징 시스템을 초기화 하는 역할을 한다. 간단하게 paging_init() 함수에 대해서 알아보자.  paging_init() 물리 메모리 영역 전체 (0 ~ mem_end)를 커널의 가상 메모리 주소 공간(KERN_BASE ~KERN_BASE + mem_end)에 1대1 매핑커널 텍스트 영역 (start ~ _end_kernel_text) 까지를 읽기 전용으로 설정하여 보호static void paging_init(uint64_t mem_end) { uint64_t *pml4, *pte; int perm; pml4 = base_pml4 = palloc_get_page(PAL_ASSERT | PAL_ZERO..

크래프톤 정글 2024.12.05

Pintos Project3 - Virture Memory Test case 트러블 슈팅 (read-boundary)

Anonymous Page까지 구현을 하고,make check를 돌려보았지만, read-boundary의 테스트 케이스가 통과하지를 못했다. 디버깅을 돌려보니 check_address 함수 내에 pml4_get_page 부분이 자꾸 터지는 것을 보았다. 이 부분에 대해 나와 비슷한 문제를 겪는 사람들이 있어서 이 부분에 대해서 포스팅을 해본다 ! 먼저 테스트 파일들을 확인해보자. Test Case : read-boundary.c 파일buffer = get_boundary_area () - sizeof sample / 2;byte_cnt = read (handle, buffer, sizeof sample - 1);get_boundary_area 함수는 페이지의 경계 값을 가져옴sample.txt 파일 전체..

크래프톤 정글 2024.12.05

Pintos Project3 - Virture Memory 키워드

✨ Virtual Memory (가상 메모리)가상 메모리에 대해 너무 이해가 잘 안됐을 때 들었던 예시 중 가장 인상 깊은 비유가 있다.물리 메모리는 현실 세계를, 가상 메모리는 환상 세계를 의미한다고 보면 된다.현실 세계에서는 강도,살인 등 지저분 한 것들이 많듯이 물리 메모리도 프레임 단위로 데이터들이 흩어저있다.반면 가상 메모리는 프로세스에게 환상을 준다. 지금 "프로세스" 너는 CPU와 메모리를 독점하고 있고 세그먼트 별로 데이터들도 잘 정렬되어 있다는 착각을 주는 것이다. 프로세스에 독립적이고 보호된 주소 공간 제공 효율적인 메모리 사용과 물리 메모리 확장메모리 보호 / 효율성 (디스크 스왑) / 유연성 (프로세스는 실제 물리메모리 주소 알 필요 없음)페이지 단위(4KB)로 나뉨✨ PT (Pag..

크래프톤 정글 2024.12.02

Pintos Project3 - Page Fault Handler (Page Fault 전반적인 과정 이해하기)

🖥️ Pintos Page Fault Handler 이 글에서는 Pintos에서의 인터럽트 초기화, 핸들러 등록, 스텁 함수 정의,그리고 페이지 폴트 처리 과정을 하나씩 살펴본다.Page Fault가 발생되는 과정들을 Pintos 코드로 세부적으로 파고 들고 이해 해본다.✨ Interrupt system 초기화 int main(void) { . . . /* 인터럽트 핸들러를 초기화합니다. */ intr_init(); . . . exception_init(); . . . }intr_init() 함수 실행  /* Initializes the interrupt system. */void intr_init(void) { int i; /* Initialize in..

크래프톤 정글 2024.12.02

Pintos Project3 - VA와 디스크 데이터 매핑 과정 이해하기

프로그램이 실행될 때, ELF 파일은 어떻게 메모리에 로드될까? 특히 Lazy Loading 방식에서는 데이터가 즉시 메모리에 적재되지 않고,실제로 필요할 때 디스크에서 로드된다.이 과정에서 페이지 폴트(Page Fault) 발생하면운영체제는 어떻게 VA(가상 주소)를 기반으로 디스크에서 데이터를 찾아 메모리에 매핑할까? 이번 포스팅에서는 ELF 파일의 구조와 Lazy Loading,그리고 페이지 폴트 처리 과정을 살펴보며 VA와 디스크 데이터 매핑의 원리를 알아보자.  🚨 그 전에 먼저 ! ELF 파일에 대한 개념이 없으면 이해하기 힘들다. 혹시 ELF 개념이 헷갈리면 아래 포스팅 참고하자 !!특히 프로그램 헤더 테이블 같은 경우 엄청 중요하니 꼭 알아두자  Pintos Project2 - ELF 파..

크래프톤 정글 2024.12.01

Pintos Project2 - User Program 흐름 잡기

✨ Project2: User Programs사용자 프로그램 시스템 일부 개발기본 코드에 사용자 프로그램 로드 및 실행은 가능하지만 I/O나 사용자 상호작용은 불가능이 프로젝트의 목표는 시스템콜을 통해 프로그램이 운영체제와 상호작용 하는 것read/write/fork 같은 system call 구현하면 됨 !!   Introduction · GitBookProject2: User Programs Now that you've worked with Pintos and are becoming familiar with its infrastructure and thread package, it's time to start working on the parts of the system that allow runni..

크래프톤 정글 2024.12.01

Pintos Project2 - User Program (커널/사용자 모드 이해하기)

주의 !!!  User Program 해결에는 큰 도움이 안됨 !!단지 아래와 같은 궁금증을 가지고 있으면 읽어 볼 만 하다.  ✨선행 Key word세그먼트 선택자 CPU에게 이 코드나 데이터가 어디에 있는지 알려주는 역할CPU에게 어떤 권한으로 접근해야 하는지를 알려주는 역할세그먼트 선택자로 GDT (Global Descriptor Table)에서 정보를 찾는 key GDT (Global Descriptor Table) 세그먼트의 속성과 접근 권한을 정의하는 테이블 필드값Base (세그먼트 시작 주소)Limit (세그먼트 끝 주소)DPL (권한 레벨)Descriptor Privilege Level  CPL (Current Privilege Level)CPL이 0인 경우 : 커널  모드CPL이 3인 경..

크래프톤 정글 2024.11.26

Pintos Project2 - User Programs 키워드

✨ User mode vs Kernel modeUser mode애플리케이션이나 사용자 프로세스가 실행되는 공간프로세스가 제한된 엑세스 권한 가짐프로세스 분리로 다른 프로세스에 영향을 주지 않음 Kernel mode프로세스가 하드웨어,메모리 등에 제한 없이 엑세스 커널 모드에서 충돌이 발생하면 전체 시스템 다운 커널 모드는 모든 프로세스가 공유하는 단일 공간 OS에 시스템콜을 통해 커널 모드 기능 사용ex) open/write/read/close/malloc/free 등시스템 자원 엑세스를 허용하는 특권시스템콜을 한다고 하더라도 모든 커널 영역에 접근할 수 있는것은 아님 사용자 모드와 커널 모드 간의 전환 (context switch)서로 다른 권한 수준 간의 전환으로 CPU의 모드와 컨텍스트를 전환많은 ..

크래프톤 정글 2024.11.21

Pintos Project2 - ELF 파일

Pintos Project 2에 process.c 파일에 load하는 과정이 있다. 이 과정에서 ELF 개념이 나온다.Deep dive를 안하려고 했지만, 찾다보니 여기까지 와버렸다...ELF가 무엇인지를 알아보자 ! 🔗 ELF 형식의 파일 실행 파일프로그램 실행 가능한 바이너리 파일 공유 라이브러리 파일오브젝트 파일 🔗 ELF 형식이 아닌 파일텍스트 파일이미지 및  데이터 파일 file /bin/ls위와 같은 Linux 명령에서 파일 형식 확인 가능✨ELF 파일 특징하나의 파일 안에 여러 섹션(섹션 테이블)으로 구성 실행에 필요한 모든 데이터를 하나의 파일 안에 포함 모듈화된 설계 실행 파일, 오브젝트 파일, 공유 라이브러리 등을 하나의 표준 형식으로 처리프로그램 실행과 동적 링킹 수행  (ex :..

크래프톤 정글 2024.11.21

Pintos Project1 - 스레드 전반적인 흐름 잡기

✨ 스레드프로그램에서 실행 흐름을 만들어 주는 실행 단위각 스레드는 자신의 스택과 CPU 레지스터 상태를 관리실행할 작업을 기억하고 스스로 수행할 수 있는 독립적인 흐름스레드는 단순히 데이터를 담는 자료구조가 아니라 프로세서에서 실행되는 상태를 담고 있음 ✨ 프로그램 스레드 실행   thread_init → thread_start → thread_create 의 순서대로 진행 1. thread_init ()void thread_init (void)맨 처음 프로그램 실행 시 실행스레드 시스템 초기화하는 역할 전역 변수 및 리스트 초기화매인 스레드 초기화 2. thread_start ()void thread_start (void)스레드 시스템 실제로 시작스케줄링이 가능한 상태로 전환유휴 스레드(idle th..

크래프톤 정글 2024.11.11