[PintOS - Week09-10] WIL

Junyeong Fred Kim·2022년 1월 11일
0

운영체제

목록 보기
15/27

WIL Keyword

  • Argument Passing & x86-64 Calling Convention
  • System Call (Syscall handler, Syscall, exception, register):
    - user mode, kernel mode
    • halt, exit, fork, exec, wait, create, remove, open, filesize, read, wirte, seek, tell, close, dup2
  • User memory access & Denying writes executables

Argument Passing

🎯 과제 목표

  • 커맨드 라인에서 명령어의 실행

📢 과제 설명

  • 커맨드 라인의 문자열을 토큰으로 분리하는 기능 개발
    Pintos는 프로그램과 인자를 구분하지 못하는 구조
    예) $ls –a Pintos는 'ls -a'를 하나의 프로그램명으로 인식
  • 프로그램 이름과 인자를 구분하여 스택에 저장, 인자를 프로그램에 전달

생성된 kernel thread에서 process를 실행시키는 process exec함수는 구현되어 있다. 하지만 몇 가지 문제가 남아있었다.

  • commnad line을 통해 전달되는 명령어가 실행파일, 인자값으로 parsing되어 전달되지 않음.
  • parsing 후 실행파일 load 및 return address & argument가 x86-64 Calling Convention에 맞추어 전달되어야 한다.

예를 들어, 실행에 필요한 인자값이 2개인 프로세스가 로드되고 실행될 떄, filename arg1 arg2와 같은 형태로 명령어에 입력된다. 명령어들이 적재적소에 들어가게 만들어야 한다.

strtok_r (char *s, const char *delimiters, char **save_ptr) 

string을 delimeter 기준으로 나누어 하나씩 return한다. return된 문자들을 token이라고 부르는데, **save_ptr에는 반납된 token 다음 토큰의 메모리 주소를 가리키는 값이 저장된다.

int argc = 0 ;
char * save_ptr, *token;
char * argv[128];
void *rsp;

token = strtok_r(file_name, " ", &save_ptr);
while (token != NULL)

{
    argv[argc] = token;
    token = strtok_r(NULL, " ", &save_ptr);
    argc++;
}

parsing 완료 후 실행에 필요한 인자값들을 필요에 맞게 stack에 쌓아야한다. PINTOS 에서는 x86-64 Calling 'Convention'에 맞추어 삽입한다. Convention이기 때문에 다른 운영체제 혹은 아키텍쳐에서 적용되는 다른 convention도 있을 수 있겠다고 생각했지만 알아보진 않았다. 암튼 convention이기 때문에 왜 이렇게 쌓냐는 의문은 넣어두고 그냥 규범에 맞추어 넣으면 된다. 초기화된 스택영역은 0x47480000 에서 시작했다. 하기와 같이 넣어주면 놀랍게도 실행된다. 규범을 어기면 실행이 안된다.

하기와 같은 순서로 쌓아주면 된다. USERSTACK으로 정의된 0x47480000 부터 argument / address / return address

System call

🎯 과제 목표

  • 시스템 콜 핸들러 및 시스템 콜 구현

📢 과제 설명

  • Pintos는 시스템 콜 핸들러가 구현되어 있지 않아 시스템 콜이 호출될 수 없으므로 응용 프로그램이 정상적으로 동작하지 않는다.
  • 사용자는 Pintos의 시스템 콜 매커니즘을 이해하고 시스템 콜 핸들러를 구현한다.
  • 시스템 콜을 구현하고 시스템 콜 핸들러를 통해 호출한다.

시스템 콜 핸들러 구현-1
시스템 콜 핸들러 구현-2
시스템 콜 핸들러 구현-3

User Mode와 Kernel Mode

한번 더 보고 자세히 정리할 것

Pintos Projects: Project 2--User Programs

profile
기억보다 기록

0개의 댓글