ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SW 정글 64일차] 프로세스의 제어
    기타/SW 사관학교 정글 2021. 10. 6. 02:56

    오늘은 컴퓨터 시스템 8장을 모두 읽고 정리하고 싶은 내용들을 여기에 정리하려고 한다.

    아마 이 개념들이 이번 project2를 진행하는 데 있어 중요한 개념들이 될 것이라고 생각한다.

     

     

     

    Unix는 프로세스를 제어하기 위한 많은 시스템 콜을 제공하는데 어떠한 시스템 콜들이 있는지 알아보자.

     

    1. 프로세스 ID 가져오기

    마치 사람들이 고유의 주민번호를 가진 것처럼 프로세스들은 각자의 ID를 가지고 있다.

    시스템 콜로 프로세스의 ID를 알 수 있는데 getpid()는 이 함수를 호출한 프로세스의 ID를 리턴한다.

    그리고 getppid()는 함수를 호출한 부모 프로세스의 ID를 리턴한다.

    #include <sys/types.h>
    #include <unistd.h>
    
    pid_t getpid(void);
    pid_t getppid(void);

     

     

     

     

    2. 자식 프로세스 생성

    부모 프로세스는 fork함수를 통해 자식 프로세스를 생성한다.

    #include <sys/types.h>
    #include <unistd.h>
    
    pid_t fork(void);

    자식 프로세스는 코드, 데이터, 힙, 공유 라이브러리, 사용자 스택을 포함하는 부모 프로세스의 가상 주소공간과 동일한 복사본을 갖는다.

    여기서 동일하다는 의미는 내용만 동일하다는 것이지 한 주소공간을 공유한다는 말이 아니다.

    서로 독립적인 주소공간을 가진다.

    또한, 부모 프로세스가 open한 모든 파일 식별자와 동일한 사본을 갖는다.

    가장 중요한 점은 부모 프로세스와 새롭게 생성된 자식 프로세스의 PID가 서로 다르다는 것이다.

     

    fork 함수의 신기한 점은 한 번 호출을 했는데 두 번의 리턴이 생긴다는 것이다.

    한 번은 fork를 호출한 부모 프로세스에서 자식의 PID를 리턴하고 다른 한 번은 자식 프로세스에서 0을 리턴한다.

     

     

     

     

    3. 프로그램의 로딩과 실행

    현재 프로그램의 컨텍스트 내에서 새로운 프로그램을 로드하고 실행하는 시스템 콜로 execve가 있다.

    #include <unistd.h>
    int execve(const char *filename, const char *argv[], const char *envp[])

    뭔가 그냥 내 감은 구글플레이스토어에서 어플을 설치받고 실행하는 버튼을 눌렀을 때 execve 시스템 콜이 호출된다고 느껴진다.

    두 번 리턴하는 fork와는 달리 execve는 파일 이름(const char *filename)을 찾을 수 없는 에러가 있는 경우에만 호출하는 프로그램으로 리턴한다.

     

    execve가 filname을 로드한 후에 _start 함수를 통해 실행 환경을 초기화하고 user mode로 main함수를 호출한다.

    main이 실행되기 시작하면 사용자 스택이 구성되고 main으로 가는 세 개의 인자가 존재한다.

    (1) argc, argv[] 배열에 null이 아닌 포인터들의 수

    (2) argv, argv[] 배열에서 첫 항목의 포인터

    (3) envp, envp[] 배열에서 첫 항목의 포인터


    [오늘의 나는 어땠을까?]

    이제 Pintos project 2 주차를 들어간지 이틀 째이다.

    팀원과 어떻게 진행할지 얘기를 해봤을 때, 일단은 운영체제에 대한 개념을 잡는 것을 우선시하고 그 다음에 project 과제를 진행하기로 했다.

    이번 project 과제를 해결하기 위해 필요할 것같은 개념들을 공부 중이긴한데 속도가 느려 얼마 공부 못하고 있는 느낌이 들어 아쉬운 하루들을 보내는 느낌이다.

    당연히 책을 읽고 한 번에 팍팍 이해되는 사람들은 극소수이겠지만 지금 나에게 주어진 시간이 얼마 안되니 그런 사람이였으면 너무 좋을 것같다.

    일단은 나는 나이니까 지금의 상태에서 최선을 다해야한다.

    불안한 마음을 이겨내며 느리더라도 언젠가는 원하는 위치에 오를 수 있을 것이다.

    그리고 점점 빨라질 수 있는 스킬도 배우지 않을까..

     

    댓글

Designed by Tistory.