[Pint OS] System Calls (3)

2023. 6. 11. 17:19·프로젝트/Pint OS

x86-64 기반 Pint OS 프로젝트 2의 System Calls를 구현하기 위해 공부한 개념을 정리한다.

exec

정의

int exec (const char *cmd_line);

현재 실행 중인 프로세스를 cmd_line으로 주어진 실행 파일로 바꾼다. exec 함수가 성공하면 리턴되지 않는다. 어떤 오류가 발생해서 실패한다면 exit (-1)을 호출해서 현재 프로세스를 종료시킨다. exec 함수는 현재 실행 중인 프로세스(스레드)의 이름을 바꿀 필요는 없다. exec 함수를 호출해도 fd(file decriptor)는 열린 상태를 유지한다!

구현 시 어려웠던 점

exec 시스템 콜의 정의를 이해하기 어려웠다. 자식 프로세스를 새로 만들어서 실행 파일을 실행시키는 건지, 아니면 현재 프로세스를 덮어 씌우고 실행하는 건지 해석이 난해했다. 특히 Pint OS의 학습 자료 중 한양대 핀토스 강의 자료에서는 exec가 fork 기능을 포함하고 있어서 더욱 헷갈렸다. 그러나 exec와 fork를 분리시키는 것이 정답이었다.

프로세스를 실행시키는 함수를 직접 구현해야 하나 걱정했었는데, process_exec() 함수를 사용하면 된다.

구현은 다 했었는데 계속해서 터져버려서 원인을 찾아보니 palloc 선언을 안 해줬다...

// userprog/syscall.c
#include "filesys/filesys.h"

exec ()

// userprog/syscall.c
int
exec (const char *cmd_line) {
    check_address (cmd_line);
    char *file_name = (char *)palloc_get_page (PAL_ZERO);
    if (file_name == NULL)
        exit (-1);
    memcpy (file_name, cmd_line, strlen (cmd_line)+1);

    if (process_exec (file_name) == -1) 
        exit (-1);
}
  • 먼저 유저 프로그램에게서 받은 인자 cmd_line이 유효(valid)한지 체크한다.
  • cmd_line은 유저 영역에 존재하지만, file_name은 커널 영역에 생성해주어야 한다.
    • 따라서 palloc 라이브러리로 새 페이지를 할당한 후 cmd_line을 복사시켜 준다.
  • process_exec (file_name)을 호출한다.
    • 성공하면 리턴되지 않을 것이고, 실패하면 리턴받고 exit (-1)으로 바로 종료된다.

 

출처

  • Kaist Pint OS GitBook - System Calls

'프로젝트 > Pint OS' 카테고리의 다른 글

[Pint OS] System Calls (5)  (1) 2023.06.14
[Pint OS] System Calls (4)  (0) 2023.06.11
[Pint OS] System Calls (2)  (0) 2023.06.11
[Pint OS] 에러: missing "begin" message  (0) 2023.06.09
[Pint OS] System Calls (1)  (0) 2023.06.07
'프로젝트/Pint OS' 카테고리의 다른 글
  • [Pint OS] System Calls (5)
  • [Pint OS] System Calls (4)
  • [Pint OS] System Calls (2)
  • [Pint OS] 에러: missing "begin" message
KimCookieYa
KimCookieYa
무엇이 나를 살아있게 만드는가
  • KimCookieYa
    쿠키의 주저리
    KimCookieYa
  • 전체
    오늘
    어제
    • 분류 전체보기 (573) N
      • 혼잣말 (87)
      • TIL (2)
      • 커리어 (24)
        • Sendy (21)
        • 외부활동 기록 (2)
      • 프로젝트 (186)
        • 티스토리 API (5)
        • 코드프레소 체험단 (89)
        • Web3 (3)
        • Pint OS (16)
        • 나만무 (14)
        • 대회 (6)
        • 정글 FE 스터디 (16)
        • MailBadara (12)
        • github.io (1)
        • 인공지능 동아리, AID (5)
        • 졸업과제 (18)
        • OSSCA 2024 (1)
      • 크래프톤 정글 2기 (80)
      • IT (168) N
        • 코딩 (4)
        • CS (18)
        • 에러 (5)
        • 블록체인 (23)
        • Front-End (39) N
        • 알고리즘&자료구조 정리 (3)
        • 코딩테스트 (3)
        • BOJ 문제정리 (41)
        • WILT (12)
        • ML-Agents (4)
        • 강화학습 (1)
        • Android (0)
        • LLM (2)
      • 전공 (1)
        • 머신러닝 (1)
      • 자기계발 (20)
        • 빡공단X베어유 (2)
        • 독서 (15)
  • 블로그 메뉴

    • 홈
    • 방명록
    • Github
    • Velog
    • 관리
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    졸업과제
    니어프로토콜
    자바스크립트
    코드프레소
    핀토스
    위상정렬
    파이썬
    react
    크래프톤정글
    머신러닝
    JavaScript
    Flutter
    알고리즘
    딥러닝
    글리치해커톤
    MailBadara
    해커톤
    리액트
    docker
    나만무
    블록체인
    Pint OS
    pintos
    RNN
    NEAR Protocol
    OS
    numpy
    부산대
    프로그래머스
    사이드프로젝트
  • hELLO· Designed By정상우.v4.10.3
KimCookieYa
[Pint OS] System Calls (3)
상단으로

티스토리툴바