EverGiver
Process States 본문
728x90
Process management
- 프로세스의 생성 시기
- 일괄처리 환경 : 작업이 도착할 때 프로세스 생성
- 대화형 환경 : 새로운 사용자가 log-on/loading 할 때 프로세스 생성 - 프로세스 생성 시 필요한 세부 작업 순서
1. 새로운 프로세스에 process ID(pid) 할당
2. 프로세스의 모든 구성 요소를 포함할 수 있는 주소 공간과 PCB 공간 할당
3. PCB initalization (프로세스 상태, 프로그램 카운터 등 초기화, 자원 요청, 프로세스 제어 정보(우선순위) 등을 포함)
4. 링크 (해당 큐에 삽입) - 프로세스가 새로운 프로세스 생성
- 프로세스 실행 중 프로세스 생성 시스템 호출을 이용하여 새로운 프로세스를 생성
- 생성하는 프로세스는 parent process, 생성되는 프로세스는 child process 또는 subprocess
- 부모 프로세스와 자식 프로세스가 동시에 실행
- 부모 프로세스는 자식 프로세스가 모두 종류 할 때까지 대기 - Process termination
- 사용하던 자원을 시스템에 돌려주고 PCB 회수, 해당 프로세스는 시스템 리스트나 테이블에서 삭제
- 프로그램은 여전히 디스크에 저장됨
- 프로세스 종료 종류
▷ 정상 종류
- 마지막 명령 실행 후 운영체제의 서비스 호출
- exit 명령어 : 프로세스 종류를 위한 서비스 호출 조건 만족 시 실행
▷ 강제 종류
- 사용자 개입 : 사용자가 log-off, 실행창 닫기, 종료 명령(abort, quit, ^C 등)
- 시간 초과
- Exception 발생 : 산술 오류, 보호 오류, 데이터 오류 등, 메모리 부족, 액세스 위반 등
→ Exception handler 실행
- Parent process의 child process 종료
▷ 보통 부모 프로세스를 종료하면 운영체제가 자식 프로세스도 종료 (연속 종료)
▷ 자식 프로세스가 할당된 자원을 초과하여 자원을 사용할 때
▷ 자식 프로세스에 할당한 작업이 더는 없을 때
▷ wait 명령어 : 부모 프로세스가 자식 프로세스의 종료를 기달린다. - Orphan process
- 프로세스가 종료된 후에도 비정상적으로 남아 있는 프로세스
- C 언어의 exit() 또는 return() 문은 자식 프로세스가 작업이 끝났음을 부모 프로세스에 알리는 것으로 미아 프로세스 발생을 미연에 방지
Process suspend & resume
- Multi-process system에서 ready / waiting queue가 가득 차는(full) 문제
- 자원 부족 상태 또는 장시간의 입출력 대기
- Process suspend (일시 정지) 상태 추가 - Process suspend
- Swap out low priority process to secondary storage
- 시스템 전체의 부하를 증가시키지 않고 process에 서비스 제공
- 원인이 해소될 때까지 process를 suspend 상태에 두어 다른 process가 원활하게 수행되도록 한다.
- 장시간 중단 시 해당 프로세스에 할당된 자원을 반환한다.
- 자원의 성질에 따라 반환 자원을 결정한다.
▷ 메인 메모리 : 프로세서 중단 즉시 반환
▷ 보조 메모리 : 중단 시간을 예측할 수 없거나 너무 길 때 반환한다.
- 중단한 프로세스는 중단한 지점부터 다시 시작한다.
▷ PCB 보존
프로세서의 생성과 복사
- fork() 시스템 호출의 개념
- 실행 중인 프로세스로부터 새로운 프로세스를 복사하는 함수
- 실행 중인 프로세스와 똑같은 프로세스가 하나 더 만들어진다.
▷ parent - child
- fork() 시스템 호출의 동작 과정
- fork() 시스템 호출을 하면 프로세스 제어 블록을 포함한 부모 프로세스 영역의 대부분이 자식 프로세스에 복사되어 똑같은 프로세스가 만들어진다.
- 단, 프로세스 제어 블록의 내용 중 다음이 변경된다.
▷ PID (Process ID)
▷ 메모리 관련 정보
▷ PPID (Parent Process ID)와 CPID (Child Process ID)
- fork() 시스템 호출의 장점
- 프로세스의 생성 속도가 빠르다.
- 추가 작업 없이 자원을 상속할 수 있다.
- 시스템 관리를 효율적으로 할 수 있다. - fork() 시스템 호출의 예
- 부모 프로세스의 코드가 실행되어 fork() 문을 만나면 똑같은 내용의 자식 프로세스를 하나 생성
- 이때 fork() 문은 부모 프로세스에 0보다 큰 값을 반환하고 자식 프로세스에 0을 반환
- 만약 0보다 작은 값을 반환하면 자식 프로세스가 생성되지 않은 것으로 여겨 'Error'를 출력
프로세스의 전환
- exec() 시스템 호출의 개념
- 기존의 프로세스를 새로운 프로세스로 전환(재사용)하는 함수
▷ fork() : 새로운 프로세스를 복사하는 시스템 호출
▷ exec() : 프로세스는 그대로 둔 채 내용만 바꾸는 시스템 호출 - exec() 시스템 호출의 동작 과정
- exec() 시스템 호출을 하면 코드 영역에 있는 기존의 내용을 지우고 새로운 코드로 변경
- 스택/힙 영역 리셋
- PCB의 내용 중 PID, PPID, CPID, 메모리 관련 사항 등은 유지하고 프로그램 카운터 레지스터 값을 비롯한 각종 레지스터와 사용한 파일 정보가 모두 리셋
- 기존 process를 재활용하여 새로운 program을 실행
- exec() 시스템 호출의 예
- 부모 프로세스에서 fork() 문을 실행 → 자식 프로세스를 생성하고, wait() 문을 실행 → 자식 프로세스가 끝날 때까지 기다린다.
- 자식 프로세스는 부모 프로세스와 동일한 코드
- exec() 시스템 호출을 사용하여 새로운 프로세스로 전환 → PCB의 PID, PPID, CPID 등 유지 → 자식 프로세스가 종료된 후 부모 프로세스로 돌아올 수 있다. → 부모 프로세스 계속 실행
Process Hierarchy
- UNIX의 process hierarchy
- 유닉스의 모든 프로세스는 init 프로세스의 자식이 되어 트리 구조를 이룸
728x90
'전공 > 운영체제' 카테고리의 다른 글
Linux Basic Shell Command (0) | 2022.03.26 |
---|---|
Linux Outline (0) | 2022.03.26 |
Process Concept (0) | 2022.03.21 |
컴퓨터 동작 (0) | 2022.03.13 |
컴퓨터 시스템 소개 (0) | 2022.03.12 |
Comments