Projects
-
[React] 실력다지기 프로젝트 - 프론트엔드Projects/Krafton_Jungle_4 2024. 4. 20. 00:42
프레임워크 학습을 위한 미니 프로젝트 개발을 시작하였다. 프론트엔드 개발을 희망하는 사람으로서 리액트 학습과 함께 미니 프로젝트를 동시에 진행하였다. 과제 설명 개발범위 프론트: 게시판 UI를 구현 백엔드: 게시판 Server API 구현 추가적 구현 가능 (기술적 챌린지 요소) 초기에 나는 일단 프론트만 개발하겠다고 생각했다. 하지만 이후에 node.js 사용과, 데이터베이스와의 연결도 시도해보고 서버 클라이언트간 통신도 이뤄내보고 싶다고 생각해서 이후에 서버를 구현하였다. 인원구성 혼자 fullstack 개발 가능 프론트 UI만 구현할 경우 게시판 데이터는 브라우저상에서만 존재하도록 구성, 또는 postman mock server를 구성해서 사용 백엔드 ServerAPI만 구현한 경우, postman..
-
[PintOS] Project 3 - Virtual Memory, Stack GrowthProjects/Krafton_Jungle_4 2024. 4. 3. 00:15
stack growth 부분 깃북을 정리해 보겠다. 프로젝트 2에서 스택은 USER_STACK이라는 주소에서 시작하는 '단일 페이지'였고, 이를 4KB로 제한하여 실행했다. 이제부터는 스택이 현재 크기를 초과하면 필요에 따라 추가 페이지를 할당한다. 현재 크기라는 것이 1MB를 말하는 것인지 4KB를 말하는 것인지? 추가 페이지는 '스택'에 접근하는 경우에만 할당한다. 스택에 접근하는 경우와 아닌 경우를 구별하는 방법을 찾아야 한다. 페이지 폴트가 발생한 주소가 스택이라고 지정된 주소 사이인지를 검증하는 로직이 필요하다. User program은 스택 포인터 아래의 스택에 쓸 경우 버그가 발생하는데, 이는 일반적인 실제 OS가 스택의 데이터를 수정하는 시그널을 전달하기 위해 프로세스를 언제든지 중단할 수..
-
[PintOS] Project 3 - Virtual Memory, Anonymous Page (2)Projects/Krafton_Jungle_4 2024. 4. 2. 16:07
구현을 열심히 해 보았지만 능력의 한계로 진행이 더뎌졌다. 그래서 빠르게 팀원의 도움과 여러 블로그의 참조를 통해서 내가 어떤 잘못을 했는지 파악하는 방향으로 나아가고자 했다. 나의 구현과 팀원 혹은 블로그들의 구현 상 달랐던 점을 비교하고 각 함수가 무엇을 하는지 살펴보겠다. 일단 구현 사항들은 다음과 같다. vm.c supplemental_page_table_entry() vm_claim_page() vm_evict_frame() vm_get_victim() spt_insert_page() vm_alloc_with_initializer() vm_do_claim_page() vm_try_handle_fault() vm_get_frame() spt_find_page() vm.h struct lazy au..
-
[PintOS] Project 3 - Virtual Memory, Anonymous page (1)Projects/Krafton_Jungle_4 2024. 3. 27. 14:32
흐름 정리 fork, process_create_initd 등으로 프로세스 생성 -> initd 함수에서 supplemental_page_table_init() 호출하여 현재 스레드의 supplemental page table 을 초기화한다. supplemental_page_table_init() 새로운 spt를 초기화한다. 기존의 pml4라는 페이지 테이블은 주어진 va를 kva로 변환만 해주고 있고, va가 가리키고 있는 페이지 구조체 정보에 대한 어떠한 정보도 가지고 있지 않다. 따라서 spt는 va가 가리키고 있는 페이지에 대한 정보를 추가적으로 보충해 주는 역할을 한다. -> pml4는 그냥 uint64_t로 선언되어 있는데 어떻게 테이블이라고 할 수 있을까?... spt가 필요한 이유는 다음과..
-
[PintOS] Project 3 - Virtual Memory git book, IntroductionProjects/Krafton_Jungle_4 2024. 3. 23. 13:43
Virtual Memory 프로젝트 3을 시작하기 이전에, 깃북을 읽어보아야한다! By now you should have some familiarity with the inner workings of Pintos. Your OS can properly handle multiple threads of execution with proper synchronization, and can load multiple user programs at once. However, the number and size of programs that can run is limited by the machine's main memory size. In this assignment, you will remove that limi..
-
[PintOS] Project 2 - System Call (3)Projects/Krafton_Jungle_4 2024. 3. 20. 10:18
(2)에 이어서 구현중이다 close 파일디스크립터를 닫는다. 프로세스가 종료되거나 중단될 때, 해당 프로세스의 모든 열린 파일 디스크립터가 암묵적으로 닫힌다. 마치 이 함수를 각각의 파일 디스크립터에 대해 호출한 것과 같은 효과가 있다. 구현을 위해서는 file_close를 사용해야하고, 파일 디스크립터 테이블에서 fd에 해당하는 파일을 제거하는 함수를 새로 만들어 주어야 한다. // userprog/process.c void process_close_flie(int fd) { struct thread *curr = thread_current(); curr->fdt[fd] = NULL; } // userprog/syscall.c void close(int fd) { file_close(process_g..
-
[PintOS] Project 2 - System Call (2)Projects/Krafton_Jungle_4 2024. 3. 19. 12:53
어제에 이어서 계속 구현 중이다. 오늘은 퀴즈 보는 날인데 나에겐 퀴즈보다 더 구현이 더 중요하다.. create() create()를 위해선 filesys 폴더에 있는 filesys.c를 이용해야 한다. write 부분에서 이를 활용하라는 깃북은 없었지만, close에는 있다. filesys.c의 여러 함수들 중에서 filesys_create()라는 함수를 사용한다. 함수를 살펴보자. /* Creates a file named NAME with the given INITIAL_SIZE. * Returns true if successful, false otherwise. * Fails if a file named NAME already exists, * or if internal memory alloca..
-
[PintOS] Project 2 - User Memory Access (1)Projects/Krafton_Jungle_4 2024. 3. 18. 20:02
User Memory Access arguement passing이 끝난 후, 이제 user memory access 부분을 하고 있다. 깃북을 보자 system call을 사용하기 위해서는 유저 가상 주소 공간에 있는 데이터들을 읽고 쓸 수 있는 방법을 제시해야 한다. 인자들을 얻을 때는 문제가 되지 않지만 만약 시스템 콜로 얻게 된 인자 즉, 유저가 넘겨준 포인터들이 올바르지 못한 곳을 가리키고 있다면? 이것이 User Memory Access의 주요 문제이고 해결해야만 한다. 문제 케이스는 세 가지 정도로 나뉜다. 포인터가 null을 가리킬 경우 포인터가 매핑되지 않은 가상 메모리를 가리킬 경우 포인터가 커널 메모리를 가리킬 경우 깃북을 좀 더 읽어보면, 이를 어떻게 해결할 지 좀 더 자세히 나온다..