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을 인자..
목표Alarm Clock기능을 구현해 쓰레드를 일정시간(ticks) 대기상태에서 준비상태로 전환시킨다.Alarm ClockAlarm Clock은 지정된 시간(tick)에 스레드를 깨우는 기능이다. 특정 시간 후에 작업을 수행해야 하는 경우 (예: 주기적인 작업, 타임아웃 처리 등)에 사용할 수 있다.도출과정초기 Pintos의 timer_sleep기능은 일정 시간(tick)동안 실행상태의 쓰레드를 지속적으로 준비상태로 바꾸는 busy wait 방식이다.이를 해결하기 위해 쓰레드를 대기(block)상태로 전환뒤 다른 컨텍스트들을 실행하다 깨워야하는 시간이 됐으면 unblock하는 방식으로 구현을 진행한다.대기(block)상태의 쓰레드를 unblock시킬 컨텍스트가 필요하다 timer인터럽트는 매 tick발생..
Process와 ThreadProcessProcess는 실행 중인 프로그램의 인스턴스를 말합니다. 프로세스는 운영체제로부터 시스템 자원을 할당받아 독립적으로 실행되는 단위이며, 각 프로세스는 자신만의 메모리 공간과 시스템 자원을 가진다.ThreadThread는 프로세스 내에서 실행되는 작업의 단위로, 경량 프로세스(Lightweight Process)라고도 불린다. 한 프로세스 내에서 여러 개의 Thread가 동시에 실행될 수 있으며, 각 Thread는 독립적인 실행 흐름(Context)을 가진다.참고쓰레드와 프로세스 Context SwitchingContext Switching(문맥 교환)은 CPU가 한 프로세스 또는 스레드의 실행에서 다른 프로세스 또는 스레드의 실행으로 전환하는 과정을 말한다 이 과..
개발환경 구축가상환경Ubuntu 18.04우분투 18.04를 실행하기 위해 세가지 선택지가 있었다AWS EC2MS AZUREDocker우선 도커는 내 환경이 ARM기반 맥북이어서 설정이 매우 번거로워서 세팅할 시간을 돈으로 사야겠다 생각해서 클라우드서비스를 이용하기로했다.처음에는 EC2를 사용했지만 우분투 18.04가 부분 무료여서 한달간 핀토스를 하게되면 5만원 이상 나올것 같아서 일주일 사용하고 azure로 갈아탔다.Azure는 1위 업체가 아니기 때문에 저렴하고 가상머신 내렸다가 올렸을때 ec2와는 다르게 ip변동이 없어 azure를 사용하게 됐다. 개발툴SFTP클라우드를 사용하면서 불편했던점이 내 로컬에서 코드를 작성하고 가상환경에서 테스트를 하는데 불편함이 있었다 처음에는 SFTP를 사용했는데 ..