IT recording...
[OS] 4. 프로세스 시스템콜, 협력 - (3) 본문
[이화여자대학교 반효경 교수님의 강의를 듣고 정리한 글입니다.]
[그림과 함께 편하게 보려면 여기로]
https://adorable-aspen-d23.notion.site/OS-4-3-e40d2a8753a741289cad5e00340ca079
1. 프로세스 시스템콜
1. 프로세스 생성이란?
- 부모 프로세스가 자식 프로세스를 생성하는 것
- 프로세스의 트리(계층 구조)형성
- 사용자 프로그램이 직접 생성할 수는 없고, 운영체제에 부탁해야 한다. (시스템 콜)
- 보통 복제로 생성 후, 그 주소 공간에 새로운 프로그램 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
- 부모의 주소공간(Address Space)를 복사
- exec() : 새로운 프로그램을 메모리에 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
2. 부모-자식 프로세스 관계
1. 부모와 자식이 공존하며 수행되는 모델
- 부모와 자식이 경쟁함
- Copy-On-Write(COW)
- write 발생 전까지는 부모와 데이터를 공유하다가,
- write가 발생했을 때 copy를 한다. (이후에 자식만의 데이터 꾸려나감)
- Copy-On-Write(COW)
2. 자식이 종료(terminated)될 때까지 부모가 기다리는 (wait)모델
- 부모가 자식을 기다림
3. 프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌
1. exit() 시스템콜
- 항상 자식이 먼저 종료되고, 부모가 뒷처리를 담당
- 프로세스의 각종 자원들이 운영체제에게 반납됨
2. abort() 시스템콜
- 일 시키려고 자식 프로세스 생성했는데, 더 이상 시킬 일 없음
- 자식이 너무 자원 막씀
- 부모가 종료되어야 할 때 자식을 먼저 종료시켜야 함
4. 프로세스와 관련한 시스템콜
1. fork()
- 자식은 fork()가 일어난 이후 문맥부터 실행된다.
- 부모의 문맥을 복제하기 때문에 PC도 복제되기 때문
- pid : 부모와 자식 프로세스를 구분한다.
- 부모 : 양수 / 자식 : 0
2. exec()
- 새로운 프로그램으로 다시 태어남 → 독자적인 작업 수행이 가능하다.
- 한 번 exec하게 되면 다시 돌아올 수 없다.
- 오른쪽의 경우 1 > 3 까지만 출력되고 2는 출력되지 않음
3. wait()
- 프로세스 A가 wait()시스템콜을 호출하면
- 커널은 child가 종료될 때까지 프로세스 A를 sleep시킨다. (block 상태)
- child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)
- ex) shell 프롬포트에서 하나의 프로그램이 띄워져 있음. 커서 깜박깜빡이면서 다른 프로그램 입력을 기다리는 프로그램
- → 다른 프로그램이 입력되어서 실행되면 wait이 되고 , 자식 프로그램 종료를 기다림
- → 자식 프로그램이 종료되면 다시 커서 깜빡깜빡이면서 실행
4. exit()
- 프로세스 자발적 종료
- exit() 시스템콜을 통해
- 프로그램에 명시적으로 넣어주지 않아도 main함수가 리턴되는 위치에 컴파일러가 넣어줌
- 프로세스 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더이상 필요하지 않음
- 키보드로 kill, break등을 친 경우
- ctrl+c, 인터넷 창 X 버튼 등
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
2. 프로세스 간 협력
1. 프로세스 간 협력이란? (IPC : Interprocess Communication)
- 독립적 프로세스
- 원칙적으로 프로세스는 각자의 주소 공간을 가지고 있으며 매우 독립적이다.
- 자기 메모리 주소 공간만 볼 수 있음
- 협력 프로세스
- 경우에 따라 프로세스가 협력을 해야만 효율적으로 실행되는 경우가 존재한다.
- 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
1. 메시지를 전달하는 방법 (Message Passing)
- 메모리 공간을 공유하지 않기 때문에 공유 변수 같은 것이 존재하는 것이 아님
- ⇒ 커널을 통해 메시지를 전달한다.
- Direct communication : 전달받을 프로세스의 이름을 명시
- Indirect Communication : 전달받을 프로세스 이름 명시X, mailbox혹은 port를 통해 간접적으로 전달
2. 주소 공간을 공유하는 방법 (Shared Memory)
- 시스템콜을 통해 메모리 공간을 공유하겠다는 요청을 한다.
- 두 프로세스의 물리적 주소 공간이 겹치게 매핑됨
1. 프로세스 시스템콜
1. 프로세스 생성이란?
- 부모 프로세스가 자식 프로세스를 생성하는 것
- 프로세스의 트리(계층 구조)형성
- 사용자 프로그램이 직접 생성할 수는 없고, 운영체제에 부탁해야 한다. (시스템 콜)
- 보통 복제로 생성 후, 그 주소 공간에 새로운 프로그램 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
- 부모의 주소공간(Address Space)를 복사
- exec() : 새로운 프로그램을 메모리에 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
2. 부모-자식 프로세스 관계
1. 부모와 자식이 공존하며 수행되는 모델
- 부모와 자식이 경쟁함
- Copy-On-Write(COW)
- write 발생 전까지는 부모와 데이터를 공유하다가,
- write가 발생했을 때 copy를 한다. (이후에 자식만의 데이터 꾸려나감)
- Copy-On-Write(COW)
2. 자식이 종료(terminated)될 때까지 부모가 기다리는 (wait)모델
- 부모가 자식을 기다림
3. 프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌
1. exit() 시스템콜
- 항상 자식이 먼저 종료되고, 부모가 뒷처리를 담당
- 프로세스의 각종 자원들이 운영체제에게 반납됨
2. abort() 시스템콜
- 일 시키려고 자식 프로세스 생성했는데, 더 이상 시킬 일 없음
- 자식이 너무 자원 막씀
- 부모가 종료되어야 할 때 자식을 먼저 종료시켜야 함
4. 프로세스와 관련한 시스템콜
1. fork()
- 자식은 fork()가 일어난 이후 문맥부터 실행된다.
- 부모의 문맥을 복제하기 때문에 PC도 복제되기 때문
- pid : 부모와 자식 프로세스를 구분한다.
- 부모 : 양수 / 자식 : 0
2. exec()
- 새로운 프로그램으로 다시 태어남 → 독자적인 작업 수행이 가능하다.
- 한 번 exec하게 되면 다시 돌아올 수 없다.
- 오른쪽의 경우 1 > 3 까지만 출력되고 2는 출력되지 않음
3. wait()
- 프로세스 A가 wait()시스템콜을 호출하면
- 커널은 child가 종료될 때까지 프로세스 A를 sleep시킨다. (block 상태)
- child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)
- ex) shell 프롬포트에서 하나의 프로그램이 띄워져 있음. 커서 깜박깜빡이면서 다른 프로그램 입력을 기다리는 프로그램
- → 다른 프로그램이 입력되어서 실행되면 wait이 되고 , 자식 프로그램 종료를 기다림
- → 자식 프로그램이 종료되면 다시 커서 깜빡깜빡이면서 실행
4. exit()
- 프로세스 자발적 종료
- exit() 시스템콜을 통해
- 프로그램에 명시적으로 넣어주지 않아도 main함수가 리턴되는 위치에 컴파일러가 넣어줌
- 프로세스 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더이상 필요하지 않음
- 키보드로 kill, break등을 친 경우
- ctrl+c, 인터넷 창 X 버튼 등
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
2. 프로세스 간 협력
1. 프로세스 간 협력이란? (IPC : Interprocess Communication)
- 독립적 프로세스
- 원칙적으로 프로세스는 각자의 주소 공간을 가지고 있으며 매우 독립적이다.
- 자기 메모리 주소 공간만 볼 수 있음
- 협력 프로세스
- 경우에 따라 프로세스가 협력을 해야만 효율적으로 실행되는 경우가 존재한다.
- 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
1. 메시지를 전달하는 방법 (Message Passing)
- 메모리 공간을 공유하지 않기 때문에 공유 변수 같은 것이 존재하는 것이 아님
- ⇒ 커널을 통해 메시지를 전달한다.
- Direct communication : 전달받을 프로세스의 이름을 명시
- Indirect Communication : 전달받을 프로세스 이름 명시X, mailbox혹은 port를 통해 간접적으로 전달
2. 주소 공간을 공유하는 방법 (Shared Memory)
- 시스템콜을 통해 메모리 공간을 공유하겠다는 요청을 한다.
- 두 프로세스의 물리적 주소 공간이 겹치게 매핑됨
1. 프로세스 시스템콜
1. 프로세스 생성이란?
- 부모 프로세스가 자식 프로세스를 생성하는 것
- 프로세스의 트리(계층 구조)형성
- 사용자 프로그램이 직접 생성할 수는 없고, 운영체제에 부탁해야 한다. (시스템 콜)
- 보통 복제로 생성 후, 그 주소 공간에 새로운 프로그램 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
- 부모의 주소공간(Address Space)를 복사
- exec() : 새로운 프로그램을 메모리에 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
2. 부모-자식 프로세스 관계
1. 부모와 자식이 공존하며 수행되는 모델
- 부모와 자식이 경쟁함
- Copy-On-Write(COW)
- write 발생 전까지는 부모와 데이터를 공유하다가,
- write가 발생했을 때 copy를 한다. (이후에 자식만의 데이터 꾸려나감)
- Copy-On-Write(COW)
2. 자식이 종료(terminated)될 때까지 부모가 기다리는 (wait)모델
- 부모가 자식을 기다림
3. 프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌
1. exit() 시스템콜
- 항상 자식이 먼저 종료되고, 부모가 뒷처리를 담당
- 프로세스의 각종 자원들이 운영체제에게 반납됨
2. abort() 시스템콜
- 일 시키려고 자식 프로세스 생성했는데, 더 이상 시킬 일 없음
- 자식이 너무 자원 막씀
- 부모가 종료되어야 할 때 자식을 먼저 종료시켜야 함
4. 프로세스와 관련한 시스템콜
1. fork()
- 자식은 fork()가 일어난 이후 문맥부터 실행된다.
- 부모의 문맥을 복제하기 때문에 PC도 복제되기 때문
- pid : 부모와 자식 프로세스를 구분한다.
- 부모 : 양수 / 자식 : 0
2. exec()
- 새로운 프로그램으로 다시 태어남 → 독자적인 작업 수행이 가능하다.
- 한 번 exec하게 되면 다시 돌아올 수 없다.
- 오른쪽의 경우 1 > 3 까지만 출력되고 2는 출력되지 않음
3. wait()
- 프로세스 A가 wait()시스템콜을 호출하면
- 커널은 child가 종료될 때까지 프로세스 A를 sleep시킨다. (block 상태)
- child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)
- ex) shell 프롬포트에서 하나의 프로그램이 띄워져 있음. 커서 깜박깜빡이면서 다른 프로그램 입력을 기다리는 프로그램
- → 다른 프로그램이 입력되어서 실행되면 wait이 되고 , 자식 프로그램 종료를 기다림
- → 자식 프로그램이 종료되면 다시 커서 깜빡깜빡이면서 실행
4. exit()
- 프로세스 자발적 종료
- exit() 시스템콜을 통해
- 프로그램에 명시적으로 넣어주지 않아도 main함수가 리턴되는 위치에 컴파일러가 넣어줌
- 프로세스 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더이상 필요하지 않음
- 키보드로 kill, break등을 친 경우
- ctrl+c, 인터넷 창 X 버튼 등
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
2. 프로세스 간 협력
1. 프로세스 간 협력이란? (IPC : Interprocess Communication)
- 독립적 프로세스
- 원칙적으로 프로세스는 각자의 주소 공간을 가지고 있으며 매우 독립적이다.
- 자기 메모리 주소 공간만 볼 수 있음
- 협력 프로세스
- 경우에 따라 프로세스가 협력을 해야만 효율적으로 실행되는 경우가 존재한다.
- 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
1. 메시지를 전달하는 방법 (Message Passing)
- 메모리 공간을 공유하지 않기 때문에 공유 변수 같은 것이 존재하는 것이 아님
- ⇒ 커널을 통해 메시지를 전달한다.
- Direct communication : 전달받을 프로세스의 이름을 명시
- Indirect Communication : 전달받을 프로세스 이름 명시X, mailbox혹은 port를 통해 간접적으로 전달
2. 주소 공간을 공유하는 방법 (Shared Memory)
- 시스템콜을 통해 메모리 공간을 공유하겠다는 요청을 한다.
- 두 프로세스의 물리적 주소 공간이 겹치게 매핑됨
1. 프로세스 시스템콜
1. 프로세스 생성이란?
- 부모 프로세스가 자식 프로세스를 생성하는 것
- 프로세스의 트리(계층 구조)형성
- 사용자 프로그램이 직접 생성할 수는 없고, 운영체제에 부탁해야 한다. (시스템 콜)
- 보통 복제로 생성 후, 그 주소 공간에 새로운 프로그램 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
- 부모의 주소공간(Address Space)를 복사
- exec() : 새로운 프로그램을 메모리에 올림
- fork() : 프로세스의 문맥을 복제 (code, data, stack, pc 등등)
2. 부모-자식 프로세스 관계
1. 부모와 자식이 공존하며 수행되는 모델
- 부모와 자식이 경쟁함
- Copy-On-Write(COW)
- write 발생 전까지는 부모와 데이터를 공유하다가,
- write가 발생했을 때 copy를 한다. (이후에 자식만의 데이터 꾸려나감)
- Copy-On-Write(COW)
2. 자식이 종료(terminated)될 때까지 부모가 기다리는 (wait)모델
- 부모가 자식을 기다림
3. 프로세스 종료
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌
1. exit() 시스템콜
- 항상 자식이 먼저 종료되고, 부모가 뒷처리를 담당
- 프로세스의 각종 자원들이 운영체제에게 반납됨
2. abort() 시스템콜
- 일 시키려고 자식 프로세스 생성했는데, 더 이상 시킬 일 없음
- 자식이 너무 자원 막씀
- 부모가 종료되어야 할 때 자식을 먼저 종료시켜야 함
4. 프로세스와 관련한 시스템콜
1. fork()
- 자식은 fork()가 일어난 이후 문맥부터 실행된다.
- 부모의 문맥을 복제하기 때문에 PC도 복제되기 때문
- pid : 부모와 자식 프로세스를 구분한다.
- 부모 : 양수 / 자식 : 0
2. exec()
- 새로운 프로그램으로 다시 태어남 → 독자적인 작업 수행이 가능하다.
- 한 번 exec하게 되면 다시 돌아올 수 없다.
- 오른쪽의 경우 1 > 3 까지만 출력되고 2는 출력되지 않음
3. wait()
- 프로세스 A가 wait()시스템콜을 호출하면
- 커널은 child가 종료될 때까지 프로세스 A를 sleep시킨다. (block 상태)
- child process가 종료되면 커널은 프로세스 A를 깨운다. (ready 상태)
- ex) shell 프롬포트에서 하나의 프로그램이 띄워져 있음. 커서 깜박깜빡이면서 다른 프로그램 입력을 기다리는 프로그램
- → 다른 프로그램이 입력되어서 실행되면 wait이 되고 , 자식 프로그램 종료를 기다림
- → 자식 프로그램이 종료되면 다시 커서 깜빡깜빡이면서 실행
4. exit()
- 프로세스 자발적 종료
- exit() 시스템콜을 통해
- 프로그램에 명시적으로 넣어주지 않아도 main함수가 리턴되는 위치에 컴파일러가 넣어줌
- 프로세스 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더이상 필요하지 않음
- 키보드로 kill, break등을 친 경우
- ctrl+c, 인터넷 창 X 버튼 등
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
2. 프로세스 간 협력
1. 프로세스 간 협력이란? (IPC : Interprocess Communication)
- 독립적 프로세스
- 원칙적으로 프로세스는 각자의 주소 공간을 가지고 있으며 매우 독립적이다.
- 자기 메모리 주소 공간만 볼 수 있음
- 협력 프로세스
- 경우에 따라 프로세스가 협력을 해야만 효율적으로 실행되는 경우가 존재한다.
- 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
1. 메시지를 전달하는 방법 (Message Passing)
- 메모리 공간을 공유하지 않기 때문에 공유 변수 같은 것이 존재하는 것이 아님
- ⇒ 커널을 통해 메시지를 전달한다.
- Direct communication : 전달받을 프로세스의 이름을 명시
- Indirect Communication : 전달받을 프로세스 이름 명시X, mailbox혹은 port를 통해 간접적으로 전달
2. 주소 공간을 공유하는 방법 (Shared Memory)
- 시스템콜을 통해 메모리 공간을 공유하겠다는 요청을 한다.
- 두 프로세스의 물리적 주소 공간이 겹치게 매핑됨
'Operating System' 카테고리의 다른 글
[OS] 6. CPU 스케줄링 (0) | 2022.04.24 |
---|---|
[OS] 5. 쓰레드 (0) | 2022.04.24 |
[OS] 3. 프로세스 스케줄링 - (2) (0) | 2022.04.24 |
[OS] 2. 프로세스란? - (1) (0) | 2022.04.24 |
[OS] 1. 운영체제 (0) | 2022.04.24 |
Comments