본문 바로가기
운영체제

운영체제 - 프로세스 구조

by icblue21 2022. 12. 7.
728x90

프로세스 구조

 

프로세스는 일반적으로 다음과 같은 구조를 가진다.

프로세스의 구조

text(code) : 프로그래밍 코드를 담는 공간

data : 변수/초기화된 데이터를 담는 공간

stack : 임시 데이터(함수 호출, 로컬 변수 등)을 담는 공간

heap : 코드에서 동적으로 만들어지는 데이터를 담는 공간

 

Q. 구조를 잘 살펴보면 스택과 힙 사이의 공간은 비어져 있고 데이터를 저장하며 공간을 채워나가게 끔 되어 있다. 그럼 만약 재귀함수 호출이 엄청나게 많이 호출이 되면 어떻게 될까?

A. 재귀함수 호출로 인해 stack에 굉장히 많은 데이터가 쌓이게 되고 더 이상 저장할 수 없게 되면 에러가 나게 된다.

 

함수호출 뿐만 아니라 객체 생성도 마찬가지다. 객체를 굉장히 많이 생성하게 되면 결국 heap이 데이터를 감당하지 못하고 에러가 나게 된다. 때문에 java에서는 garbage collector를 이용해 힙에 참조되지 않는 객체(불필요한 객체)가 있으면 그것을 삭제하여 공간을 확보하는 메모리 관리 기법을 사용한다.


컨텍스트 스위칭 (Context Switching)

 

컨텍스트 스위칭은 멀티프로세스 환경에서 CPU가 어떤 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선순위 프로세스를 실행시켜야 할 때 기존의 프로세스 상태 또는 레지스터 값(Context)를 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 말한다.

 

여기서 컨텍스트는 프로세스의 PCB(Process Control Block)에 저장되어 있는데 PCB를 살펴보면 다음과 같다.

 

PCB에는 다양한 정보가 저장되는데 그 중 중요하게 알아야 할 것을 정리해보았다.

 

1. 프로세스 상태 : 생성, 준비, 수행, 대기, 중지

2. 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소

3. 레지스터 : 누산기, 스택 등

4. 프로세스 번호

 

컨텍스트 스위칭을 세부적으로 살펴보면 다음과 같이 동작한다고 볼 수 있다.

 

1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 저장해서 메인 메모리에 저장

2. 다음 실행할 프로세스의 정보를 메인 메모리에 있는 해당 프로세스의 PCB 정보(PC, SP)를 CPU 레지스터에 넣고 실행


프로세스간 커뮤니케이션 (InterProcess Communication)

 

프로그램의 성능을 높이기 위해 여러 프로세스를 만들어 동시에 실행시키는 경우가 많다. 이 때 프로세스간 상태 확인 및 데이터 송수신이 필요한데, 프로세스는 기본적으로 다른 프로세스의 공간을 접근할 수 없다. 왜냐하면 안정성을 위해 운영체제에서 자기 프로세스의 메모리에만 접근할 수 있도록 강제하고 있기 때문이다.

 

그래서 프로세스간 통신을 위해 IPC(InterProcess Communication) 기법이 등장했다.

 

IPC 기법은 file 사용, message queue, shared memory, pipe, signal, semaphore, socket 등 다양한 기법이 있는데 file을 제외하곤 모두 커널 공간을 활용한다는 것이 핵심이다. 왜냐하면 커널 공간은 공유하기 때문이다.

 

Q. file 사용 기법은 왜 잘 안쓸까?

A. file 사용 기법은 실시간으로 직접 원하는 프로세스에 데이터를 전달하는 것이 어렵기 때문이다. 디스크에서 파일을 읽고 프로세스에 로드되는 과정에서 컨텍스트 스위칭, 인터럽트 등 여러가지 일을 처리하기 때문

 

 

 

 

 

 

 

 

 

댓글