OS-프로세스(1)_구조와 역할

김명재·2023년 5월 7일
0

프로세스란?

우리는 다양한 프로그램을 컴퓨터에서 사용할 수 있다.

이러한 수많은 프로그램은 사용하기 전에는 보통 보조기억장치에 적재되어 있지만, 우리가 특정 프로그램을 사용하면 그 프로그램은 메모리에 적재되어 실행된다.

이렇게 메모리에 적재되어서 실행하는 순간부터 우리는 프로그램을 프로세스라고 말한다.

운영체제는 빠르게 번갈아 수행되는 프로세스의 실행 순서를 관리하고, 프로세스에 CPU를 비롯한 자원을 분배한다.

프로세스 제어 블록(PCB)

이를 위해 바로 운영체제는 프로세스 제어 블록을 이용한다.

프로세스 제어 블록은 프로세스와 관련된 정보를 저장하는 자료구조이다.

PCB는 커널 영역에 생성되어 운영체제가 수많은 프로세스들 사이에서 특정 프로세스를 식별하고 처리할 수 있도록 필요한 정보를 제공한다.

PCB에 담기는 정보들

그렇다면 PCB에는 어떤 정보들이 담기는 좀 더 자세히 알아보자.

  • 프로세스 ID
    프로세스 ID는 특정 프로세스를 식별하기 위해 부여한 고유 번호이다.

  • 레지스터 값
    프로세스는 자신의 실행 차례가 돌아오면 이전까지 사용했던 레지스터의 중간값들을 모두 복원한다. 그래야 이전까지 실행했던 작업들을 알고 그 후 작업을 처리할 수 있기 때문이다. (PCB 안에는 해당 프로세스가 실행되며 사용했던 프로그램 카운터를 비롯한 레지스터 값들이 담긴다.)

  • 프로세스 상태
    현재 프로세스가 어떤 상태인지 알려준다. 현재 프로세스가 입출력장치를 사용하기 위해 기다리고 있는 상태인지, CPU를 사용하기 위해 기다리고 있는 상태인지 등

  • CPU 스케줄링 정보
    프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보도 PCB에 기록된다.

Context Switching

이렇게 PCB를 바탕으로 context switching(문맥 교환)을 할 수 있다.

우선 Context Switching이 무엇인지 알아보기 전에 하나의 프로세스에서 다른 프로세스로 실행 순서가 넘어가면 어떤 일이 발생하는지 알아보자

X라는 프로세스가 운영체제로 부터 CPU를 할당받아 실행되다가 시간이 지나 운영체제가 Y라는 프로세스에게 CPU를 할당해준다. 이때 바로 직전까지 실행되던 프로세스 X는 프로그램 카운터를 비롯한 각종 레지스터값, 메모리 정보, 실행을 위해 열었던 파일이나 사용한 입출력장치 등 지금 까지의 중간 정보를 백업한다.

그래야 다음에 실행 차례가 왔을때 순조롭게 재실행될 수 있기 때문이다.

이렇게 중간 정보, 즉 하나의 프로세스 수행을 재개하기 위해 기억해야 할 정보를 바로 문맥이라고 한다.

그리고 이런 기존 프로세스의 문맥을 PCB에 백업하고, 새로운 프로세스를 실행하기 위해 문맥을 PCB로 부터 복구하여 새로운 프로세스를 실행하는 것을 바로 Context Switching이라고 한다.

프로세스의 구조

PCB는 메모리 중에서 커널 영역에 저장된다고 하였다. 그렇다면 사용자 영역에는 프로세스에 관한 어떤 정보가 담길까?
하나의 프로세스는 크게 코드 영역, 데이터 영역, 힙 영역, 스택 영역 이렇게 4가지로 나뉜다.

1.코드 영역

코드 영역은 텍스트 영역이라고도 불린다. 이곳에는 실행할 수 있는 코드, 즉 기계어로 이루어진 명령어가 저장된다.

코드 영역에 저장되어 있는 명령어는 CPU가 실행할 명령어들이기 때문에 쓰기가 금지되어 있다.

다시 말해 코드 영역은 읽기 전용 공간이다.


2.데이터 영역

프로그램이 실행 될 동안 사용할 데이터를 저정하는 공간이다.


3.힙 영역

힙 영역은 프로그램을 만든 사용자가 직접 할당할 수 있는 저장 공간이다.

프로그래밍 과정에서 힙 영역에 메모리 공간을 할당 했다면 언젠가는 해당 공간을 반드시 반환해야 한다.

메모리 공간을 반환하지 않는다면 할당한 공간은 메모리 내에 계속 남아 메모리를 낭비하는 문제인 메모리 누수가 발생하기 때문이다.


4.스택 영역

데이터를 일시적으로 저장하는 공간이다.

보통은 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터를 임시로 저장하는 용도로 쓰인다.

이 영역에는 함수가 호출되면 기록되고 함수의 수행이 완료되면 기록이 사라진다.

일시적으로 저장한다는 것은 데이터 영역에 담기는 값과는 달리 잠깐 쓰다가 버릴 것이라는 얘기이다.

힙 영역과 스택 영역은 실시간으로 그 크기가 변할 수 있기 때문에 동적 할달 영역이라고 부른다.

일반적으로 힙영역은 메모리의 낮은 주소에서 높은 주소로 할당 되고, 스택 영역은 높은 주소에서 낮은 주소로 할당 된다.

그래야만 힙 영역과 스택 영역에 데이터가 쌓여도 새롭게 할당되는 주소가 겹칠 일이 없어지기 때문이다.

profile
steadyness is all time way

0개의 댓글