프로세스의 생성
프로세스는 부모 프로세스에 의해 만들어져 자식 프로세스가 만들어지는 구조이다 (최상단 부모 프로세스는 init 프로세스로 부팅 과정에서 커널에 의해 생성되는 첫 번째 사용자 공간 프로세스). 이렇게 되다보니 자연적으로 프로세스 트리가 형성된다. 이때 자식 프로세스끼리는 자원을 공유하기도 하지만 보통은 서로 독립적인 프로세스로 CPU를 두고 경쟁하지 기타 자원 공유는 잘 하지 않는다.
프로세스가 생성될 때 자식 프로세스는 부모프로세스의 공간을 복사하고 자신만의 데이터를 위에 올리게된다. 여기서 복제는 fork() 메서드에 의해, 복제한 데이터 위에 자기 데이터를 올리는건 exec() 메서드로 시스템 콜을 하여 새로운 프로그램에 메모리를 올리게 된다.
프로세스의 종료 (Termination)
보통 exit() 메서드를 통해 시스템 콜을 하면 프로세스가 종료된다. (자식)프로세스가 종료되면 부모에게 output data를 보내게 된다. 이렇게 output data들은 모두 운영체제에게 반납하는 순서를 거치게된다. 만약 프로세스 내부가 아닌 외부에서, 부모프로세스가 자식프로세스를 종료시킬 때는 abort() 시스템 콜을 실행시킨다. 이러한 경우는 보통 자식이 할당 자원 한계치를 초과하거나 자식 태스크가 더이상 필요하지 않을경우에 사용된다.
Copy - on - write
리눅스와 같은 운체들은 약간의 최적화가 들어가 부모의 전체 데이터를 복사하는 것이 아닌 공유할 수 있는 부모데이터를 제외하고 자식프로세스의 공간을 만들게된다. 이때 리눅스의 작동방식은 write(쓰기) 작업이 들어갈 때 부모 프로세스 자원과 변화가 생기니 이 데이터를 복사해오고 쓰기 작업이 들어가지 않는 데이터는 부모데이터를 그대로 공유하는 방식으로 돌아간다. 이러한 방식을 copy-on-write라고 부른다.
wait() 시스템 콜
프로세스 관련 주요 시스템 콜에는 위와 같이 4가지가 있다. 앞서 fork() 와 exec() 에 대해 알아보았으니 이번에는 wait() 시스템 콜에 대해 알아보자
wait 시스템 콜은 말그대로 프로세스 진행을 멈추게한다. 위 예시를 보면 if 문을 통해 자식 프로세스인지 확인하고 이후 자식 코드를 실행시키고 만약 자식 프로세스가 아닌 경우 else문을 통해 wait() 시스템 콜을 호출한다. 이때 else 에는 자식 프로세스가 아닌 부모 프로세스 코드가 들어감으로써 커널은 자식이 종료될 때까지 부모를 잠깐 sleep시키게 한다. 만약 자식 프로세스가 끝나면 이후에 부모 프로세스가 다시 진행되도록 관리한다.
exit() 시스템 콜
프로세스 종료는 두 종류가 있다. 메인 호출을 한 후에 작업이 끝나서 exit 시스템 콜이 호출되고 자발적으로 죽는 것과 외부(부모)에서 자식 프로세스가 메모리를 초과한다거나 쓸모가 없어 죽이는 경우가 있다. 하지만 공통적인 것은 반드시 자식 프로세스의 exit()이 된 뒤에야 부모를 exit() 시킬 수 있다는 점을 기억하자 코드를 보자면 만약 위코드에서는 메인이 호출되고 프린트만 한 후에 프로세스가 바로 종료된다.
프로세스간 협력
프로세스는 독립적으로 수행되기도 하지만 협력적으로 수행되기도 한다. 프로세스간 협력하는 방법을 Interprocess Comunication(IPC) 라고 부른다. IPC에는 크게 두 가지 방법이 있다.
Message Passing
메세지 패싱은 프로세스 간에 서로 커널을 통해서 메세지를 전달하고, 받는 방식이다. (프로세스끼리 직접 메세지를 주고받을 순 없다)
메세지 패싱 방법은 목적지를 명시하는 Direct Communication과 누구한테 전달하지는 모르지만 메일박스or포트m에다 메세지를 넣고 먼저 메일박스를 열게되는 프로세스와 공유하는 방법인 Indirect Communication이 있다.
Shared Memory
원칙적으로 프로세스는 독자적인 주소공간(코드/데이터/스택)을 가지고 있지만 일부 주소 공간을 공유할 수 있게끔 할 수 있다. shared memory는 일부메모리를 공유하도록 매핑해서 사용하는 방식이다.
헷갈리지 말것은 스레드는 하나의 프로세스를 두고 여러 스레드가 협력하는 것이지 위와 같이 프로세스간에 협력하는 것과는 엄연히 다르다!
https://core.ewha.ac.kr/publicview/C0101020140321144554159683?vmode=f
반효경 [운영체제] 8. Process Management 1
설명이 없습니다.
core.ewha.ac.kr
'Computer Science > Operating System' 카테고리의 다른 글
Deadlocks (0) | 2024.06.07 |
---|---|
Process Synchronization (0) | 2024.06.04 |
CPU Scheduling (0) | 2024.06.02 |
Process (0) | 2024.05.31 |
System Structure & Program Execution (0) | 2024.05.28 |