
Project2-0 BackgroundProject2-1 Passing the argumentsProject2-2 User Memory Access개요시스템 콜은 소프트웨어 예외의 한 종류로 간주된다. 유저 프로그램은 시스템 콜을 통해 운영 체제에 서비스를 요청할 수 있다. x86-64 아키텍처에서는 syscall 명령어를 사용하여 시스템 콜을 호출핰다. 이는 기존의 x86 아키텍처에서 시스템 콜이 다른 소프트웨어 예외와 동일한 방식으로 처리되던 것과 대조적이다. 시스템 콜을 호출할 때는 시스템 콜 번호와 인수를 레지스터에 설정해야 한다. 시스템 콜 번호는 %rax 레지스터에 저장되며, 인수는 %rdi, %rsi, %rdx, %r10, %r8, %r9 순서로 전달된다. 이는 네 번째 인수는 %rcx로 전..

Git book User memory 번역User memory access시스템 콜의 일부로서, 커널은 종종 사용자 프로그램이 제공한 포인터를 통해 메모리에 접근해야 합니다. 커널은 이를 매우 신중하게 처리해야 합니다. 사용자가 null 포인터, 매핑되지 않은 가상 메모리를 가리키는 포인터, 또는 커널 가상 주소 공간(KERN_BASE 이상)을 가리키는 포인터를 전달할 수 있기 때문입니다. 이러한 모든 유형의 잘못된 포인터는 문제를 일으킨 프로세스를 종료하고 해당 리소스를 해제하여, 커널이나 다른 실행 중인 프로세스에 피해를 주지 않고 거부되어야 합니다.유저모드 프로그램이 유저 메모리에서 접근하지못하는 주소로 커널을 통해 접근하려고할 수가 있다. 커널은 자기 자신을 보호하기 위한 수단으로 시스템 콜을 활..

목표PinOS에서 인자를 전달하고 쓰레드를 생성하는 매커니즘을 구현해야한다. 현재 핀토스는 명령줄을 토큰화하는 매커니즘이 존재하지 않아 명령줄 전체를 전달한다.명령어 "echo x y z"를 실행현재 PintOS쓰레드의 이름이 "echo x y z"이다.파일이름이 "echo x y z"이름을 가진 프로그램을 찾는다.명령줄 "echo", "x", "y", "z" 인수를 전달하지 못한다.수정한 PintOS쓰레드 이름이 "ehco"이다.파일이름이 "echo"이름을 가진 프로그램을 찾는다.유저스택에 인주들을 푸시한다.스레드 이름과, file_name을 식별하고 인수들을 user stack에 push한다.수정해아할 함수pintos-kaist/userprog/process.*process_create_initdpr..

목표유저모드에서 프로그램을 실행한다. 초기 PintOS는 유저 프로그램을 실행할 수 없다PintOS 프로세스 실행과정1. OS는 프로세스를 실행하기위해 인수를 받는다.2. 인수를 받은다음 process_create_initd함수를 호출한다.3. process_wait는 아무 작업을 하지않고 반환하고 있다.PintOS 구현사항init 프로세스의 id는 0이고 모든 프로세스의 부모프로세스가 된다.현재 핀토스는 프로세스를 생성하고 스케쥴링한뒤 그냥 종료하고 있다.init 프로세스 즉 운영체제가 종료하면 생성된 프로세스를 실행 시킬 수 없다process_wait함수는 자식이 생성되고 완료될때까지 기다려야한다.process_create_initdprocess_create_initd함수는 file_name을 인자..