나만무를 시작하며 새롭게 알게된 지식이 너무나도 많다. 하나하나 자세히 정리하고 싶지만 시간이 촉박하다. 그래서 우선 나중에라도 정리할 것들의 키워드를 적어보고자 한다. - CI/CD - MVP 개발하는 법 - 보일러플레이트 - SOP && CORS - 와이어프레임 - MSA - 스크럼 개발 방법론 - reactjs와 nextjs - CSR과 SSR - 상태관리 프레임워크: Redux, Recoil - 상태관리 프레임워크를 반드시 쓸 필요는 없다! - 테스트 주도 개발, 백엔드에서는 postman으로 충분? - API 명세서 - jMeter 서버 부하 테스트 => 대용량 트래픽 처리 능력을 테스트할 수 있음 - ORM(Object Relational Mapping): 객체와 데이터베이스의 관계를 매핑해주..
Missing "key" prop for element in iterator map 함수를 사용할 때 자식 Element를 반복적으로 생성할 때 key 값을 독립적으로 주어야 한다. 그렇지 않으면 해당 에러를 띄운다. 그러나 key 값을 주지 않아도 렌더링하는데는 문제가 없다. 그 이유로는 React.js에서는 DOM 트리를 업데이트할 때 key 속성을 통해 diff 알고리즘을 적용하여 렌더링을 최적화한다고 한다. 그래서 key 속성이 없어도 렌더링에는 문제가 없지만 diff 알고리즘을 적용하지 못하기 때문에 렌더링 성능에 영향을 주게 된다. import Link from "next/link"; export default function Home() { let items: String[] = ["appl..
회고 오늘은 Pint OS 프로젝트 3의 마지막 날이다. 모든 과제를 끝내지는 못했지만, fail의 수를 5개까지 줄일 수 있었다. 중간에 에러 처리에서 헛발질만 안 했어도 시간이 더 있었을텐데 아쉽다. Swapping이 마지막인 줄 알았는데, Swapping을 구현해도 5개의 테스트 케이스가 남는다. 동기화 관련 문제라고 하던데 여기까진 손을 못 대겠다.. 처음 터졌을 때부터 고쳤으면 수월했겠지만, 코드를 너무 많이 고친 지금은 손을 댈 엄두가 나지 않는다. 다음주 일주일 간은 프로젝트 4 Extra를 진행한다. 말 그대로 Extra라서 구현하는 것은 옵션사항이다. 결국 프로젝트 3가 가장 힘든 주간이 아니었나 싶다. 프로젝트 3의 주 내용은 Virtual Memory이다. 물리 메모리의 용량 한계로 ..
Stack Growth 프로젝트 2에서 스택은 USER_STACK에서 시작하는 단일 페이지(4KB) =였으나, 프로젝트 3에서 스택은 현재 크기를 초과하면 필요에 따라 추가 페이지를 할당한다! Stack Growth 개념은 이해했으나 구현에 벅찼지만, 뛰어난 동료 덕분에 구현을 마치고 이해할 수 있었다. Page Fault 시, 스택 포인터 Stack Growth를 수행하기 전에 현재 스택 포인터의 값을 얻어야 한다. System Call 또는 User Program에 의해 발생한 Page Fault 루틴에서 각각 syscall_hanler() 또는 page_fault()에 전달된 struct intr_frame의 rsp 멤버에서 검색할 수 있다. 또한, Page Fault로 잘못된 메모리 접근을 감지하..
보조 페이지 테이블의 복사 fork가 발생할 시, 보조 페이지 테이블의 복사를 수행해주어야 한다. process.c의 __do_fork()에서 supplemental_page_table_copy()를 호출하면서 보조 페이지 테이블의 복사를 수행한다. 우리는 이 함수를 구현해야 한다. 보조 페이지 테이블을 복사하는 이유는 다음과 같다. 프로세스가 fork() 시스템 콜을 통해 자식 프로세스를 생성할 때, 부모 프로세스의 가상 메모리 공간을 자식 프로세스로 복사해야 한다. 메모리 보호: 가상 메모리 공간의 복제와 공유를 통해 프로세스 간에 안전한 메모리 보호를 제공할 수 있다. supplemental_page_table_copy() 함수는 필요한 권한과 제약 조건을 유지하면서 보조 페이지 테이블을 복사하여 ..