공부
운영체제 - 프로세스
myeongjaechoi
2024. 4. 21. 20:24
프로그램과 프로세스
- 프로그램
- 파일 시스템에 파일 형태로 존재하는 실행 파일
- 프로세스
- CPU와 메모리를 사용하여 실행 중인 프로그램
- OS에서 하나의 작업 단위로써 태스크 라고도 함 (process = job = task)
- 각 프로세스가 생성될 때 프로세스를 제어하는데 필요한 정보인 PCB가 생성됨
프로세스 상태
- new(생성)
- 프로그램이 메모리에 올라와 프로세스가 생성되는 상태
- PCB가 생성됨
- ready(준비)
- 준비 큐에서 프로세스가 CPU를 할당 받기위해 기다리는 실행 준비 상태
- running(실행)
- 프로세스가 CPU를 사용하여 실행 중인 상태
- 문맥 교환이 이뤄짐
- 예 : 시분활 시스템에서 프로세스에게 할당된 CPU 사용시간이 완료되면 실행이 다 끝나지 않아도 프로세스가 준비상태로 됨)
- terminated(완료)
- 프로세스의 실행이 완료된 상태
- PCB가 삭제됨
- waiting(대기)
- 실행 중인 프로세스가 데이터 I/O를 처리해야 하는 경우, I/O controller를 사용하여 I/O가 완료될 때까지 대기하는 상태
프로세스 상태 전이
- admitted(승인)
- 새롭게 생성된 프로세스들이 승인 받아 준비 상태에 이르는 과정
- scheduler dispatch(스케줄러 디스패치)
- CPU 스케줄러에 의해 준비 상태의 준비 큐에서 프로세스 중 하나를 선택하여 실행시키는 것
- interrupt(인터럽트)
- 예외, 입출력, 이벤트 등이 발생하여 현재 실행 중인 프로세스를 준비 상태로 바꾸고, 발생한 작업을 먼저 처리하는 것
- I/O wait(입출력 대기)
- 실행 중인 프로세스가 입출력을 처리해야 하는 경우, 입출력 처리가 모두 끝날 때까지 대기 상태로 만드는 것
- I/O completion(입출력 완료)
- 입출력이 끝난 프로세스를 준비 상태로 전환하여 스케줄러에 의해 선택될 수 있도록 만드는 것
PCB
- OS가 프로세스를 제어하는데 필요한 정보를 담고 있음
- 프로세스가 생성될 때 메모리의 OS영역에 생성됨
- 프로세스 상태 전이와 문맥 교환을 위해 사용됨
- Pointer
- 준비상태의 준비 큐와 대기상태의 대기 큐 내에서 다음 프로세스의 PCB를 가리키는 포인터로 사용됨
- Process state
- 프로세스 상태인 생성, 준비, 실행, 대기, 종료를 나타냄
- Process number
- OS 내에서 여러 프로세스를 구분하기 위해 사용됨
- CPU scheduling information
- 프로세스 우선순위 정보가 저장됨
- 준비 큐와 대기 큐에서 높은 우선순위의 프로세스가 낮은 우선순위의 프로세스보다 먼저 실행됨
- I/O status information
- 프로세스를 실행하기 위해 사용된 입출력 장치나 파일에 대한 정보가 저장됨(예 : file list)
- Accounting information
- 프로세스 실행을 완료하기 위해 사용된 총 CPU 시간 및 이 시간의 한도가 저장됨
- PPID & CPID
- 부모 프로세스의 PID와 자식 프로세스의 PID가 저장됨
Program counter(PC)
- 다음에 실행될 명령어의 주소 또는 코드의 행 번호가 저장됨
Registers
- 프로세스가 실행되는 중에 사용하던 register 값이 저장됨
문맥 교환
- Timeout 또는 인터럽트에 의해 CPU에서 현재 실행 중인 프로세스를 다른 프로세스로 전환하는 과정
- Context : CPU가 프로세스를 실행하기 위해 필요한 정보로서 CPU의 register에 저장됨
- 프로세스의 PCB를 통해 CPU의 register를 다시 설정함
프로세스의 메모리 구조
- 프로세스가 생성될 때
- 메모리의 OS 영역 : PCB가 할당됨
- 메모리의 사용자 영역 : 코드 영역, 데이터 영역, 힙 영역, 스택 영역이 할당됨
- 코드 영역
- 디스크에서 읽어온 실행하려는 빌드된 프로그램이 저장됨
- 데이터 영역
- 전역 변수 또는 정적 변수가 저장됨
- 스택 영역
- 지역 변수가 저장됨
- 변수는 범위 밖으로 이동하면 스택에 할당된 변수는 소멸됨
- 힙 영역
- 프로세스 실행 중에 동적으로 메모리를 할당 및 해제하기 위해 사용됨
- malloc()과 free() 함수를 사용하여 동적 메모리를 할당하고 해제함
fork()
- 프로세스를 복사하는 함수
- 실행 중인 프로세스는 부모 프로세스가 되고, 복사본이 자식 프로세스가 됨
exec()
- 프로세스에서 프로그램을 실행하도록 하는 함수
- 프로세스에서 PCB는 변경되지 않고 프로그램을 실행시키기 위해 코드, 데이터, 힙, 스택 영역이 변경됨
좀비 프로세스
- 자식 프로세스의 실행이 완료되면 자식 프로세스가 사용한 자원을 부모 프로세스가 회수
- But, 2가지 경우에 회수 불가
- 자식 프로세스보다 부모 프로세스가 먼저 종료된 경우
- 자식 프로세스가 비정상적으로 종료된 경우
- 이때, 자식 프로세스는 종료되었으나 프로세스에 대한 자원이 사라지지 않고 남아있는 좀비 프로세스가 됨
- 고아 프로세스라고도 함