목록분류 전체보기 (64)
정글에서 온 개발자
디렉토리 구성 model ArticleEntity.java dto ArticleDTO.java ReponseDTO.java repository ArticleRepository.java (interface) service ArticleService.java controller ArticleController.java 코드 Entity(Model) 테이블 스키마 그 자체 @Builder @NoArgsConstructor @AllArgsConstructor @Data @Entity @Table(name = "Article") public class ArticleEntity { @Id @GeneratedValue(generator="system-uuid") @GenericGenerator(name="system..
서블릿 엔진 → @RestController 개발자는 Javax.servlet.http.HttpServlet을 상속받는 서브 클래스를 작성해야 한다. 서블릿 컨테이너는 서블릿 서브 클래스를 실행시킨다. @RestController 에는 이 서블릿 서브 클래스가 이미 구현되어있다. MVC 흐름 contoller → model (service → repository) 데이터처리 데이터 → service → controller → view M(odel) @Service - Model에서 비즈니스 로직을 담당함 @Repository - 서비스에서 호출되어 실제 데이터베이스와 연결, 데이터 조회, 저장 작업을 수행함 .findbyId 등 이용 가능extends JpaRepository 로 JPA 이용 @Query..
https://spring.io/quickstart/ Spring | Quickstart Spring Quickstart Guide What you'll build You will build a classic “Hello World!” endpoint which any browser can connect to. You can even tell it your name, and it will respond in a more friendly way. Step 1: Start a new Spring Boot project Use start.s spring.io 강의를 보기 전에 공식문서 보고도 혼자 할 수 있지 않을까 해본 spring quick start. spring 말고 spring boot부터 해야하나?..
배경 void supplemental_page_table_kill (struct supplemental_page_table *spt); Frees all the resources that were held by a supplemental page table. This function is called when a process exits (process_exit() in userprog/process.c). You need to iterate through the page entries and call destroy(page) for the pages in the table. You do not need to worry about the actual page table (pml4) and the phys..
해결하려는 문제 #ifdef VM 블럭 아래에서 코딩을 해야 하는데, 해당 코드가 음영처리 된다. 아래와 같이 정의되어 있는 속성을 써도 빨간줄도 뜬다. #ifdef VM 안에서 정의된 함수들은 자동 완성이 안된다. 문제의 원인 Makefile가 돌아갈때는 알아서 설정되는 define 값들이 자동으로 설정된다. Makefile을 돌리기 전 코딩하는 상황에서는 VM이 define되지 않았기 때문에 아래와 같은 문제가 생긴다. 접근 그럼 VM을 define해주면 되지 않을까? 가장 먼저 생각나는 방법은 파일에 직접 #define VM을 해주는 방법이다. 실제로 잘 작동한다. 하지만 이 방법은 코드 자체를 조정하는 방법으로, VM을 끄고 싶을 때 해당 코드로 가서 일일히 꺼야 하는 단점이 있다. #define..
기존 mmap 코드 void * do_mmap (void *addr, size_t length, int writable, int fd, off_t ofs) { //에러 처리 void *va = pg_round_down(addr); if(length == 0 || addr == 0 || va != addr || fd == 0 || fd == 1){ return NULL; } struct file *file = thread_current()->fdt[fd]; //이 부분 off_t read_bytes = file_length(file); if(read_bytes 0) { /* Do calculate how to fill this page. * We will read PAGE_READ_BYTES bytes f..
에러 Anonymous, Stack growth를 통과했는데, page-linear를 돌리면 에러가 났다. 0x00000080042095f3: intr_handler (threads/interrupt.c:352) 0x0000008004209a11: intr_entry (threads/intr-stubs.o:?) 0x000000800421ad55: hash_clear (lib/kernel/hash.c:58) 0x0000008004221cb9: supplemental_page_table_kill (vm/vm.c:332) 0x000000800421c70c: process_cleanup (userprog/process.c:378) 0x000000800421c6a8: process_exit (userprog/pr..
배경 pintos vm에서는 page를 보조테이블에 uninit_page 로 미리 넣어놓고, 페이지를 읽을 때 lazy_load_segment로 물리주소에 할당한다. process를 시작할 때 읽어들이는 파일도 마찬가지인데, process_exec이 stack을 쌓고 do_iret()을 하면, 해당 rip로 가면서 rip가 가리키는 가상주소를 물리주소에 할당하기 시작한다. 그런데 위와 같이 잘 읽어들이다가 0을 가리키는 곳으로 빠졌다. 해당 fault가 특정 코드에서 나는 것이 아니기 때문에 fault 직전에 브레이크포인트를 잡고 디버깅할 수도 없어 이틀 정도를 헤멨다. 'addr : ' log는 page_fault_handler 진입하자마자 찍는 로그이다. 해결 기존 코드에서는 아래 두 코드가 빠져있었..
Priority Inversion 문제 우선순위 역전. 우선순위가 높은 쓰레드가 우선순위가 낮은 쓰레드를 기다리는 현상 Critical Section(이하 CS)를 접근하지 못하도록 락을 거는 경우에 발생한다. 락은 우선순위와 상관 없이, 락 홀더가 끝날 때까지 다른 쓰레드들이 락이 풀릴때까지 CS 앞에서 대기한다. L(낮은 priority) 이 lock holder고 H(높은 priority)가 락 해제를 기다리는 경우에도 우선순위 역전이라고 할 수 있다.(나의 생각) 일반적으로는 CS에 접근하지 않는 M(L과 H의 중간 priority) 이 들어오는 경우에 이 역전이 더 극명하게 나타난다. L이 time_slice 때 cpu를 반환하면, L보다 우선순위가 높은 M이 먼저 실행된 뒤에야 L이 실행되어 ..
왜 less로 정렬하면 선입 선출이 안되는지? 배경 특정 조건의 순서대로 elem을 뽑으려면 뽑기 전에 리스트를 정렬하고 front나 back중 하나에서 뽑으면 될 것 같다. 넣을 때부터 정렬을 해도 donate등 다른 요인들로 정렬이 깨질 수 있기 때문에, 어차피 뽑기 전에 정렬을 한 번 더 해야 한다. 따라서 뽑기 전에’만’ 정렬을 하는 것이 효율적이다. 리스트에는 기존에 뒷쪽(list_push_back)부터 elem을 삽입해주고 있었다. 이 때 list에서 제공하는 함수에는 “less함수”, 즉 a,b의 property를 비교했을 때 a가 더 작은 경우 true를 반환하는 함수를 넣어주라고 한다. 이를 사용하기 위해 lesser_priority()를 이용해 오름차순으로 정렬하고 pop_back()을..