크래프톤 정글 10

PintOS Project 3 : Virtual Memory 정리

가상 메모리와 물리 메모리, 디스크와 스왑디스크, 페이지와 프레임, 보조 페이지 테이블과 pml4의 개념을 공부하며 프로젝트3 가상 메모리를 구현했다. 아래 그림은 함수의 흐름을 적어놓고 함수가 어떤 역할을 하는지 간단하게 설명했다.    1. process exec -> load -> page fault -> lazy load   2. process fork   3. swap out  case   4. swap out & destroy   5. mmap & munmap    아래는 pintos 과제를 구현한 깃허브 레포지토리로 참고하셔도 되나 설명이 부족할 수 있습니다.또한 모든 내용을 잘못된 정보가 있을 수 있으므로 확인이 필요합니다.  https://github.com/wookhyunKim/pint..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory (4) - mmap & munmap

이번 포스팅은 user 가 mmap & munmap 시스템 콜을 호출할 때 상황을 보려고 한다.프로젝트 2 시스템 콜과 같이 시스템 콜 핸들러에 mmap 과 munmap을 추가하고 do_mmap, do_munmap으로 운영체제가 유저의 요청을 처리한다. mmap과 munmap은 디스크로 부터 파일 내용을 메모리에 적재할 때 사용하며 파일을 건드리는 부분에서는 lock이 필요하다.    시스템 콜  system call handler{#ifdef VM case SYS_MMAP: f->R.rax = mmap_syscall(f->R.rdi,f->R.rsi,f->R.rdx,f->R.r10,f->R.r8); break; case SYS_MUNMAP: munmap_syscall(f->R.rdi); break..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory(3) - swap in & swap out LRU

이번 포스팅은 효율적으로 메모리 관리를 하기 위해 물리메모리에서 frame을 swap_out 하는 것을 할 것이다. LRU(Least Recently Used)는 페이지 교체 알고리즘중 하나로, 가장 오랫동안 사용되지 않은 페이지를 교체하는 방식입니다. 이 알고리즘은 메모리에서 사용되지 않은 페이지를 교체하여, 효율적인 메모리 관리와캐시 히트율 향상을 목표로 합니다.LRU 알고리즘의 기본 개념가장 최근에 사용된 페이지는 계속 유지하고, 오랫동안 사용되지 않은 페이지는 교체 대상으로 선정합니다.Least Recently Used*라는 이름 그대로, 가장 최근에 사용되지 않은 페이지를 교체합니다.LRU는 사용된 페이지의 시간 순서를 유지하면서, 오래 사용되지 않은 페이지를 찾기 위한 정보를 기록하는 방식입니..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory(2) - file load , page fault 다루기

VM 프로젝트 두 번째 포스팅은 프로세스의 execute 과정을 알아보려고 한다.프로세스의 exec는 user가 exec라는 시스템 콜을 커널에게 보내고 이를 받아서 커널이 process_exec 함수를 실행한다.process_exec 함수 내에 load 함수가 있는데 이는 실행가능 목적파일의 ELF 데이터들을 프로세스의 가상메모리로 로딩하는 함수이다.- CSAPP 7장 링커 참고  대부분의 정보는 pintOS 스켈레톤 코드에 로딩하는 코드가 있지만, User stack 과 kernel memory에 User Pool 부분에서 해주어야 하는 부분이 있다.    process_exec의 흐름을 살펴보면 다음 그림과 같다.  메모리를 효율적으로 관리하기 위해 demand paging일 때 가상 메모리와 물리..

PintOS 2024.10.01

PintOS Project 3 : Virtual Memory (1) - supplemetal page table 보조 페이지 테이블

PintOS  세 번째 과제에서는 가상 메모리를 다루는 것이다. 그 중 가장 처음에 해야할 것은 보조 페이지 테이블(supplemetal page table)을 만드는 것이었다. 보조 페이지 테이블을 spt라고 하겠다. spt는 demand page할 때 pml4에 매핑을 하기 위해 또는 물리 메모리에 load 하기 위해 필요한 임시 거처라고 할 수 있다.spt는 다양한 자료구조로 구성할 수 있는데 이전에 스레드를 관리했던 연결리스트, 배열, 해시, 비트맵 등이 있겠지만 이번에는 해시테이블 자료구조를 사용하고 체이닝 기법으로 해시값이 같은 페이지를 관리하도록 spt 를 구성했다. 해시 테이블 장점 시간 복잡도가 O(1) 이므로 빠른 검색, 삽입, 삭제가 가능하다. 또한 배열의 인덱스가 아닌 것으로 탐색을..

PintOS 2024.10.01

PintOS Project 2 : system call (2)

시스템 콜 (1) 에 이어 파일을 다루는 함수 파일은 공유자원이기 때문에 여러 프로세스가 같은 파일을 여는 것은 가능하지만 수정하는 것은 하나의 프로세스만 가능해야 한다. 따라서 project 1 에서 했던 lock의 개념이 필수적이다. syscall_init에  lock_init(&filesys_lock); 을 추가한다. 또한 모든 함수들은 전방선언이 필수이므로 syscall.h에 선언해주어야 한다.    1. 파일 생성, 삭제bool create_syscall(const char *file, unsigned initial_size){ check_address(file); lock_acquire(&filesys_lock); bool success = filesys_create(file,initial_s..

PintOS 2024.09.18

PintOS Project 2 : system call (1)

user program은 컴퓨터 전체를 소유한다는 환상 하에 쓰여진다. 예를 들어서 메모리, cpu 등 자원들을 사용하는데 우리는 이것을 추상화 하여 각 프로세스가 진짜로 자원을 다 사용하고 있다고 착각하게 만든다. 또는 이 환상을 만족시키는 방향으로 관리를 해야 한다. 따라서 프로세스가 하면 안되는 작업을 하기 위해 시스템 콜을 호출하게 된다. 시스템 콜이란 유저프로그램이 못하는 작업을 커널에게 부탁을 하는 것이라고 생각할 수 있다. 따라서 project 2 의 목표는 OS와 user program이 상호작용을 할 수 있도록 시스템 콜 함수들을 구현하는 것이다.    위의 그림을 간단히 설명해보자면,유저프로그램이 exec() 함수를 실행한다.exec()는 유저프로그램이 실행하지 못하는 작업이므로 커널에..

PintOS 2024.09.18

PintOS Project 2 : argument passing

실행 가능 목적파일을 실행하기 위해서, 쉘은 로더 loader라고 알려진 메모리 상주 운영체제 코드를 호출해서 이 프로그램을 실행한다. 모든 리눅스 프로그램은 execve 함수를 호출해서 로더를 호출할 수 있으며, 로더는 디스크로부터 실행 가능한 목적파일 내의 코드와 데이터를 메모리로 복사하고 이 프로그램의 첫 번째 인스트럭션, 즉 엔트리 포인트로 점프해서 프로그램을 실행한다. 이와 같은 프로그램을 메모리로 복사하고 실행하는 과정을 로딩이라고 부른다. - CSAPP 7장 링커 참조   왼쪽 그림의 바이너리 데이터는 오른쪽그림의 아래부분에 채워진다. 이 과정을 로딩이라고 한다. 로딩은 pintos 코드에서 지원을 한다고 하지만, User stack 영역을 채워주는 것이 project 2 의 첫 번째 과제였..

PintOS 2024.09.18

코치님 커피챗 후기

나의 질문 :- 데이터 사이언티스트가 되고 싶은데 어떻게 해야할까? 코치님 답변 :- 하고 싶다고 되는 것은 아니다. 하지만 나의 실력을 쌓아 가능성을 높이자. 처음부터 데이터 사이언티스트가 되는 것은 거의 불가능이기 때문에, 단계적으로 커리어를 성장시키는 것이 좋은 방법일 수 있다. 백엔드 엔지니어로 시작해서 경력을 쌓고 사내 데이터를 다루는 팀이 있으면 배울 수 있는 좋은 기회가 될 수 있다.(여기서 데이터 팀이 있는 회사를 첫 직장으로 선택하는 것도 좋은 방법일 수 있다.) 일단 시작하는 것이 중요하므로 나의 실력을 쌓아 도전하자 !     나의 질문 :- 정글 주차 과정을 모두 완료하지 못해 계속 딜레이 되는 상황인데 어떻게 해야 할까? 코치님 답변 :- 현재를 완료하지 못한 상황에서 다음 주차를..

JUNGLE 2024.08.09

JWT(Jason Web Token), SSR(Server Side Rendering)

JWT 란 ? - JSON 객체를 사용하여 정보를 두 당사자(ex 클라이언트, 서버) 간에 정보를 안전하게 전송하는 데 사용됨.주로 인증 및 권한 부여를 위해 사용되며, 세션을 관리하는 쿠키나 서버 측 세션 저장소와는 다른 방식으로 작동함. JWT 의 구성요소 1. Header : 토큰의 유형과 해싱 알고리즘을 포함2. Payload : 사용자 정보나 기타 데이터를 포함3. Signature : 토큰의 무결성을 보장하기 위해 서명 JWT = Header.Payload.SignatureBase64Url 로 인코딩되며 (.) 으로 구분됨. header = { "alg": "HS256", "typ": "JWT"}payload = { "email" : "jungle@jungle.com", "pw" : ..

CS 2024.07.07