프로세스는 무엇일까요?
흔히들 "프로세스가 실행 중입니다" 라는 안내 문구를 종종 보셨을거에요. 이걸 보고 프로세스가 실행중이면 프로그램이 실행중이구나 라고 생각하실텐요, 프로세스는 실행중인 프로그램 파일을 말합니다. 실행 파일 형태로 된 프로그램이 메모리인 RAM에 적재되어서 CPU에 의해 연산이 되는 것이지요.
메모리는 CPU가 직접 접근할 수 있는 휘발성 내부 저장장치 입니다. CPU가 살아 있을때 접근할 수 있는 저장장치라, CPU가 꺼졌을때, 즉 컴퓨터의 전원이 꺼졌을때, 메모리에 저장된 내용도 함께 날아가지요.
그래서 컴퓨터가 꺼져있을때, 또는 해당 프로그램이 실행중이 아닐때, 하드디스크 등의 보조기억장치에 프로그램 실행파일들이 저장되어 있습니다. 그러다가 CPU가 켜졌을때, CPU가 일하고자 할때, 특정 프로그램을 실행하고자 할때 보조기억장치에 있던 실행파일을 메모리에 적재해서 CPU가 일할 수 있게 합니다.
비유적으로 살펴보면 보조기억장치는 책장, RAM은 책상이라고 생각할 수 있어요.
정리정돈을 잘하는 CPU라는 사람이 일을 하려고 할때, 책장에서 책을 꺼내와 책상에 올려놓고 책을 읽으면서 일을 하다가, 일을 그만둘때 책들을 다시 책장에 꽂아놓고 책상을 정리하는 것과 비슷해요
프로그램(프로세스)이 메모리를 할당받는다는 얘기를 많이 들어보셨을거에요. 프로세스는 RAM에 적재될때, 프로세스만의 메모리를 따로 할당받는데, 그 영역에는 4가지가 있습니다.
코드 영역은 실행 프로그램의 실행 코드 들이 저장되어 있습니다. 그래서 이 영역에 저장된 코드를 한 줄 한줄 읽을 수 있는 거에요
그 다음 데이터 영역은 전역변수나 static변수, 클래스, struct(스위프트)등의 구조체가 저장되어 있습니다. 프로그램이 실행되는 전반에서 접근이 가능해야 하는 것들이 저장되는 것이지요
그 다음 Heap영역은 개발자가 직접적으로 메모리를 할당/제거 해줘야 하는 것들이 담기고, Stack 영역은 함수가 실행되면서 생성되는 private 변수, 전달인자 등이 일시적으로 저장됩니다. stack은 함수 실행이 끝나면 자동적으로 삭제되며, 이 특성은 Heap 영역에 저장되는 것과 다릅니다.
위에서 메모리에 코드 영역에 실행 프로그램의 코드들이 저장되어 있는데, 어떤 코드를 어떤 순서로 작동해야 하는지 어떻게 알 수 있을까요? 간단한 예로 함수가 사용되는 실행파일을 생각한다고 할때, 2~9번째 줄에 함수를 구현한 코드가 있고, 함수가 실행되는 부분은 52번째 줄에 있다고 가정할게요. 그렇게 되었을때, 파일이 실행될때 2~9번째 줄은 건너뛰었다가 52번째 줄을 읽고 함수가 불려온다는 것을 알고 다시 2~9번째 줄을 가야 합니다.
이렇게 어떤코드가 어떻게, 언제 실행되어야 하는지 아는 것은 CPU 내부의 Program Counter(PC) Register라는 친구가 역할을 해줍니다. PC 레지스터는 실행 되어야할 코드가 있는 주소를 저장하고 있는데, Process에 할당되어 있는 메모리의 Code 영역을 CPU가 읽어야 할때, PC 레지스터가 다음번에 읽어야 하는 명령어의 주소값을 순차적으로 가르키고, 이를 CPU가 읽어와서 연산을 하게 됩니다. 이 과정을 거쳐서 프로세스가 실행되게 됩니다.
'CS > 운영체제' 카테고리의 다른 글
멀티 프로세스와 멀티 스레드 1 - 멀티 프로세스란? (0) | 2023.05.31 |
---|