운영체제

[운영체제] 프로세스 뜻, 프로세스 상태

미 성 2024. 4. 17. 14:39


💡 프로그램과 프로세스의 차이는 무엇일까요? 🤔

프로그램 : 하드 디스크에 저장되어 있는 실행 파일.
프로세스 : 프로그램이 메모리에 로드되어 실행되는 상태
프로그램이 실행되면 운영체제는 프로그램을 메모리에 적재한 후 프로세스를 생성함.
프로세스는 프로그램의 실행 단위임. 🐈


 


 
💡 프로세스가 메모리에 로드되면
갖게 되는 메모리 구조
 
- 코드 영역 : 프로그램의 실행 코드 저장
- 데이터 영역 : 전역변수, 정적 변수
- 힙 영역 : 동적 할당 메모리 저장
- 스택 영역 : 함수 호출 시 사용되는 임시 데이터 저장




 .
*  PCB (프로세스 제어 블록)
: 프로세스를 관리하기 위해 운영체제가 사용하는 구조체. 프로세스와 관련된 모든 정보가 저장됨(pid,context,pc…). 운영체제는 PCB를 통해 프로세스의 생성, 수정, 삭제 등의 작업을 수행함. 프로세스 별로 고유한 PCB가 존재. 프로그램이 메모리에 올라감과 동시에 생성
 


 
 
* 프로그램과 프로세스의 가장 큰 차이점 중 하나

: 프로세스는 STATE가 다양하지만,
  프로그램은 STATE가 하나다.
 
프로그램 : 실행 가능한 파일 ( 정적인 개념 )
STATE : 실행 가능한 상태
프로그램은 메모리에 로딩되기 전까진 실행되지 않는다.

 
 
 
💡 TIME SHARING 시스템에서
프로세스의 상태는 어떻게 관리되고 있을까 ?
 
프로세스가 CPU를 얻어 실행되던 중 다른 프로세스에게 CPU를 넘겨주는 일이 빈번하기 때문에, 프로세스의 상태는 다양하며, 복잡하다. ( EX. 하나의 cpu인 경우 한 번에 하나의 프로세스만 실행할 수 있기 때문에, 자신의 순서가 올 때까지는 준비 상태 ready state로 기다려야 함) 

 
 

프로세스의 5가지 상태 모델

  1. New (생성):
    •    프로세스가 생성되어 시스템에 도입되는 상태입니다.
    •    프로그램이 실행되면 프로세스가 생성되고 이 상태가 됩니다.
    •    이 상태에서는 프로세스가 아직 준비되지 않은 상태입니다.
    •    여기서 PCB 생성 등이 일어납니다.
  2. Ready (준비):
    •    프로세스가 CPU를 할당받기 위해 대기하는 상태입니다.
    •    "CPU" 단 하나만 빼면 필요한 모든 Resource를 갖춘 상태입니다.
    •    프로세스가 New 상태에서 준비 상태로 전환되거나, Running 상태에서 Blocked 상태로 전환된 후 다시 준비 상     태로 돌아올 수 있습니다.
    •    준비 상태의 프로세스들은 CPU 스케줄러에 의해 Running 상태로 전환됩니다.
  3. Running (실행):
    •    프로세스가 CPU를 할당받아 실행 중인 상태입니다.
    •    Ready 상태의 프로세스 중 하나가 CPU 스케줄러에 의해 선택되어 Running 상태가 됩니다.
    •    프로세스가 I/O 작업이나 인터럽트 등으로 인해 Blocked 상태로 전환되거나, 시간 할당이 끝나면 Ready 상태로전환됩니다.
  4. Blocked (대기):
    •    프로세스가 I/O 작업이나 이벤트 발생을 기다리는 상태입니다.
    •    프로세스가 I/O 요청을 하거나 자원을 기다리는 경우 Blocked 상태가 됩니다.
    •    Blocked 상태의 프로세스는 Ready 상태로 전환되기 위해 대기합니다.
  5. Exit (종료):
    •    프로세스가 완료되어 시스템에서 제거되는 상태입니다.
    •    프로세스가 정상적으로 종료되거나, 오류로 인해 강제 종료되면 이 상태가 됩니다.
    •    종료된 프로세스는 더 이상 시스템에서 실행되지 않습니다.

 



 
 
아까 다룬 것은 5 PROCESS STATE인데,
이번 그림은 7 PROCESS STATE 입니다 .
좀 더 복잡해보이지만 큰 차이는 없습니다. 그저 일부 프로세스가 메모리가 아닌, 디스크에 잠시 저장될 뿐이에요.
 
아시다시피 프로세스는 메모리에 있어야 실행이 가능한데, 메모리의 크기는 한정적입니다. 따라서 메모리가 다소 부족한 상황이라면, 상대적으로 덜 쓰이는 프로세스들을 잠~깐 디스크에 내려보내는 것입니다. 이 디스크의 일부 공간을 swap space라고 합니다. 메모리가 부족하면 우선적으로 BLOCKED 프로세스들을 내려보내겠지만, 그럼에도 메모리가 부족할 때 READY 프로세스까지 내려보내게 되겠죠. 이렇게 메모리와 디스크 사이에서 이동되는 일련의 과정을 Swapping이라고 합니다.
 
 
Ready/suspend 프로세스의 경우 비록 swap space에 있지만 실행에 필요한 resource들은 모두 갖춘 상태입니다. (딱 하나 cpu빼고). 또한, 사진과 같이 new 상태에서 Ready/suspend 상태로 전이될 수도 있습니다.
그리고 Blocked/suspend 상태는 Ready/suspend를 거쳐야 Ready 상태에 도달할 수 있답니다.
 

[ swapping ]

이 또한 I/O 작업이기 때문에(디스크 I/O작업이 필요하므로) 오버헤드가 생길 수 있습니다.
 
* Swap in
: 프로세스의 일부 또는 전체를
swap space에서 메인 메모리로 가져오는 과정
 
* Swap out
: 프로세스의 일부 또는 전체를
메인 메모리에서 swap space로 내보내는 과정.

 
 
 
+
 
💡 CONTEXT SWITCH

: CPU를 차지하던 프로세스가 나가고, 준비 상태에 있던 프로세스를 새롭게 받아들이는 작업. 
( 기존 프로세스가 복귀하는 건 context switch라고 하지 않음.)