본문 바로가기

TIL (Today I Learned)

(17)
4/10-4/14 WIL - 왜 나만 안 돼 JWT spring+react로 게시판만들기를 진행중이다. 회원가입 후, DB에 회원정보 저장까지 완료되어 JWT로 로그인 및 인증/인가 시스템을 구현하려 했다,,, 여러 버전(11.5~12.3)과 예제들, 공식 깃헙 문서까지 보면서 시도했다. io.jsonwebtoken은 겨우겨우 설치했지만, 왜인지 springboot-security 의존성은 추가되지도 않고, 기본적인 security가 없으니 어떤 예제도 따라할 수 없었다 ㅠㅠ 이렇게 JWT에만 매달릴 수는 없다..시간이 없음! 내 우회책은 SHA256을 이용하는 것이다. 아래 블로그를 참고했다. SHA256 암호화 알고리즘을 이용한 회원가입, 로그인 유저가 보내온 PW를 암호문을 이용해 암호화하고, 이 암호화 된 PW와 암호문을 DB에 저장한다. 이후, ..
4/3 (수) TIL - PintOs Project 3 마무리 ! 오늘의 결과 ! 오늘의 오류 해결 1 file_page 구조체 file-backed page를 표현하기 위한 구조체다. 기존에 틀만 존재하던 구조체에 여러 멤버를 추가했다. 처음에는 uninit 구조체를 따라 작성해 type, va 등을 추가했고, 이후 파일 관련 작업을 위해 다른 멤버들을 추가했다. struct file_page { // enum vm_type type; void *aux; // void *va; // size_t read_bytes; // size_t zero_bytes; // off_t ofs; // struct file *file; }; 1-1 struct file 위 구조체는 file_backed_initializer()에서 초기화를 진행하는데, 기존에는 aux가 아니라 각 ..
4/2 (화) TIL - 오늘의 일지 (mmap, swap disk) ! 오늘의 결과 ! 오늘의 알게된 점 페이지와 물리메모리의 맵핑을 끊어줘야 한다는 것을 나는 page->frame에 대한 가시적인 처리를 하라는 얘기로 생각했다. 그래서 page->frame = NULL로 끊어줘보기도 했는데 계속 page->frame의 접근이 page fault가 발생했었다. 알고보니 직접적인 처리가 아니라 pml4_clear_page()를 통해 해당 페이지의 참조 비트와 물리 주소와의 관계를 clear 시키라는 얘기였다...아직 이해가 덜 되었나보다. ! 오늘의 실수 (트러블 슈팅) 1. reopen한 파일을 써야하는데 reopen 해놓고 기존 파일을 사용하고 있었다. 또 멍청이슈... file.c의 do_mmap()에서는 process.c의 lode_segment와 거의 같은 흐름을..
4/1 (월) 오늘의 TIL - Stack glowth 성공 오늘은 스택 글로우에 대한 테스트케이스를 모두 성공하고, mmap, munmap 구현을 시작했다. ! 오늘의 속상한 점 palloc을 포기했다... page-linear 등 페이지와 관련된 테스트 케이스는 굉장히 큰 크기의 페이지를 할당받으려 하는데, 우리는 palloc을 사용하면서 하나의 페이지만 처음에 할당하기 때문에 케이스를 통과하지 못했다. malloc의 경우 2MB 정도의 큰 크기로 메모리를 할당하기 때문에 malloc을 써서 통과할 수 있었다. 물론 페이지의 크기를 PGSIZE로 나눈 값만큼 palloc_get_multiple(size) 해주면 가능할 것 같다! 그런데 굳이 계산을 더 추가할만큼 palloc의 메리트가 있냐하면 그렇지는 않아서...더 간단하게 malloc을 사용했다..아쉽다 케..
3/29 (금) TIL - fork 테스트케이스까지 모두 통과! ! 오늘의 알고리즘 백준 14502번 연구소 bfs 문제지만 접근이 좀 어려웠다. 조합을 사용해야 한다는 힌트를 듣고 풀 수 있었다. 브루트포스 등의 모든 경우에 접근해야 하는 경우, 조합이나 순열을 사용해야 하는게 생각이 잘 안 떠오르네... ! 오늘의 실수 palloc_get_page() 했던 메모리에 대해 free()로 메모리 해제를 해주어 오류가 발생... 미처 깨닫지 못 해 몇 십분 흘러버려... ! 오늘의 무지함 1 hash 시스템, 사용법에 대해 무지했다. 어제 TIL에 썼던거 같은데 - 왜 insert 해준적 없는 page에 대한 hash_find()가 가능한가? 이 질문에 대한 답을 얻었다. 전체 질문 채널에 질문했는데 다른 정글러분께서 설명해주셨다! hash_init() 할 때 설정해주..
3/28 (목) TIL - Project3 Anonymous Page 구현하기 ! 오늘의 이슈 어디서 발생하는지 모르는 Page Fault 며칠간 열심히 구현한 결과, 많이 늦었지만 ㅠ Anonymous page 페이지 테이블 copy 직전까지 구현했다. 물론 fork() 이전에도 read-boundary, open-empty 같은 케이스가 실패한다...어딘가 예외처리를 덜 한 모양. 일단 gitbook에 써있는 가이드와 선배님이 작성해두신 sudo 코드처럼 글로만 가이드해두신 글을 보고 구현했다. 그러고 한참 안 돼서...정답 코드와 비교해보며 작성했다. 거의 우리가 작성한 코드와 같아서 대체 어디가 문제인지 고민했다. printf()를 이용해서 디버깅을 진행했는데, 이상하다 느꼈던 부분은 spt_find_page()에서 리턴하지를 않았다는 것이다. 분명 함수를 모두 처리하고 r..
10주차 키워드 정리 가상 메모리 : 실제 하드웨어보다 소프트웨어의 크기가 더 커도 운용이 가능하게 만들어주는 메모리 기법. 어플리케이션이 실행될 때, 실행에 당장 필요한 부분만 메인 메모리에 적재되고 나머지는 보조 기억장치(디스크)에 남아있는다. 가상 메모리 구현을 위해서는 MMU가 있어야 한다. 페이지 테이블 : 메모리를 적재하는 단위인 페이지, 이 페이지를 관리하는 테이블이다. 각 페이지의 가상 주소와 실제 적재되어 있는 물리 주소가 매핑되어 있다. TLB (translation lookaside buffer) : 페이지 테이블에 접근하는 횟수를 줄여 주소 변환 시간을 단축한다. TLB는 적은 엔트리만 가질 수 있지만, 그렇기에 연산 속도가 빠르다. (내가 보기엔 접근 횟수는 TLB가 있으나 없으나 비슷한거 같은데 연산..
3/20 (수) TIL - 오늘은 반드시 목요일에 마무리하는 수요일 TIL do fork()에서 sema_up(&parent->fork_wait); /* Finally, switch to the newly created process. */ if (succ) do_iret(&if_); 세마 업의 위치가 do iret()아래였는데 위로 올려줘서 패스 do iret()이 레지스터를 이용해 실행하는 프로그램을 점프하는? 함수였다. 그래서 do iret 아래는 실행이 되지 않는 것이였다...sema up이 되지 않아 부모의 fork wait이 끝나지 않는 이슈였다. dueplicate_pte()에서 if (is_kernel_vaddr(va)) // 커널이면 즉시 리턴 { return true; } 처음 코드와 주석을 봤을 때, 커널이면 리턴하는 경우에..