프로세스 제어 블록

nGyu·2022년 3월 31일
1

OS

목록 보기
1/10

우리가 한번쯤은 프로세스 라는 단어를 들어봤을것이다.

그런데 그냥 프로세스 라는 단어를 들어보기만 했지 이게 정확히 무엇인지 아는사람은 소수의 사람이라 생각이 된다.

한번 이런 프로세스에 관련된 내용을 제대로 알아보자😎


프로세스 (Process)

우선, 사전적인 의미를 한번 알아보자 !

사전적인 내용으로는 “ 일이 처리되는 경로나 공정. “ , “ 컬러 원고를 사진 제판이나 컬러 스캐너로 색 분해를 한 다음 다색 인쇄용의 평판을 만드는 일. 또는 그렇게 만든 판" 이라고 한다.

네이버 어학사전을 통해서 알아본 내용인데, 우리가 알고있는 내용과 비슷한거 같으면서도 조금 다른 느낌이다. 이는 국어 사전적인 의미이고, OS에서 프로세스를 어떻게 정의하고 있을까?

위키의 힘을 좀 빌려보자.

프로세스는 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램을 말한다.

엇 이를 보니 대충 느낌이 오긴 한다 !

종종 스케줄링의 대상이 되는 작업(task)이라는 용어와 거의 같은 의미로 사용이 된다.
여러 개의 프로세서를 사용하는것을 “멀티 프로세싱" 이라고 하며, 같은 시간에 여러 개의 프로그램을 띄우는 시분할 방식을 “멀티태스킹" 이라고 한다.

이러한 설명들을 좀 보아하니 어느정도 이해가 된다.

그런데 갑자기 나오는 프로세서 이건 뭘까?

프로세서 / 프로세스

이름이 비슷한데 다 같은 내용 아닌가? 싶을것이다.
하지만 이 둘은 엄연히 다른 개념이다.

어떤 부분에서 서로 다른것일까?

프로세서

💡 프로세서(Processor)는 하드웨어적인 측면에서 바라본다고 이해하면 편하다.
컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛을 프로세서 라고 부르는데, 이는 대표적으로 중앙처리장치(CPU)를 뜻한다.

프로세스

💡 프로세스(Process)는 소프트웨어적인 측면에서 바라본다고 이해하면 편하다.
소프트웨어적으로 바라보면 편하다고 했는데, 이는 프로세서로 인해서 실행되는 “프로그램”이다.
즉, 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램이다.

이 두 개의 프로세서와 프로세스의 차이를 간단히 알아보았다. 자세히 보면 정말 재미있는 내용이긴 하다 !

프로세스 제어 블록

어라? 갑자기 이건 왜 튀어나오는걸까?

위에 프로세스가 “프로세서에 의해 실행되는 프로그램" 이라고 언급한 바 있는데, 프로세스는 관리가 필요하다.
왜 관리가 필요할까?

프로세스 관리

컴퓨터는 한번에 하나의 프로세스를 처리할 수 있다.
“어? 우리는 한번에 여러개의 프로그램을 켜고 실행하고 사용하지 않나요?”
라는 의문을 품을 수 있을것이다.

처음 언급한대로 한다면, 다수의 프로그램을 실행하기 위해서는 이전의 프로그램이 종료되고 새로운 프로그램이 실행될 때 까지 엄청난 시간을 들여가며 대기를 해야할것이다.

이는 즉, 우리가 여러개의 프로그램을 다루지 못한다는것이다.

이러한 불편함을 해소하기 위해 프로세스 관리 라는 개념을 통해서 우리는 여러 프로그램을 마치 동시에 실행하는 것 처럼 만들어야 한다.

OS에서는 위에 언급한 프로세스 관리 라는 개념을 통해 아주 짧은 시간 내에 CPU가 실행할 프로그램을 전환을 해 준다.

OS에서는 프로세스의 상태를 running, ready, block 상태로 분류하여 state transition을 통해 체계적으로 관리를 한다.

프로세스 제어 블록

자 프로세스 관리가 필요한 이유와, OS에서는 대략 어떤식으로 관리를 해주는지 간단하게 설명을 해 보았다.
이제 조금 더 자세히 알아보도록 하자.

프로세스 제어 블록은, Process Control Block 줄여서 PCB라고 한다.
이는 특정한 프로세스를 관리할 필요가 있는 정보를 포함하는 운영 체제 커널의 자료 구조이다.
작업 제어 블록 또는 작업 구조라고도 하는데, PCB는 운영 체제가 프로세스를 표현한것이다.

위키에서 정의한 내용을 살짝 언급을 해 보았는데, 이를 보면 알 수 있듯 프로세스를 관리할 필요가 있는 정보를 포함하는 운영체제 커널의 자료구조 라고 한다.

포함 정보

PCB에는 정말 다양한 정보가 포함이 되어있다. 운영체제별로 다르겠지만 일반적으로 아래의 정보는 포함이 되어있어야 한다.

  • 프로세스 식별자
  • 프로세스 상태 → create, ready, running, waiting, terminated
    • 이는 Stack으로 쌓인다.
    • 외에도 suspended ready라는 유예 준비상태 혹은 suspended waiting이라는 유예대기상태도 존재하는데, 이는 Stack 이 아닌 disk에 저장된다.
  • 프로그램 계수기 → 프로세스 다음에 실행할 명령어의 주소를 가리킨다.
  • CPU 레지스터 및 일반 레지스터
  • 스케줄링 정보 → 우선순위, 최종 시간, CPU 점유시간 등
  • 메모리 관리 정보 → 해당 프로세스의 주소 공간 등
  • 프로세스 계정 정보 → 페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 등
  • 입출력 상태 정보 → 프로세스에 할당된 입출력 장치 목록, 열린 파일 목록 등

위치

이러한 PCB는 어디에 존재하는것일까?
이 PCB위에 언급했듯 식별자와 명령어, 상태, 레지스터, 다양한 메모리 주소 등 민감한 정보들을 포함하고 있다. 그렇다보니 일반 사용자가 접근하게되면 문제가 생기게 되므로 보호된 메모리 영역 안에 남는다.

일부 운영체제에는 커널 스택의 맨 처음에 위치하는데, 이는 스택의 구조를 이해하면 어째서 맨 처음에 위치하는지 알 수 있으며, 추가로 이 위치에 저장을 하게 되면 정말 편리하면서도 보호를 받을 수 있는 위치에 저장을 하는것이다.


결론

프로세서와 프로세스는 하드웨어/소프트웨어 적으로 정말 완전 다른 개념이다.

우리는 당연하게도 다양한 프로그램을 열어두고 사용을 한다. (필자는 카톡과 크롬, 노션을 켜두고 공부한다)
하지만, 이는 OS에서 프로세스 제어 블록 이라는 운영체제의 자료구조 덕분에 가능한것이다.

이러한 자료구조를 PCB라고 하며, 이 PCB에는 민감한 정보를 다수 포함하고 있기 때문에 일반적으로 접근하기 어렵게 보호된 메모리 영역에 위치한다. 하지만, 일부 커널에서는 스택의 개념을 이용하여 맨 처음 스택에 넣기도 한다.

profile
지금보다 내일을, 모레를 준비하자

0개의 댓글