
PintOS에서 Argument Passing은 프로세스가 실행될 때 프로그램 이름과 인자들을 전달하는 메커니즘을 의미합니다. 이를 통해 실행 중인 프로세스는 명령행에서 인자로 전달된 값을 사용할 수 있습니다. 아래에서 Argument Passing이 어떻게 이루어지는지 간단히 설명하겠습니다.
Argument Passing은 프로세스 간 정보 공유와 사용자 입력을 받아들이는 등의 다양한 시나리오에서 유용하게 활용될 수 있습니다. 인자들을 명확하게 전달하고 프로세스가 필요한 값을 액세스할 수 있도록 하는 것은 프로그램의 유연성과 기능성을 높일 수 있는 중요한 요소입니다
오늘은 오후에 본가에 다녀오느라 길게 공부하지 못해서 수정한 코드부분을 올리겠습니다
static bool
load (const char *file_name, struct intr_frame *if_) {
...
/* TODO: Your code goes here.
* TODO: Implement argument passing (see project2/argument_passing.html). */
char *arg_list[128]; // 인자를 저장할 배열
char *token, *save_ptr; // 토큰화를 위한 변수들
int token_count = 0; // 토큰의 개수를 세는 카운터
token = strtok_r(file_name, " ", &save_ptr); // 첫 번째 인자를 토큰화
arg_list[token_count] = token; // 토큰을 인자 배열에 저장
while(token!=NULL){
token = strtok_r(NULL, " ", &save_ptr); // 다음 토큰을 토큰화
token_count++;
arg_list[token_count] = token; // 토큰을 인자 배열에 저장
}
...
위의 코드는 file_name 문자열을 공백을 기준으로 분리하여 arg_list 배열에 저장하는 과정을 나타내고 있습니다. 각 줄의 코드를 설명하면 다음과 같습니다:
char *arg_list[128];
char *token, *save_ptr;
token = strtok_r(file_name, " ", &save_ptr);
arg_list[token_count] = token;
while(token!=NULL) { ... }
이렇게 코드를 실행하면 file_name 문자열을 공백을 기준으로 분리하여 arg_list 배열에 각각의 인자들이 저장되게 됩니다. 예를 들어, 만약 file_name이 "hello world pintos"라면, arg_list[0]에는 "hello", arg_list[1]에는 "world", arg_list[2]에는 "pintos"가 저장됩니다. 이후 arg_list 배열을 활용하여 인자들을 필요로 하는 다른 코드로 전달할 수 있습니다.