분류 전체보기218 쉘이 명령어를 실행시키는 방법 초기 상태: 쉘이 사용자의 입력을 wait하고 있음 사용자가 "ls"를 입력 쉘 프로세스는 fork로 자식 프로세스를 만든다.(아직 CPU는 부모 프로세스에게 있음) 쉘 프로세스는 나머지 명령어를 수행하고 wait를 호출한다.(waiting queue, sleeping queue에 간다) context_switching이 실행되고 자식 프로세스에게 CPU가 주어진다. 자식 프로세스는 exec를 호출해 disk에서 1에서 받은 command line에 해당하는 실행가능파일을 load해 자신의 이미지를 덮어쓴다. (원래는 부모 프로세스와 같은 이미지였으나 새로운 이미지가 덮어써진다.) exec 덕분에 자식은 새로 덮어쓴 이미지의 main함수부터 새출발한다. 자식은 main 루틴을 수행하고, exit을 호출한.. 2022. 5. 30. pintos-kaist 시스템 콜 해석 시스템 콜 인프라스트럭처를 구현합니다. userprog/syscall.c에 시스템 콜 핸들러를 구현합니다. 현재는 프로세스를 종료함으로써 시스템 콜을 "처리"하는 기본 구현상태입니다. 시스템 콜 번호를 취득한 후 임의의 시스템콜 인수를 취득하여 적절한 액션을 실행해야 합니다. 시스템 콜 details 첫 번째 프로젝트(threads)에서는 이미 운영체제가 사용자 프로그램에서 제어권을 회복할 수 있는 한 가지 방법, 즉 타이머와 I/O 디바이스로부터의 인터럽트를 다루었습니다. CPU 외부의 엔티티에 의해 발생하므로 이러한 인터럽트는 "외부" 인터럽트입니다. 운영체제는 프로그램 코드에서 발생하는 이벤트인 소프트웨어 예외도 처리합니다. 이러한 오류는 페이지 오류 또는 0으로 나누기 등의 오류일 수 있습니다. .. 2022. 5. 29. pintos alarm clock 테스트 에러 pintos -v -k -T 60 -m 20 -- -q run alarm-single tests/threads/alarm-single.errors > tests/threads/alarm-single.output ^Cmake[1]: *** Deleting file 'tests/threads/alarm-single.output' ../../tests/Make.tests:75: recipe for target 'tests/threads/alarm-single.output' failed make[1]: *** [tests/threads/alarm-single.output] Interrupt ../Makefile.kernel:10: recipe for target 'check' fail.. 2022. 5. 28. 내가 자꾸 까먹어서 만든 pintos 코드 없는 함수 사전 do_schedule void do_schedule(int status) - destruction_req를 비워주고(페이지 청소) - 현재 스레드의 상태를 status로 바꾸고 - shedule 함수 실행 schedule void schedule(void) - 현재 실행 중인 스레드(curr)와 다음에 실행될 스레드(next)를 찾는다. - 실행 준비: next의 상태를 running으로 바꿔주고 thread_ticks를 0으로 바꿔줌 - thread_launch() 호출: 실행 중이던 스레드 정보를 저장하고 다음 스레드의 정보로 교체함 memcpy void *memcpy (void *dst_, const void *src_, size_t size) - src에서 size만큼 읽어서 dst에 복사 - d.. 2022. 5. 28. 이전 1 ··· 6 7 8 9 10 11 12 ··· 55 다음