목차
프로세스
프로세스 생성
- 프로세스가 또 다른 프로세스를 만든다
- 부모 프로세스가 자식 프로세스 생성
- fork(복제 생성)하여 생성
- 프로세스의 트리(계층 구조) 형성
- 프로세스는 자원을 필요로 함
- 운영체제로부터 공급 받는다.
- 부모와 공유한다.
- 자원 공유 방식
- 1. 부모와 자식이 모든 자원을 공유하는 모델
- 2. 일부를 공유하는 모델
- 3. 전혀 공유하지 않는 모델
- 수행(Execution)
- 부모와 자식은 공존하며 수행되는 모델
- 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델
- 부모 프로세스가 자식 프로세스 생성
- 주소 공간 (Address space)
- 자식은 부모의 공간을 그대로 복사함 (binary and OS data)
- 자식은 그 공간에 새로운 프로그램을 올림
- 유닉스의 예
- fork() 시스템 콜이 새로운 프로세스를 생성
- 부모를 그대로 복사 (OS data except PID + binary)
- 주소 공간 할당
- fork 다음에 이어지는 exec() 시스템 콜을 통해 새로운 프로그램을 메모리에 올림
- fork() 시스템 콜이 새로운 프로세스를 생성
프로세스와 관련한 시스템 콜
fork() 시스템 콜
- 현 프로세스(부모)와 동일한 구조를 가진 프로세스(=자식)를 하나 더 생성한다.둘은 별개의 프로세스이다.(context 복사함)
- 자식 프로세스의 새 주소 공간을 생성한다.
- fork()를 하면 새로운 프로세스(자식)가 생성된다.
- PID == 0이 아니면 부모프로세스고, PID == 0이면 자식프로세스이다.
exec() 시스템 콜
- 현 프로세스는 exec 시스템 콜에 의해 다른 프로세스로 대체된다.(덮어쓴다)
- PID는 동일
- EX.
- 자식 프로세스에게 다른 프로그램을 돌리게 하고 싶을 때 씀
- fork() → exec()
- 프로그램 갱신 및 업데이트, 새로운 프로그램 실행
- execlp(“cp”, “cp”, “A”, “B”, (char*) 0);
- (프로그램 이름 1, 2 , 프로그램에게 전달할 argument)
- 자식 프로세스에게 다른 프로그램을 돌리게 하고 싶을 때 씀
wait() 시스템 콜
- 프로세스 A가 wait() 시스템 콜을 호출하면
- 커널은 자식 프로세스가 종료될 때까지 부모 프로세스를 sleep시킨다.(block 상태)
- 자식 프로세스가 종료되면 커널은 부모 프로세스를 깨운다. (ready 상태)
- 이제서야 cpu를 얻을 수 있다.
- 사용하는 상황
- Linux에서 Command를 입력하면 자식 프로세스로 처리한다. 이 때, 부모 프로세스는 wait()하여 block되고 자식 프로세스가 종료될 때까지 sleep된다.
exit() 시스템 콜
- 프로세스 종료시키는 시스템 콜이다.
- 분류
- 자발적 종료
- 명시적으로 코드 끝에 적어주지 않아도 main함수가 리턴되는 위치에 컴파일러가 넣어준다.
- 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- kill, break 등을 친 경우
- 부모가 종료하는 경우
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자발적 종료
- 명시적으로 쓰지 않아도 기본
프로세스의 독자적 동작
서로 관여하지 않는다.
프로세스 간 협력
- 독립적 프로세스
- 프로세스 각 주소 공간(stack,data,code)을 가지고 수행. 서로 영향X
- 협력 프로세스
- 프로세스 협력 메커니즘으로 서로에게 영향O
- 프로세스 간 협력 메커니즘(IPC: Interprocess Communication
- 1. 메시지 전달 방법
- message passing: 커널을 통해 메시지 전달
- 2. 주소 공간 공유 방법
- shared memory: 서로 다른 프로세스 간 일부 주소 공간 공유
- 1. 메시지 전달 방법
thread는 동일한 프로세스를 구성하는 쓰레들 간 주소 공간 공유하여 협력이 더 쉬운편
통신 방식
- 프로세스 A가 커널에게 메시지 전달
- 커널이 프로세스 B에게 메시지 전달
Message Passing
- Message System
- 프로세스 간 공유 변수를 사용하지 않고 통신
- Direct Communication
- 통신하는 프로세스의 이름을 명시적으로 표시
- Indirect Communication
- 통신하는 프로세스의 이름을 명시적으로 표시하지 않고, mailbox(또는 port)를 통해 메시지 간접 전달
'운영체제(OS) & Network' 카테고리의 다른 글
프로세스(Process) (1) (0) | 2023.09.18 |
---|---|
쓰레드(Thread) (0) | 2023.09.14 |
스케줄러(Scheduler) (0) | 2023.09.13 |
데드락(Deadlock) (0) | 2023.09.05 |
운영체제 (0) | 2023.09.04 |