전체 글
-
[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가 필요한 이유는 다음과..
-
[OS] 주소 공간, 메모리 관리 API, 주소 변환의 원리ComputerScience/OS 2024. 3. 26. 01:13
이 글은 'OSTEP: Operating Systems Three Easy Pieces'를 참고하여 쓴 글로, 학습 기록용으로 작성된 글입니다. 따라서, 정확하지 않은 내용이 있을 수 있습니다. 옳지 않은 정보가 있다면 지나치지 마시고 수정 요청 댓글 달아주시면 감사하겠습니다. 🙂 16. 주소 공간의 개념 16. 1 초기 시스템 초기 시스템에는 메모리에 하나의 프로세스만 적재되었다. 특별한 가상화는 존재하지 않았다. 16. 2 멀티프로그래밍과 시분할 멀티프로그래밍 고가의 장비를 효율적으로 다루기 위한 시도로 멀티프로그래밍이 대두되었다. 여러 프로세스가 실행 준비 상태에 있으면 OS는 이 사이를 전환해가면서 실행했다. 시분할 일괄처리방식(batch computing)의 한계를 느껴 많은 사용자가 동시에 컴..
-
[KFT_JNG_4] 4주차까지의 회고Life/Retrospect 2024. 3. 23. 20:56
개발 공부와 관련된 많은 것들은 개인 노션의 WIL에 다 적어 놓았으나, 긴 연휴를 앞두니 사람이 막 지금까지 내가 어떻게 지내왔는지 되돌아보고 싶고 한가 보다. 이에 지금까지의 나는 어찌 살았나, 정글을 잘 헤쳐 나가고 있나에 대한 회고록을 적어보고자 한다. 0주차 생활 0주차 즉, 입소를 하고 난 후 미니프로젝트를 진행하는 주차에는 사람들과도 어색했고 룸메와도 어색했었다. 기숙사 생활을 해본 적 있지만 없다고도 할 수 있는 나는, 처음 기숙사 생활에 적응하느라 고생을 좀 한 것 같다. 새 것으로 교체한 것인지, 그냥 빤건지는 모르겠지만 어쩄든 새로 쓰는 침구류와 언제 청소했는지 알 수 없는 기숙사 방과 친해지는 과정도 필요했다. 다른 사람과 한 공간에서 매일 자는 것도 군대 이후 처음인 것 같다. '..
-
[KFT_JNG_4] 찬찬히 나를 돌아보는 시간Life/Retrospect 2024. 3. 23. 20:49
회고록을 시작하며 오래 전, 정치외교학과에서 SW관련 학과로 이중전공을 변경하면서, '스파르타코딩클럽'이라는 곳에서 처음 코딩 교육을 들으며 회고록을 적었던 적이 있다. 스스로에게 솔직해지자면 좀 억지로(?) 적었던 것 같다. 하지만 이제는 큰 부담 없이, 울림을 주는 날이 있을 때마다 부담없이 적어보려고 한다. 그래야 좀 주기적으로 적을 것 같다. 이 글을 쓰는 현재는, 3일간 크런치 모드로 프로젝트를 진행하고 난 뒤 뒷풀이 회식이 끝난 후이다. 그리고 이 글은 과거, 현재, 미래에 대한 나의 에세이이다. 지나온 과거에 대한 성찰 나에게 '배움'이란 매우 어려운 것이었다. 암기빵이 있으면 정말 좋겠다는 마음으로, 암기해야 할 것들에 대해 '굳이 왜 외워야하지'라는 생각으로만 학습 태도를 가졌다. 결국 ..
-
[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..
-
[OS] Swap, File-backed Page, DMAComputerScience/OS 2024. 3. 22. 15:01
10주차에 들어섰다. 이번 주차의 키워드들 중에서 내가 맡은 키워드는 swap disk, file-backed page, DMA이다. DMA는 이전에도 나왔던 키워드이긴 하지만 swap disk와 file-backed page는 처음 만나는 개념들이다. 한 번 살펴봐보자. Swap Swap RAM이외의 저장 공간을 사용하여 시스템의 가상 메모리 용량을 확장하는 기법이다. 보조적인 저장장치(HDD, SSD)에 있는 스왑 공간이나 스왑 파일을 이용한다. 스왑을 통해 운영체제는 RAM의 한계를 넘는 메모리 요구를 충족하고 더 많은 프로그램을 동시에 실행할 수 있게 된다. 가상 메모리(Virtual Memory)란? 메인 메모리의 크기가 한정되어 있는데 메인 메모리보다 크기가 큰 프로세스를 실행해야 한다면? 에..
-
[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..