ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Process Management와 System Call
    Computer Science/Operating System 2021. 6. 13. 02:57

    모든 프로세스는 부모-자식 관계를 지닌다.
    프로세스의 생성에는 처음부터 새로 생성하는 방식과, 부모 프로세스를 복제해서 생성하는 방식이 있다.
    프로세스를 처음 생성할 때 에는 프로그램 코드와 데이터를 메모리에 적재하고, 새로운 PCB를 생성하여 초기화하고, 프로세스를 Ready Queue에 enqueue한다.
    프로세스를 복제할 때 에는 기존 프로세스를 부모(Parent) 프로세스, 새로운 프로세스를 자식(Child) 프로세스의 관계를 가진다.

    • 복제와 동시에 현재 실행중이던 프로세스를 중단하고 상태를 저장
    • 부모 프로세스의 PCB를 복사해서 새로운 PCB를 생성한 뒤 Ready Queue에 추가
    • Linux) fork() 함수 사용

    출처: 충북대학교 소프트웨어학과 운영체제 강의자료 / Soloris 프로세스 트리

    부모 프로세스는 여러 자식 프로세스를 가질 수 있기 때문에 그림과 같은 트리 형태로 표현할 수 있다.
    프로세스는 고유한 PID(Process Identification Number)를 가진다. 위의 그림을 보면 자식 프로세스의 PID는 부모 프로세스의 PID보다 큰 것을 알 수 있다.

    부모-자식 프로세스의 관계는 두 가지 기준으로 분류할 수 있다.

    • Resource Sharing:
      • 부모-자식 간에 모든 자원을 공유하는 모델
      • 자식 프로세스가 부모 프로세스의 일부 자원을 공유하는 모델
      • 서로 별개의 자원을 공유하는 모델
    • Execution:
      • 부모와 자식 프로세스가 병행 실행
      • 부모 프로세스가 자식 프로세스의 terminate까지 wait하는 모델

    부모 프로세스가 복제될 경우, 자식 프로세스는 부모 프로세스의 주소공간을 복사하고 새로운 프로그램을 올린다.

     

    시스템콜 이란?

    운영체제의 특성 상 커널 / 응용 프로그램이 CPU에 대해 갖게 되는 권한 및 접근 능력이 다르다. 시스템콜은 응용 프로그램이 운영체제의 커널이 제공하는 서비스에 접근하기 위해 사용하는 인터페이스이다. 직접 시스템을 호출할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.

    시스템콜의 기능

    1. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있다.
    2. 시스템콜을 호출하면 사용자 모드에서 커널 모드로 바뀐다.
    3. 커널에서 시스템콜을 처리한 뒤에는 커널 모드에서 다시 사용자 모드로 전환되어 작업을 지속할 수 있다.

     

    Unix에서 프로세스의 제어에 사용되는 시스템콜

    • fork() : 새로운 프로세스를 복제하여 생성
    • exec() : 복제된 영역에 새로운 프로그램을 복사
    • exit() : 프로세스가 마지막 명령을 수행한 후 운영체제에게 알림 - 자발적
      • 자식 프로세스가 부모 프로세스에게 output data를 보낸다(via wait)
      • 명시적으로 적지 않아도 main 함수가 return되는 위치에 컴파일러가 삽입한다
      • 프로세스의 자원들이 OS에게 반납된다
    • abort() : 부모 프로세스가 자식 프로세스의 수행을 종료시킨다 - 비자발적
      • 자식 프로세스의 자원 할당 한계치를 초과했거나 task가 불필요할 때
      • 부모 프로세스가 종료(exit)되는 경우(root process부터 계층적으로 내려가며 leaf부터 종료)
      • 키보드로 kill, break 등을 입력한 경우


    + copy-on-write : write가 발생하기 전에는 부모 프로세스의 자원을 그대로 공유하고 있다가 이후에는 copy해서 독자적으로 소유하는 리소스 관리 기법

    fork() system call example

     

    wait() system call example

    • 커널은 child가 종료될 때 까지 process A를 sleep(block)상태로 전환한다
    • child가 종료되면 커널은 process A를 깨운다(ready 상태로 전환)

     

    프로세스 간 협력

    기본적으로 프로세스들은 고유한 주소공간을 가지며, 원칙적으로는 다른 프로세스의 수행에 영향을 미치지 못한다
    하지만 프로세스 협력 메커니즘이 존재하여 간접적으로 영향을 미칠 수 있는 방법이 존재한다.

    IPC(Inter Process Communication)

    • 메시지를 전달하는 방법
      • message passing - 커널을 통해 메시지를 전달
        • 공유 변수 X
        • Direct/Indirect
    • 주소 공간을 공유하는 방법
      • shared memory - 서로 다른 프로세스 간에도 일부 주소 공간 공유
      • thread - 하나의 프로세스라서 IPC라고 볼 수는 없지만 thread간에는 주소 공간을 공유하므로 협력 관계로 볼 수 있다
Designed by Tistory.