프로세스(Process)

Jay Lee·2023년 2월 20일
0

OS

목록 보기
2/2

프로세스의 정의

프로세스란 컴퓨터에서 운영체제로부터 할당받은 시스템 자원을 이용하여 실행중인 프로그램의 인스턴스 의미한다.

프로세스의 구조

프로세스는 크게 Code, Data, Heap, Stack 네가지 영역으로 구성되어 있다.

  • Code 영역: 프로그램 소스가 기계어로 컴파일되어 저장되는 부분이다.
  • Data 영역: 전역 변수가 저장되는 영역
  • Heap 영역: 코드에서 동적으로 생성되는 데이터가 저장되는 영역
  • Stack 영역: 임시 데이터(함수 호출, 로컬 변수 등)가 저장되는 영역
    Stack영역의 경우 주로 함수가 실행되었을 때, 하나의 영역

프로세스의 상태

프로세스는 다양한 상태를 가지며, 이러한 상태 전이는 운영체제에서 관리된다.
프로세스의 상태는 크게 다음과 같이 나눌 수 있다.

Active State

  1. Create (생성, =New):OS에 프로세스의 PCB가 생성이 되면서(시스템 자원을 할당 받음) 프로세스가 메인 메모리에 적재되어 실행 준비를 마친 상태이다. fork() 함수를 이용해 부모 프로세스가 자식 프로세스를 생성하고 메모리를 할당한다. fork는 자기 자신을 복사하지만 결국 다른 별도의 메모리를 갖게 된다. 따라서 자식 프로세스에서 변수의 값을 바꾸어도 부모 프로세스에 영향을 주지 않는다.
  2. Ready (준비): 프로세스가 CPU를 할당받기 위해 Ready Queue에서 자신의 차례를 기다리는 상태이다. CPU Scheduler가 준비 상태인 프로세스들 중 어떤 프로세스를 실행시킬 지 스케줄링 하는 역할을 한다. 이 때, 해당 준비상태의 프로세스는 CPU만 할당이 되면 바로 실행될 수 있어야한다. 즉, 실행에 필요한 메모리 이외의 모든 시스템 자원을 얻은 상태여야한다.
  3. Running (실행): Ready Queue에 있던 프로세스가 CPU를 할당받아 실제로 수행되는 상태이다.
    CPU scheduler가 dispatch()를 수행하면 준비상태에서 실행상태로 전이된다. 이 때, CPU를 할당 받을 수 있는 시간은 제한되어있는데 이를 CPU time quantum이라고 한다. 만약 해당 시간이 넘게되면 interrupt가 걸리고 CPU의 제어권이 프로세스로부터 OS로 넘어간다. OS는 그럼 Scheduler에 등록되어 있는 다음 사용자 프로세스에 CPU를 할당한다. CPU가 한개일 때, 실행 중인 프로세스는 항상 1개이다.
  4. Blocked (대기): 프로세스가 실행 상태에서 입출력이 필요할 때, 사용자 프로그램은 OS에게 CPU를 반환하고 OS가 대신 입출력을 수행한다 (IO 장치에 접근하는 모든 instruction은 OS를 통해서만 할 수 있다) 이 때 CPU는 block() 함수를 통해 해당 프로세스를 대기상태로 만들고 다른 프로세스에 대한 처리를 진행한다. 해당 I/O가 완료되면 interrupt가 발생하여 Waiting 상태의 프로세스 중에서 해당 프로세스를 찾고 wakeup()을 실행하여 다시 Ready Queue로 보낸다.
    • I/O를 기다리는 프로세스들은 CPU를 반납하고 Device Queue에서 각 디바이스의 입출력을 대기하게 된다. 이후 디스크 컨트롤러에 의해 서비스를 받아 일을 수행하면 디스크 컨트롤러가 CPU에게 일을 끝났음을 알린다(인터럽트). 이후 프로세스는 wakeup()을 통해 Device Queue에서 Ready Queue로 이동하고 (blocked -> ready) 프로세스가 한 일(로컬버퍼에 저장)은 메모리에 올라가게 된다.
  5. Terminated (종료): 프로세스가 자신의 작업을 모두 마치고 할당된 CPU를 반납운영체제가 PCB를 제거하고 메모리에서 빠져나간 상태이다. (시스템 자원을 모두 release한 상태) exit()를 통해 수행된다.

Inactive State

  1. Pause (휴식): 프로그램이 종료되지 않고 잠시 실행을 멈춘 상태 (=휴식상태). 메인 메모리에 PCB도 그대로 존재하며, 프로세스의 데이터도 유지된다. resume 명령어를 통해 재시작할 수 있다.
  2. Suspend (보류): 메모리가 꽉 차서 프로세스를 메모리 밖으로 내보내거나, 프로그램 오류로 인해서 실행을 미룰 때, 입출력이 계속해서 지연될 때 등 어떤 이유로 계속해서 프로세스가 실행되지 않을 때 보류 상태에 들어가게 된다. 이 때, 외부에서 재개시키지 않는 이상 다시 활성화 될 수 없다. 준비 상태(Ready)와 대기 상태(Waiting)에서 보류가 발생하면 각각 보류 준비 상태, 보류 대기 상태가 된다 (swap out). 보류 상태에서 메모리 밖으로 쫓겨난 프로세스는 SWAP영역에서 보관된다. suspended 상태에 있는 프로세스들은 메모리를 조금도 보유하지 않고 디스크로 통째로 swap out 된 상태로 존재하게 된다

※ blocked 와 suspended의 차이

blocked : 잠시 중지되어있다(blocked) 끝나면 다시 ready상태로 돌아옴
suspended : 잠시 중지되어 있다(suspendedn) 누군가가 재개시켜줘야 다시 ready상태로 돌아옴.

레지스터

레지스터는 CPU가 프로세스를 처리하는 데 필요한 정보를 일시적으로 기억하는 저장장치다. PC(Program Counter)와 SP(Stack Pointer)가 주요한 기능이다. PC는 코드를 한 줄 한 줄 가리키는 주소 레지스터이며, SP는 코드의 함수가 실행될 때 스택 프레임의 최상단 주소를 가리키는 레지스터다. 이 두 가지는 프로세스가 컨텍스트 스위칭(Context Switching)을 하는 등의 중요한 역할을 하도록 도와준다.

profile
Data Engineer

0개의 댓글