프로세스란?
- 실행 중인 프로그램
- 비동기적 행위
- 실행 중인 프로시저
- 운영체제에 들어있는 프로세스 제어 블록
➡️ 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태 (자신만의 메모리 공간이 있음을 의미)
ex) 웹 브라우저 창을 한 개 열면 프로세스 한 개, 창을 두 개 열면 프로세스 두 개
프로세서 점유 시간, 메모리, 파일, 입출력장치 같은 자원은 프로세스를 생성하거나 실행할 때 할당
스택
- 데이터를 일시적으로 저장하는 영역 (지역변수에 사용)
- 호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용
- 함수를 호출하면 생성되고, 반환하면 소멸
힙
- 코드 영역과 별도로 유지되는 자유 영역
- 동적으로 메모리를 할당하기 위해 사용한 후 해제
데이터
- 프로그램의 가상 주소 공간
- 전역변수나 정적변수를 저장하거나 할당
- 읽기 전용 영역이나 읽기와 쓰기 영역으로 초기화 가능
코드
- 실행 명령을 포함하는 메모리 또는 목적 파일에 있는 프로그램 영역
- 디스크에서 읽어 실행하는 컴파일된 프로그램을 저장
프로세스의 종류
구분 | 종류 | 설명 |
역할 | 시스템 프로세스 | 모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스 |
사용자 프로세스 | 사용자 코드를 수행하는 프로세스 | |
병행 수행 방법 | 독립 프로세스 | 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스 |
협력 프로세스 | 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스 |
프로세스의 구조
생성 순서를 저장하고 부모-자식 관계를 유지하여 계층적으로 생성
프로세스의 상태 변화
상태 변화 | 표기 방법 | 과정 |
준비 → 실행 | dispatch | 준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것 |
실행 → 준비 | timeout | 타임아웃되어도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제에 프로세스 제어권을 부여 |
실행 → 대기 (보류) | bolck | 입출력 연산 필요 및 새로운 자원 요청 등의 문제로 스스로 프로세서를 양도 |
대기 (보류) → 준비 | wakeup | 프로세스는 입출력 작업이 끝나면 깨움(wake up)으로 대기에서 준비 |
프로세스 제어 블록
- 프로세스 식별자 : 프로세스의 고유 식별자
- 프로세스 상태 : 프로세스 상태 표시
- 프로그램 카운터 : 다음 명령 주소 표시
- 레지스터 저장 영역 : 인터럽트가 발생하면 PC와 함께 저장하여 재실행으로 복귀 가능하도록 함
- 프로세서 스케줄링 정보 : 프로세스의 우선순위, 큐의 포인터 등
- 계정 정보 : 프로세서 사용 시간, 상한 시간, 계정 번호, 프로세스 번호 등
- 입출력 상태 정보, 메모리 관리 정보 등
프로세스 생성
- 운영체제나 응용 프로그램에서 요청을 받아 프로세스를 생성
- 운영체제는 해당 프로세스에서 프로세스 제어 블록을 만들어 주소 공간을 할당
- 일괄처리 환경에서는 준비 큐에 작업이 도찰할 때 프로세스 생성
- 자식 프로세스는 필요한 자원을 직접 운영체제에서 얻거나, 부모 프로세스의 자원을 일부 사용
- 부모 프로세스와 자식 프로세스를 동시에 실행
- 부모 프로세스는 자식 프로세스가 모두 종료될 때까지 대기
프로세스 종료
- 마지막 명령 실행 후 운영체제한테 프로세스 삭제를 요청
- 일괄처리 환경에서는 작업 종료의 의미로 인터럽트를 발생하거나 시스템 호출로 중단 명령 전달
- 부모 프로세스를 종료하면 자식 프로세스도 운영체제에 의해 종료
- 그 외의 종료되는 상황은 아래와 같다
- 자식 프로세스가 할당된 자원을 초과하여 사용할 때
- 자식 프로세스에 할당된 작업이 더는 없을 때
프로세스 제거
- 프로세스를 파괴
- 프로세스가 사용하던 자원을 시스템에게 돌려줌
- 프로그램은 여전히 디스크에 저장
- 부모 프로세스를 제거하면 자식 프로세스는 자동으로 제거
프로세스 중단 및 재시작
준비, 실행, 대기 상태만 갖는 프로세스는 사용 가능한 상태이나 실제적인 작업이 없는 상태인 '유휴시간'을 갖는다.
이러한 문제를 해결하기 위한 것이 프로세스 중단이다. 일시정지 상태를 이용하여 실행 중인 프로세스를 중단하고, 다시 실행하여 사용하면 된다. 이러한 방법은 시스템의 부하를 줄여주면서 프로세스에 쾌적한 서비스를 제공할 수 있다.
- 시스템에 장애가 발생하면 실행 중인 프로세스는 잠시 중단했다가 시스템이 기능을 회복하면 재시작
- 프로세스에 의심스러운 부분이 있으면 실행 중인 프로세스를 중단하여 확인한 뒤 재시작 또는 종료
- 처리할 작업이 너무 많아 시스템에 부담이 되면 프로세스 몇 개를 중단하여 정상 상태로 되돌리고 재시작
프로세스 문맥 교환
실행 중인 프로세스에 인터럽트가 발생하면 운영체제가 다른 프로세스를 실행 상태로 바꿔 제어를 넘김
- 입출력 인터럽트 : 입출력 동작이 발생했음을 확인하고 이벤트를 기다리는 동안 프로세스를 준비 상태로 변환
- 클록 인터럽트 : 실행 중인 프로세스의 할당 시간을 조사하기 위해 준비 상태로 변환
인터럽트 처리 루틴 실행 후, 다시 기존 프로세스로 돌아와 재실행
해당 글은 <운영체제: 그림으로 배우는 구조와 원리>를 보고 정리한 내용입니다.
'CS > 운영체제' 카테고리의 다른 글
[OS] 벨레이디의 모순(Belady's anomaly)이란? (0) | 2023.11.27 |
---|---|
[OS] 스레드의 상태 변화와 구현 (0) | 2023.11.20 |
[OS] 운영체제의 서비스와 구조 (0) | 2023.11.05 |
[OS] 운영체제의 유형 (0) | 2023.11.05 |
[OS] 운영체제의 개념과 기능 (0) | 2023.11.05 |
프로세스란?
- 실행 중인 프로그램
- 비동기적 행위
- 실행 중인 프로시저
- 운영체제에 들어있는 프로세스 제어 블록
➡️ 디스크에 있던 프로그램을 메모리에 적재하여 운영체제의 제어를 받는 상태 (자신만의 메모리 공간이 있음을 의미)
ex) 웹 브라우저 창을 한 개 열면 프로세스 한 개, 창을 두 개 열면 프로세스 두 개
프로세서 점유 시간, 메모리, 파일, 입출력장치 같은 자원은 프로세스를 생성하거나 실행할 때 할당
스택
- 데이터를 일시적으로 저장하는 영역 (지역변수에 사용)
- 호출한 함수의 반환 주소, 반환 값, 매개변수 등에 사용
- 함수를 호출하면 생성되고, 반환하면 소멸
힙
- 코드 영역과 별도로 유지되는 자유 영역
- 동적으로 메모리를 할당하기 위해 사용한 후 해제
데이터
- 프로그램의 가상 주소 공간
- 전역변수나 정적변수를 저장하거나 할당
- 읽기 전용 영역이나 읽기와 쓰기 영역으로 초기화 가능
코드
- 실행 명령을 포함하는 메모리 또는 목적 파일에 있는 프로그램 영역
- 디스크에서 읽어 실행하는 컴파일된 프로그램을 저장
프로세스의 종류
구분 | 종류 | 설명 |
역할 | 시스템 프로세스 | 모든 시스템 메모리와 프로세서의 명령에 액세스할 수 있는 프로세스 |
사용자 프로세스 | 사용자 코드를 수행하는 프로세스 | |
병행 수행 방법 | 독립 프로세스 | 다른 프로세스에 영향을 주지 않거나 다른 프로세스의 영향을 받지 않으면서 수행하는 병행 프로세스 |
협력 프로세스 | 다른 프로세스에 영향을 주거나 다른 프로세스에서 영향을 받는 병행 프로세스 |
프로세스의 구조
생성 순서를 저장하고 부모-자식 관계를 유지하여 계층적으로 생성
프로세스의 상태 변화
상태 변화 | 표기 방법 | 과정 |
준비 → 실행 | dispatch | 준비 큐 맨 앞에 있던 프로세스가 프로세서를 점유하는 것 |
실행 → 준비 | timeout | 타임아웃되어도 프로세서를 반환하지 않으면 클록이 인터럽트를 발생시켜 운영체제에 프로세스 제어권을 부여 |
실행 → 대기 (보류) | bolck | 입출력 연산 필요 및 새로운 자원 요청 등의 문제로 스스로 프로세서를 양도 |
대기 (보류) → 준비 | wakeup | 프로세스는 입출력 작업이 끝나면 깨움(wake up)으로 대기에서 준비 |
프로세스 제어 블록
- 프로세스 식별자 : 프로세스의 고유 식별자
- 프로세스 상태 : 프로세스 상태 표시
- 프로그램 카운터 : 다음 명령 주소 표시
- 레지스터 저장 영역 : 인터럽트가 발생하면 PC와 함께 저장하여 재실행으로 복귀 가능하도록 함
- 프로세서 스케줄링 정보 : 프로세스의 우선순위, 큐의 포인터 등
- 계정 정보 : 프로세서 사용 시간, 상한 시간, 계정 번호, 프로세스 번호 등
- 입출력 상태 정보, 메모리 관리 정보 등
프로세스 생성
- 운영체제나 응용 프로그램에서 요청을 받아 프로세스를 생성
- 운영체제는 해당 프로세스에서 프로세스 제어 블록을 만들어 주소 공간을 할당
- 일괄처리 환경에서는 준비 큐에 작업이 도찰할 때 프로세스 생성
- 자식 프로세스는 필요한 자원을 직접 운영체제에서 얻거나, 부모 프로세스의 자원을 일부 사용
- 부모 프로세스와 자식 프로세스를 동시에 실행
- 부모 프로세스는 자식 프로세스가 모두 종료될 때까지 대기
프로세스 종료
- 마지막 명령 실행 후 운영체제한테 프로세스 삭제를 요청
- 일괄처리 환경에서는 작업 종료의 의미로 인터럽트를 발생하거나 시스템 호출로 중단 명령 전달
- 부모 프로세스를 종료하면 자식 프로세스도 운영체제에 의해 종료
- 그 외의 종료되는 상황은 아래와 같다
- 자식 프로세스가 할당된 자원을 초과하여 사용할 때
- 자식 프로세스에 할당된 작업이 더는 없을 때
프로세스 제거
- 프로세스를 파괴
- 프로세스가 사용하던 자원을 시스템에게 돌려줌
- 프로그램은 여전히 디스크에 저장
- 부모 프로세스를 제거하면 자식 프로세스는 자동으로 제거
프로세스 중단 및 재시작
준비, 실행, 대기 상태만 갖는 프로세스는 사용 가능한 상태이나 실제적인 작업이 없는 상태인 '유휴시간'을 갖는다.
이러한 문제를 해결하기 위한 것이 프로세스 중단이다. 일시정지 상태를 이용하여 실행 중인 프로세스를 중단하고, 다시 실행하여 사용하면 된다. 이러한 방법은 시스템의 부하를 줄여주면서 프로세스에 쾌적한 서비스를 제공할 수 있다.
- 시스템에 장애가 발생하면 실행 중인 프로세스는 잠시 중단했다가 시스템이 기능을 회복하면 재시작
- 프로세스에 의심스러운 부분이 있으면 실행 중인 프로세스를 중단하여 확인한 뒤 재시작 또는 종료
- 처리할 작업이 너무 많아 시스템에 부담이 되면 프로세스 몇 개를 중단하여 정상 상태로 되돌리고 재시작
프로세스 문맥 교환
실행 중인 프로세스에 인터럽트가 발생하면 운영체제가 다른 프로세스를 실행 상태로 바꿔 제어를 넘김
- 입출력 인터럽트 : 입출력 동작이 발생했음을 확인하고 이벤트를 기다리는 동안 프로세스를 준비 상태로 변환
- 클록 인터럽트 : 실행 중인 프로세스의 할당 시간을 조사하기 위해 준비 상태로 변환
인터럽트 처리 루틴 실행 후, 다시 기존 프로세스로 돌아와 재실행
해당 글은 <운영체제: 그림으로 배우는 구조와 원리>를 보고 정리한 내용입니다.
'CS > 운영체제' 카테고리의 다른 글
[OS] 벨레이디의 모순(Belady's anomaly)이란? (0) | 2023.11.27 |
---|---|
[OS] 스레드의 상태 변화와 구현 (0) | 2023.11.20 |
[OS] 운영체제의 서비스와 구조 (0) | 2023.11.05 |
[OS] 운영체제의 유형 (0) | 2023.11.05 |
[OS] 운영체제의 개념과 기능 (0) | 2023.11.05 |