[운영체제] Chapter4. Process Management (1)
2022. 12. 15. 18:26ㆍCS/운영체제
728x90
//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎
프로세스 생성(Process Creation), 프로세스 종료(Process Termination)
1. 프로세스 생성 (Process Creation)
- 부모 프로세스(Parent process)가 자식 프로세스(children process) 생성 : 복제 생성
- 부모 프로세스 1개가 → n개의 자식 프로세스를 생성할 수 있기 때문에 프로세스의 트리(계층 구조) 형성
- 프로세스는 자원을 필요로 함
- 운영 체제로부터 받는다.
- 부모와 공유한다.
- 전혀 공유하지 않는 모델
- 부모 프로세스가 자식 프로세스를 낳는 시점부터 별도의 프로세스이기 때문에 서로 경쟁하는 사이
~ 원칙적으로 자원을 공유하지는 않는다.
- 부모 프로세스가 자식 프로세스를 낳는 시점부터 별도의 프로세스이기 때문에 서로 경쟁하는 사이
- 부모와 자식이 모든 자원을 공유하는 모델
- 일부를 공유하는 모델
- COW(Copy-On-Write): write이 발생했을 때 copy 하겠다.
- 메모리에 동일한 두 copy가 올라가면 메모리 낭비이기 때문에 일단 copy 하지 않고 주소 공간을 공유하고 PC 레지스터만 copy 해서 똑같은 위치를 가리키게 한다.
- code, data, stack은 통째로 메모리에 올라가 있는 것이 아니라 잘게 쪼개져서 필요한 부분만 메모리에 올라가 있는데, 잘게 쪼개진 부분에 대해 write가 발생하면 그 부분만 copy해서 부모와 공유하지 않고 관리한다.
- COW(Copy-On-Write): write이 발생했을 때 copy 하겠다.
- 전혀 공유하지 않는 모델
- 수행(Execution)
- 원칙) 부모와 자식이 공존하며 수행되는 모델 - 독립적
- 자식이 종료(terminate)될 때까지 부모가 기다리는(wait) 모델 - (blocked 상태에서 자식이 끝나면 ready 상태)
- 주소 공간(Address) - 프로세스의 생성
- 프로세스가 만들어지면 프로세스만의 독자적인 주소 공간(코드, 데이터, 스택)이 만들어짐
- 자식의 주소 공간은 어떻게 만들어질까?
- 1단계) 자식은 부모의 공간(PCB와 같은 OS에 있는 데이터 = 프로세스 문맥)을 복사
- 부모 프로세스가 자식 프로세스를 생성하게 되면 자식 프로세는 별도의 주소 공간을 가지지만, 처음 주소 공간을 생성할 때에는 부모 프로세스의 주소 공간 내용을 그대로 복사해서 생성
- 부모의 주소 공간을 fork() 해서 그대로 복사를 하면 코드도 복사가 되지만 데이터, 스택도 복사가 된다.
- 전역 변수, 현재 어디를 수행하고 있는지에 대한 정보도 복사하기 때문에
- 자식은 처음부터 시작하는 것이 아니라, 부모의 PC 위치부터 실행한다.
- 2단계) 자식은 그 주소 공간 위에 새로운 프로그램을 덮어 씌워 실행
- 1단계와 2단계는 독립적이기 때문에
- 1단계만 실행 → 프로세스를 복제만 해두고 덮어 씌우지 않음
- 2단계만 실행 → 자식 프로세스를 만들지 않고 그냥 exec()하여 새로운 프로세스로 바뀜
- 유닉스의 예
- fork() - 시스템 콜이 새로운 프로세스를 생성(복제 생성)
- 부모를 그대로 복사
- 주소 공간 할당
- exec() - fork() 다음에 이어지는 시스템 콜, 새로운 프로그램을 메모리에 올림(새로운 프로그램을 덮어 씌우는)
- fork()와 exec()는 시스템 콜: 사용자 프로세스가 직접 다른 프로세스를 생성할 수 없고 운영체제를 통해서만 가능하다.
- fork() - 시스템 콜이 새로운 프로세스를 생성(복제 생성)
2. 프로세스 종료 (Process Termination)
- 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌: exit() - 자발적 종료
- 자식 프로세스가 부모 프로세스보다 먼저 종료되어야 하고, 이에 대한 처리는 부모 프로세스가 담당
- 종료될 때 자식이 부모에게 output data를 wait 시스템 콜을 통해 전달
- 프로세스의 각종 자원들이 운영체제에게 반납됨
- 부모 프로세스가 자식의 수행을 종료시킴: abort() - 비자발적 종료
- 자식이 할당된 자원의 한계치를 넘어선 경우
- 자식에게 할당된 태스크가 더 이상 필요하지 않은 경우
- 부모가 종료(exit)하는 경우
- 운영체제는 부모 프로세스가 종료하는 경우 자식이 더 이상 수행되도록 두지 않는다.
- 프로세스가 생성했던 모든 후손 프로세스들을 연쇄적으로 먼저 종료시킨 후에야 본인이 종료될 수 있음: 단계적 종료
[복습]
- 프로세스의 생성: 부모 프로세스가 자식 프로세스를 복제 생성하는 것
- 트리(계층 구조) 형성
- 프로세스는 자원을 필요로 함
- 운영체제로부터 자원을 받기
- 부모와 공유(모든 자원 공유, 일부 공유, 공유하지 않는 모델)
- 프로세스의 수행
- 부모와 자식이 공존하며 수행
- 자식이 종료될 때까지 부모가 기다리는 모델
- 프로세스의 생성: 자식은 부모의 공간을 복사 -> 그 주소 공간 위에 새로운 프로그램을 덮어 씌움
- fork(): 부모를 복사하고 주소 공간을 할당하며 프로세스를 생성
- exec(): 새로운 프로그램을 메모리에 올림
- 프로세스 종료:
- 자발적 종료 exit(): 프로세스가 마지막 명령을 수행한 후 운영체제에게 이를 알려줌
- 비자발적 종료: abort(): 부모 프로세스가 자식의 수행을 종료시킴, 단계적 종료
이화여자대학교 반효경 교수님의 [2014년 1학기 운영체제], [2017년 1학기 운영체제]강의 정리입니다.
반효경 교수님의 [운영체제와 정보기술의 원리] 교재를 참고하였습니다. 감사합니다.
https://core.ewha.ac.kr/publicview/C0101020140321144554159683?vmode=f
728x90
'CS > 운영체제' 카테고리의 다른 글
[운영체제] Chapter 5. CPU Scheduling (1), (2) (1) | 2022.12.22 |
---|---|
[운영체제] Chapter 4. Process Management (2) (2) | 2022.12.20 |
[운영체제] Chapter 3. Process(2) (0) | 2022.12.14 |
[운영체제] Chapter 3. Process(1) (2) | 2022.12.11 |
[운영체제] Chapter 2. System Structure & Program Execution (2) (0) | 2022.11.24 |