2025. 4. 12. 01:37ㆍ개발/💻 CS 지식
프로세스 생성 ( Process Creation )
프로세스 생성 개요
- 부모 프로세스가 자식 프로세스 생성
: 시스템콜을 통해 프로세스가 수행하지 못하는 작업들(PCB 복사, Memory 지정 등)을 수행
- 프로세스의 트리(계층 구조) 형성
- 프로세스는 자원을 필요로 함
: ( 1 ) 운영체제로부터 받는다 ( 2 ) 부모와 공유한다
- 자원의 공유
: ( 1 ) 부모와 자식이 모든 자원 공유 ( 2 ) 일부를 공유 ( 3 )전혀 공유하지 않음
- 수행
: ( 1 ) 부모와 자식이 공존하며 수행되는 모델 ( 2 ) 자식이 종료가 될 때까지 부모가 기다리는(wait, blocked) 모델
주소 공간(Address Space)
- 자식은 부모의 공간을 그대로 복사함 (binary, OS data) : fork()
- 자식은 필요 시 그 공간에 새로운 프로그램을 덮어씌움 : exec()
프로세스 종료 ( Process Termination )
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌 : exit()
: 자식이 부모에게 output data를 보냄
: 프로세스의 각종 자원들이 운영체제에게 반납됨
- 부모 프로세스가 자식의 수행을 종료시킴 : abort()
: 자식이 할당 자원의 한계치를 넘어섬
: 자식에게 할당된 태스크가 더 이상 필요하지 않음
: 부모가 종료하는 경우 -> 단계적 종료 (자식을 먼저 종료시킨 뒤 부모 종료)
시스템콜 (System Call)
fork() 시스템콜
: 새로운 프로세스(자식 프로세스) 생성
이때 자식 프로세스는 OS data(code, stack, data)를 그대로 복제하기 때문에
부모 프로세스가 코드를 어디까지 수행했는지에 대한 정보를 가지고 있으며
부모가 실행한 코드의 뒷부분부터 실행한다
부모 / 자식 프로세스 구분
: 부모의 process id 는 0보다 크고, 자식의 process id는 0이다
: 이때 process id는 fork()의 반환값을 통해 얻을 수 있다
int main()
{
int pid;
pid = fork(); // 자식 프로세스 생성
///// 자식 프로세스는 여기서부터 코드 실행 //////
if (pid == 0) // 자식 프로세스일 경우
print("\nHello I'm child\n");
else if (pid > 0 ) // 부모 프로세스일 경우
print("\n Hello I'm parent\n");
}
exec() 시스템콜
: 새로운 프로그램으로 덮어씌우기
: 보통 자식 프로세스는 fork()로 생성된 뒤 바로 exec()을 통해 새로운 프로그램으로 덮어씌워진다
int main()
{
int pid;
pid = fork(); // 자식 프로세스 생성
///// 자식 프로세스는 여기서부터 코드 실행 //////
if (pid == 0) // 자식 프로세스일 경우
{
print("\nHello I'm child\n");
exelp("/bin/date", "bin/date", (char *)0); // 새로운 프로그램으로 덮어씌우기
}
////// 자식 프로세스는 exelp() 이후의 코드를 실행하지 않음 //////
else if (pid > 0 ) // 부모 프로세스일 경우
print("\n Hello I'm parent\n");
}
wait() 시스템콜
: 자식 프로세스가 종료될 때까지 부모 프로세스를 sleep시키기(blocked 상태)
: 자식 프로세스가 종료되면 부모 프로세스를 다시 깨움(ready 상태)
wait()를 안 하면 자식과 부모는 자원을 가지고 계속 경쟁하는 상태,
따라서 자식이 주도적으로 실행되어야 하는 환경에서 부모를 sleep 시키는 것임
exit() 시스템콜
: 프로세스 종료시키기
자발적 종료
- 마지막 statement 수행 후 exit()을 통해 종료
- 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣음
비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원을 요청할 경우
- 자식에게 할당된 태스크가 더이상 필요하지 않을 경우
- 키보드로 kill, break 등을 친 경우
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
프로세스 간 협력
독립 프로세스
: 일반적으로 서로 다른 프로세스는 자원을 서로 차지하려고 하는 일종의 경쟁 관계
: 또한 각자의 주소 공간을 가지며 다른 프로세스의 수행에 영향을 끼치지 못하되므로 독립적인 관계
협력 프로세스
: 서로간의 자원 공유가 필요한 상황이 발생하기도 함
: 이때 프로세스 간 협력이 불가피
프로세스 간 협력 메커니즘 (IPC : Interprocess Communication)
- Message Passing : 커널을 통해 메시지(공유가 필요한 자원) 전달
- Direct Communication : 통신하려는 프로세스의 이름 명시적으로 표시 (어떤 프로세스한테 줄건지)
- Indirect Communication : mailbox(or port)를 통해 메시지를 간접 전달 (아무 프로세스나 들여다 볼 수 있음)
- Shared Memory : 일부 주소 공간을 공유
'개발 > 💻 CS 지식' 카테고리의 다른 글
[ 운영체제 ] Process Synchronization ( 1 ) (0) | 2025.04.17 |
---|---|
[ 운영체제 ] CPU Scheduling (0) | 2025.04.13 |
[ 운영체제 ] Process (0) | 2025.04.01 |
[ 운영체제 ] 컴퓨터 시스템 구조 & 프로그램의 실행 (0) | 2025.03.22 |
[ 운영체제 ] 운영 체제 개요 (0) | 2025.03.10 |