[OS] 프로세스 관리

정의정·2023년 8월 31일
0

OS

목록 보기
6/6
post-thumbnail

💡 프로세스 관리

프로세스에 대해 배웠으니 이제 프로세스 관리에 대한 내용을 다뤄보겠다.

📌 순서

  1. 프로세스 생성(Process Creation)
  2. 프로세스 종료(Process Termination)
  3. 프로세스 시스템 콜(System Call)
  4. 프로세스 간 협력

🌟 프로세스 생성(Process Creation)

부모 프로세스가 자식 프로세스를 생성한다✔️

👉🏻 Parent process가 children process를 생성한다.
👉🏻 운영체제에 요청하여 자식 프로세스를 만든다.

프로세스의 트리(계층 구조) 형성✔️

프로세슨 자원을 필요로 한다✔️

👉🏻 운영체제로부터 자원을 받는다.
👉🏻 이례적인 경우 부모와 공유한다. 일반적으로 프로세스들은 자원을 두고 경쟁한다.

자원의 공유✔️

👉🏻 부모와 자식이 모든 자원을 공유하는 모델

👉🏻 일부를 공유하는 모델

👉🏻 전혀 공유하지 않는 모델

수행(Execution)✔️

👉🏻 부모와 자식은 공존하며 수행되는 모델이다.
👉🏻 자식이 종료(Terminate)될 때까지 부모가 기다리는(wait) 모델

주소 공간(Address space)✔️

👉🏻 자식은 부모의 공간을 복사한다. (binary and OS data): fork()
👉🏻 자식은 그 공간에 새로운 프로그램을 덮어 씌운다. : exec()


🌟 프로세스 종료(Process Termination)

프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려준다(exit)✔️

👉🏻 자식이 부모에게 Output data를 보낸다. (via wait)
👉🏻 프로세스의 각종 자원들이 운영체제에게 반납된다.

부모 프로세스가 자식의 수행을 종료시킨다(abort)✔️

👉🏻 자식이 할당 자원의 한계치를 넘어선 경우
👉🏻 자식에게 할당된 task가 더 이상 필요하지 않은 경우
👉🏻 부모가 종료(exit)하는 경우: 운영체제는 부모 프로세스가 종룔하는 경우 자식이 더 이상 수행되도록 두지 않는다. 단계적으로 종료한다.


🌟 프로세스 시스템 콜(System Call)

1. fork() 시스템 콜

👉🏻 자식 생성 요청 함수이다.
👉🏻 반환 값이 0보다 크면 부모 프로세스이고, 0이면 자식 프로세스이다.

int main() {
    int pid;
    pid = fork();
    if (pid == 0)
        printf("\n Hello, I am child!\n");
    else if (pid > 0)
        printf("\n Hello, I am parent!\n");
}

2. exec() 시스템 콜

👉🏻 새로운 프로그램으로 덮어씌우는 함수이다.

int main() {
    int pid;
    pid = fork();
    if (pid == 0) {
        printf("\n Hello, I am child! Now I'll run date \n");
        execlp("/bin/date", "/bin/date", (char*) 0);
    }
    else if (pid > 0)
        printf("\n Hello, I am parent!\n");
}

3. wait() 시스템 콜

👉🏻 프로세스 A가 wait() 시스템 콜을 호출하면 커널은 child가 종료될 때까지 프로세스 sleep 시킨다.(Blocked 상태)
👉🏻 Child process가 종료되면 커널이 프로세스 A를 깨운다.(Ready 상태)

int main() {
    int childePID;
    <코드1>
    childePID = fork();
    if (pid == 0)
        <자식 프로세스를 위한 코드>
    else if (pid > 0)
        wait();
    <코드2>
}

4. exit() 시스템 콜

자발적 종료

👉🏻 마지막 Statement 수행 후 exit() 시스템 콜을 통해 종료한다.
👉🏻 프로그램에 명시적으로 적어주지 않아도 main 함수가 return되는 위치에 컴파일러가 exit() 시스템 콜을 넣어준다.

비자발적 종료

👉🏻 부모 프로세스가 자식 프로세스를 강제 종료시킨다. (자식 프로세스가 한계치를 넘어서는 자원을 요청하거나 자식에게 할당된 task가 더 이상 필요하지 않은 경우)
👉🏻 키보드로 kill break 등을 친다.
👉🏻 부모가 종료하는 경우 자식들이 먼저 종료된다.


🌟 프로세스 간 협력

1. 독립적 프로세스(Independent process)

프로세스는 각자의 주소 공간을 가지고 수행되므로 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못한다.

2. 협력 프로세스(Cooperating

프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있다.

3. 프로세스 간 협력 메커니즘(IPC: Interprocess Communication)

스레드는 사실 상 하나의 프로세스이므로 프로세스 간 협력이라고 보기는 어렵지만 동일한 프로세스를 구성하는 스레드 간에는 주소 공간을 공유하므로 협력이 가능하다.

그렇다면 서로 다른 프로세스 간 협력 메커니즘에는 무엇이 있을까?

메시지를 전달하는 방법✔️

👉🏻 Message passing: 커널을 통해 메시지를 전달한다.

👉🏻 Direct Communication: 통신하려는 프로세스의 이름을 명시적으로 표시한다.
👉🏻 Indirect Communication: Mailbox(또는 port)를 통해 메시지를 간접적으로 전달한다.

주소 공간을 공유하는 방법✔️

👉🏻 Shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 Shared memory 메커니즘이 있다.


📖 교재 및 출처

  • A. Silberschatz et al., Operating System Concepts, 9th Edition, John Wiley & Sons, Inc. 2013.
  • A. Silberschatz et al., Operating System Principles, Wiley Asia Student Edition
  • 반효경님, 운영체제와 정보기술의 원리
profile
배움 기록

0개의 댓글