1. 프로세스(Process)와 프로그램(Program)

프로그램은 하드디스크 위에 고정되어 있는 코드와 데이터의 집합→ 죽어있는 상태

프로세스는 이 프로그램을 실제로 메모리에 올려 CPU가 명령어를 하나씩 실행하는 것 → 살아있는 존재

  • 프로그램: 하드디스크 상의 정적인 명령어와 데이터 묶음
  • 프로세스: 메모리에 로드되어 CPU가 실행 중인 “활동하는” 프로그램

쉽게 말해, 게임 실행 파일 아이콘은 그냥 프로그램이고, 그것을 더블 클릭해서 게임이 실제로 화면에 움직이는 상태가 되면 그게 프로세스입니다.

 


 

2. 왜 프로세스가 중요할까?
우리는 평소 컴퓨터로 작업할 때 여러 프로그램을 동시에 켜놓음.

여러 작업이 동시에 실행 중인 것처럼 보이는데, 사실 CPU는 한 번에 하나의 명령만 처리할 수 있다.


그렇다면 어떻게 여러 프로세스가 동시에 동작하는 것처럼 보일까요?


운영체제는 CPU를 빠르게 돌아가며 여러 프로세스에 할당하는 시분할(time sharing) 기법을 사용.

ex) 한 프로세스를 실행 가능한 시점까지 실행하고, I/O 등 CPU를 사용하지 않는 작업을 할 때는 다른 프로세스를 실행.

 


 

3. 메커니즘(mechanism)과 정책(policy)
CPU 가상화를 잘 구현하기 위해서는 두 가지가 필요함.

  • 메커니즘: 어떻게 프로세스를 멈추고 다른 프로세스로 넘어가는지, 프로세스를 만들고 종료시키는 방법은 무엇인지 등의 구체적인 수단과 방법
  • 정책: 여러 개의 프로세스가 실행 대기 중일 때 어느 프로세스를 먼저 실행할지, 어떤 기준으로 CPU 사용 순서를 정할지 등의 결정 방법

메커니즘과 정책을 독립적으로 분리해두면, 나중에 정책을 바꾸더라도 메커니즘 부분을 변경하지 않아도 되고, 반대로 메커니즘을 바꿔도 정책은 그대로 둘 수 있어 편리하다.

 


 

4. 프로세스의 구성 요소

  • 메모리(주소 공간): 코드(실행 명령)데이터(변수), 힙(동적으로 할당되는 메모리), 스택(함수 호출 정보와 지역 변수)
  • CPU 레지스터 상태: 현재 어느 명령어를 실행 중인지 알려주는 프로그램 카운터(PC), 스택 포인터(SP), 각종 일반 레지스터 값 등
  • 입출력 상태: 현재 열려있는 파일들, 표준 입력/출력(키보드, 모니터), 네트워크 소켓 등
  •  

 

5. 프로세스의 생애주기(상태 전이)

  • 생성(Create) : 프로세스가 생성되는 중
  • 실행(Running) : 프로세스가 프로세서를 차지하여 명령어들이 실행 중
  • 준비(Ready) : 프로세스가 프로세서를 언제든지 사용할 수 있는 상태로, 프로세서 할당 대기 중.
  • 대기(Waiting) : 프로세스가 입출력 완료, 시그널 수신 등 디스크나 네트워크 입출력을 기다리고 있는 상태.
  • 종료(Terminated) : 프로세스의 실행 종료.

프로세스는 필요에 따라 이 상태들을 오가게 됨.
ex) A프로세스가 실행 중(Running)이었는데, 갑자기 파일을 읽어야 한다면 디스크 입출력이 끝날 때까지 대기(Waiting) 상태로 전환되고, 이때 다른 프로세스가 CPU를 차지(Ready→Running)하게 되는 식입니다.


7. 프로세스의 생성과 종료

  • 프로세스 생성(Create): 디스크에 있는 프로그램 코드를 메모리에 올리고, 스택과 힙을 초기화한 뒤, 표준 입력/출력 설정한 후 main 함수 실행.
  • 프로세스 종료(Destroy): 프로세스가 할 일을 모두 마치면 종료. 프로그램 내부에서 종료 요청을 하거나(예: return 0;), 사용자가 강제로 종료. 프로세스가 종료되면 운영체제가 점유 중이던 메모리나 파일 등의 자원을 다시 회수.

 

 

 

+ Recent posts