티스토리 뷰
프로세스를 이해할려면 프로그램을 먼저 알아야되는데 프로그램이란 뜻의 정의는 무엇일까?
프로그램이란, 파일이 저장장치에는 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태
단순히 말하지면 아직 실행되지 않은 파일 그자체를 가리키는 말이다. 프로그램을 실행하면 그때 그 파일이 컴퓨터 메모리에
올라가게 되고, 이제야 동적인 상태가 된다. 이 상태의 프로그램을 프로세스 라고 한다.
과거에는 프로그램을 실행할때 프로세스 하나만을 사용했지만, 기술이 발전함에 따라 프로그램이 복잡해지면서 한계가 있었다. 그 한계를 극복하기 위해서 여러개의 프로세스를 사용하려면 그만큼의 메모리를 차지하고 CPU에서 할당받는 자원이 중복되기에 스레드가 탄생했다.
프로세스와 스레드의 정의
프로세스 : 운영체제로부터 자원을 할당받은 “작업의 단위”
스레드 : 프로세스가 할당받은 자원을 이용하는 “실행 흐름의 단위”
1. 프로세스란
- 프로세스란 실행중에 있는 프로그램
- 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적)
- 스케줄링의 대상인 작업(task)와 같은 의미
- 프로세스는 스레드 단위로 스케줄링을 함
- 하드디스크에 있는 프로그램을 실행하면, 메모리 할당이 이뤄지고 그 할당된 공간에 코드가 올라간다. 그 순간부터 프로세스라고 불린다.
- 프로세스의 구조
- 코드: 실행할 프로그램의 코드나 명령어들이 기계어로 저장된 영역. CPU는 코드영역에 저장된 명령어를 하나씩 처리
- 데이터 : 코드에서 선언한 전역 변수, 정적 변수, 배열 등이 저장된 영역. 프로그램이 실행되면서 할당되고 종료하면서 소멸
- 스택 : 함수 안에서 선언된 지역변수, 매개변수, 리터값 등이 저장된 영역. 함수 호출시 기록되고 종료하면서 제거 (임시메모리 영역)
- 힙 : 관리가 가능한 데이터 이외의 다른 형태의 데이터를 관리하기 위한 자유공간 ( 런타임시 할당)
2. PCB (Process Control Block)
- 프로세스에 대한 모든 정보를 가진 자료구조
- 프로세스 생성시에 만들어 짐
- PCB는 메모리에 상주
- PCB에 저장되는 정보들
- 프로세스 번호 : 프로세스를 구별하기 위한 고유번호
- 프로세스 상태 : 준비 실행 대기 보류 등의 상태
- 프로세스 우선순위 : 스케줄링 할 때 사용되는 우선 순위
- 프로그램 카운터 : 다음에 실행될 명령어 주소 값
- 메모리 포인터 : 프로그램과 데이터가 저장되어 있는 메모리 블록 위치와 공유되는 메모리 들록들에 대한 초인터
- 문맥 데이터 : 문맥교환 시 CPU 레지스터 값을 저장하는 영역
- 계정 정보 : CPU를 사용한 시간등의 정보
- 입출력 정보: 진행 중인 입출력 요구등의 정보
시스템에서 프로세스가 만들어졌다는 것은 PCD가 만들어졌다고 생각하면 된다.
3. 프로세스의 상태
Active State vs Suspended State
- Active : 메모리 공간의 일정량을 부여받은 상태 ( 준비, 실행 , 대기 )
- Suspended : 메모리가 회수된 상태
- Active <-> Suspended : Swapping
- A -> S : Swap out
- S -> A : Swap in
- 스와핑도 결국은 입출력이기 때문에 발생하는 횟수가 적으면 좋다. 스와핑과 프로세스의 우선순위가 충돌하는 경우, 스와핑을 줄일 수 있는 방법을 택하는 것이 맞다.
프로세스의 State
- Created (생성)
- 사용자가 요청한 작업이 커널에 등록되고 PCB가 만들어져 프로세스가 만들어진 상태.
- Created -> Ready : 메모리 공간을 검사하여 충분한 공간이 있으면 메모리를 할당하고 준비 상태로 바꾼다.
- Created -> Suspended Ready : 공간이 없으면 메모리를 할당하지 않고 보류 준비로 바꾼다.
- Ready (준비)
- CPU를 할당 받기 위해 기다리고 있는 상태. CPU만 주어지면 바로 실행할 준비가 된 상태이다.
- Ready -> Running (Dispatch) : CPU를 할당 받으면 실행 상태로 바뀌고 실행된다.
- Ready -> Suspended Ready : 준비 상태였다가 메모리를 뺏긴 상태
- Running (실행)
- CPU를 할당받아 실행 중인 상태
- Running -> Ready (Timeout) : CPU를 받아 실행하다가 시간 할당량을 소진하여 뺏긴 상태
- Running -> Blocked : 실행 상태의 프로세스가 입출력이 필요하게 되어 시스템 호출을 하고, 입출력 처리의 종료를 기다리는 상태. 이때 CPU는 바로 준비 상태의 프로세스 하나를 선택해 실행한다.
- Blocked (대기)
- 프로세스가 실행되다가 입출력 처리를 요청하거나, 바로 확보될 수 없는 자원을 요청하면 CPU를 양도하고 요청한 일이 완료되기를 기다린다.
- Blocked -> Ready : 입출력이 완료되어 CPU 할당을 기다리는 상태.
- Blocked -> Suspended Blocked : 메모리의 여유 공간 확보를 위해 대기 상태에서 메모리를 뺏겨 보류 대기 상태로 바뀜.
- Terminated (종료)
- 프로세스가 종료될 때 아주 잠시 거치는 상태
- 모든 자원이 회수되고 PCB를 삭제한다.
- Suspended Ready (보류 준비)
- 생성된 프로세스가 바로 메모리를 받지 못할 때, 준비 또는 실행 상태에서 메모리를 잃게 될 때
- 충분한 메모리 공간의 확보를 위해 준비 상태의 프로세스를 보류시키는 경우
- Running -> Suspended Ready : 높은 우선순위의 보류 대기 상태 프로세스가 준비 상태가 되어, 실행 상태의 프로세스로부터 CPU를 뺏는 경우
- Suspended Blocked -> Suspended Ready : 보류 대기 상태에 있던 프로세스가 기다리던 입출력이 완료된 경우
- Suspended Ready -> Ready : 다시 메모리를 받은 경우
- Suspended Blocked (보류 대기)
- 대기 상태일 때 메모리 공간을 잃은 상태
- Blocked -> Suspended Blocked : 메모리 공간 확보를 위해 메모리를 잃은 상태. 준비 상태인 프로세스가 아예 없는 경우 발생하기도 한다.
- Suspended Blocked -> Blocked : 메모리가 확보되어 대기가 된 경우.
- Suspended Blocked -> Suspended Ready : 입출력이나 기다리던 사건이 종료된 경우.
'cs 스터디' 카테고리의 다른 글
[데이터 베이스] 정규화 (0) | 2024.01.10 |
---|---|
[데이터 베이스] 이상현상 (0) | 2024.01.10 |
[운영체제] CPU 스케줄링 (2) | 2024.01.05 |
[운영체제] 프로세스와 스레드 (2) (0) | 2024.01.05 |
[운영체제] 운영체제의 개념 (0) | 2024.01.01 |