개인공부/컴퓨터 구조와 운영체제

[컴퓨터구조와 운영체제] 프로세스

개바리여리 2025. 1. 13. 11:56

프로그램은 실행 이전까지는 보조기억장치에 있는 데이터 덩어리 일뿐이다.

메모리에 적재하여 실행하는 순간 프로그램이 동작하고 프로세스가 된다.

 

 

프로세스 종류

  • 포그라운드  프로세스 : 사용자가 볼 수 있는 공간에서 실행되는 프로세스
  • 백그라운 프로세스 : 사용자가 볼 수 없는 공간에서 실행되는 프로세스 (데몬, 서비스라고도 부른다.)

 

 

모든 프로세스는 CPU를 필요로 하지만 CPU의 자원은 한정적이다. 그렇기에 이 자원을 효율적으로 관리하고 분배해야 한다.

그래서 프로세스들은 돌아가며 한정된 시간만큼 CPU를 이용하고 타이머 인터럽트가 발생되면 차례를 양보한다.

이렇게 빠르게 번걸아가며 수행되는 프로세스들을 제어하는 자료구조가 프로세스 제어 블록(PCB)이라고 한다.

 

PCB: 프로세스 관련 정보를 저장, 프로세스 생성시 커널 영역에 생성되고 종료시 폐기된다. (상품의 태그 같은 정보)

  • 프로세스 ID (PID) : 프로세스 고유 식별번호
  • 레지스터 값 : 자신의 차례가 오면 이전까지 사용한 레지스터 중간 값을 모두 복원하기 위해 저장. 
  • 프로세스 상태 : 입출력 장치의 사용을 위한 상태, CPU 대기상태 등등
  • CPU 스케줄링 정보 : 프로세스가 언제, 얼마만큼 할당받을지에 대한 방식
  • 메모리 정보 : 프로세스가 어느 주소에 저장되어 있는지에 대한 정보, 페이지 테이블 정보
  • 사용한 입출력장치 정보 : 할당된 입출력장치, 사용 중인 파

* 운영체제는 커널 영역에 pcb를 통해 프로세스를 관리한다.

문맥교환 (context switch)

프로세스 간의 실행 흐름이 넘어갈때 발생한다.

기존에 실행되었던 프로세스는 중간정보를 백업한다. (중간정보 = 문맥, 다음차례가 왔을때 재실행을 위한 정보)

실행중인 프로세스가 변경될때 해당 프로세스의 문맥을 복구한다. 

 

 

 

프로세스의 메모리 영역

 

1. 코드영역 : 텍스트 영역, 기계어로 이루어진 명령어를 저장한다. 데이터가 아닌 명령어가 담긴다. (readonly 속성, 수정금지)

 

2. 데이터 영역: 잠깐 썼다 없앨 데이터가 아닌 전역적으로 관리되는 전역 변수를 저장한다. (크기가 고정되어 있어서 코드+데이터영역은 변경될 일이 없기 때문에 정적 할당 영역이라고 부른다.)

 

3. 힙 영역 : 개발자가 직접 할당 가능한 공간 , 여기있는 데이터는 사용후에 반환해야 하는데 요즘은 가비지 컬렉터들이 알아서 해준다.

 

4. 스택 영역: 데이터가 일시적으로 저장되는 공간, 일시적으로 사용할 데이터를 담는다. 매개 변수 or 지역 변수

 

힙 + 스택은 동적으로 크기가 변할 수 있기 때문에 동적 할당 영역이라고도 부른다.

 

 

프로세스 상태

  • 생성 상태 : 메모리에 적재되어 PCB를 할당 받은 상태, 준비가 완료되면 준비 상태로 간다.
  • 준비 상태 : 자신의 차례가 아니기때문에 대기하는 상태 (당장 실행가능) , 실행상태로 바뀌는 것을 디스패치라 한다.
  • 실행 상태 : CPU를 할당받아 실행 중인 상태, 할당시간 모두 사용하면 준비상태로 변환,                                                실행 중에 입출력장치를 사용하면 작업일 끝날 때까지 대기 상태로 있는다.            
  • 대기 상태 : 프로세스가 실행 중에 입출력장치를 사용하는 경우, 입출력작업은 CPU에 비해 느리기 때문에 대기상태가 존재, 작업이 끝나면 준비 상태로 돌아간다.
  • 종료 상태 : 프로세스가 종료되고 PCB, 메모리 영역 졍

 

 

 

프로세스 생성 기법 (리눅스관련)

 

부모 프로세스는 fork 시스템 호출을 통하여 자신의 복사본을 자식 프로세스로 생성한다.

fork => 복사본을 자식프로세스에 생성하고, 부모의 자원을 상속해준다. 

 

자식 프로세스는 exec 호출을 통하여 자신의 메모리 공간을 다른 프로그램으로 교체한다.

exec => 메모리 공간을 새로운 프로그램으로 덮어쓴다.

 

 

 

출처 : https://www.youtube.com/watch?v=wz9C_vqME8g&list=PLVsNizTWUw7FCS83JhC1vflK8OcLRG0Hl&index=29