본문 바로가기

분류 전체보기

(8)
AWS Amplify 빌드 에러, npm ci --legacy-peer-deps aws amplify로 호스팅을 하려고 하는데 에러가 났다. 사실 다른 방식으로 호스팅하려다가 잘 안되니까 기다리는 과정에서 amplify는 간단하다는데 해볼까 했던 건데, 역시나 바로 되진 않더라! 문제는 2023-08-16T06:30:37.573Z [WARNING]: npm ERR! Could not resolve dependency: npm ERR! peer react@"> 15.5.0 < 17" from react-twitter-auth@0.0.13 npm ERR! node_modules/react-twitter-auth npm ERR! react-twitter-auth@"^0.0.13" from the root project npm ERR! npm ERR! Conflicting peer depe..
syscall.c 시스템 콜을 짜기 전에 각 스레드는 자신의 파일 디스크립터 테이블을 가지고 있어야 한다. 이중 포인터로 thread 스트럭쳐에 필드를 추가해준다. 또한, exit 시스템콜을 위해서 exit 여부를 확인할 수 있는 필드와, exit_status도 선언해준다. bool is_exited; int exit_status; struct file** fd_table; int index; 그리고 thread.c의 thread_create()에서 t -> fd_table = palloc_get_page(PAL_ZERO) 를 해준다. 스레드를 만들 때 palloc으로 할당을 해줬으니까 스레드가 죽을 때 free 해주면 될 것 같은데! thread가 죽을 때는 thread_exit()을 호출하고, thread_exit에서..
argument passing 수정한 순서대로 기록 tid_t process_create_initd (const char *file_name) 새로운 스레드를 생성함으로써 유저 프로그램 initd를 시작한다. 새로운 스레드는 process_create_inid()가 반환하기 전에 PRI_DEFAULT로 시작되어 스케줄링되고, 종료될 수도 있다. initd의 스레드 아이디를 반환하거나 TID_ERROR를 발생시킨다. int process_exec(void *f_name) 내부에 파라미터로 들어온 f_name을 file_name 선언해서 malloc 해주고, free 해줌. load argv malloc 해줬음 이따가 free 해줘야함. arg_addr palloc 해줬음 이따가 palloc_free_page 해줘야함. foo a b c..
Process.c process.c에 있는 함수에서 문제가 발생한 것 같은데, 하나씩 무식하게 뜯어보는 방법밖에 없을 것 같다. . .. . . .. 현재 핀토스의 실행 흐름이다. run_action() 에서 run_task()를 호출하고, 그 내부에서 process_wait(process_exec(argv))를 호출한다. process_exec은 유저 프로세스를 생성하는데, 함수 내부의 thread_create(...)가 스레드를 생성한 후 이전에 짜준 스케줄링 코드에 맞춰 ready_list에 넣어주는 스케줄링을 실행한다. process_exec()에서 tid를 반환하면, process_wait()에서 -1을 반환하고, shutdown_power_off()를 통해 pintos가 종료된다. 이걸 이제 어떻게 바꿔야할까...
Project 2 디버깅 이런식으로 53개가 fail이 됐다. 위에서 아래 순서로 디버깅 해봐야지. ▶ argument passing 먼저 아래 4개의 테스트케이스를 보자. FAIL tests/userprog/args-single FAIL tests/userprog/args-multiple FAIL tests/userprog/args-many FAIL tests/userprog/args-dbl-space args-a one to three 라고 쓰면 순서대로 나와야할 것이 three to one args-a 순서로 출력되고 있다. argument를 stack에 넣어주는 순서에 문제가 있었던 것 같아 아래처럼 바꿔주니까 위 4개 모두 통과해 49 of 95 tests failed가 됐다. for (int k = argc-1; k ..
system call process.c에 있는 코드들을 건드리기 전에 ../userprog/syscall.c에 있는 나머지 시스템콜 함수 부분을 마무리하기로 했다. system call handler syscall_handler는 다음과 같이 구현했다. void syscall_handler (struct intr_frame *f UNUSED) { // TODO: Your implementation goes here. uint64_t sysnum = f -> R.rax; // 스택에서 시스템콜 넘버 받아오기 void *rsp = f -> rsp; // intr_frame의 스택 포인터 uint64_t argv = f -> R.rsi; //load 마지막에서 rsi에 argv[[0] = 함수 이름 저장했었음 uint64_t ar..
PROJECT 1 - Alarm Clock, Priority Scheduling 사실 2번 과제 초반까지는 아이패드에 필기를 하면서 공부를 했었다. 다시 정리하기 귀찮으니까 그냥 필기 파일을 업로드해놓겠다. Donation - Priority Scheduling 나는 donation 개념이 이해가 잘 안돼서 케이스를 하나씩 그림을 그려가며 공부했었다. 그리고 나서 코딩을 하면서도, 막히는 테스트 케이스를 하나씩 분석해서 해결했다. 그래서 사실 1번을 다 짠 시점에서 정리를 하자니 두서 없이 될 것 같아 프로젝트 1은 패스할까 한다. 1. donation 대충 테케 분석은 이런 식으로 무식하게 접근했다. 테케가 하나씩 통과해갈 때는 뿌듯했던 것 같은데 막상 다 하고 나니 조금 부끄러웠다. 공부하면서 혼자 궁금했던 것들 Q > 기존의 timer_sleep 함수가 ticks 정도의 시간이..
fork() 아래는 argument passing 코드를 짜기 전에 혼자 공부했던 내용이다. 이번 장에서는 fork()와 관련된 내용을 다룰 것이기 때문에 접어놓겠다. 더보기 더보기 argument passing까지는 아이패드로 공부했다. 필기를 그냥 올려놓겠다는 뜻. fork() GitBook에 있는 fork()를 참고하자. pid_t fork (const char *thread_name); 현재 프로세스의 복제본으로 새로운 프로세스를 생성.(해당 프로세스의 이름은 인자로 들어가는 THREAD_NAME). %RBX, %RSP, %RBP, %R12 - %R15(callee-saved register)를 제외한 나머지 레지스터값은 복제할 필요가 없다. 반드시 자식 프로세스의 process id를 반환해야 한다. 그렇지..