CPU의 구조와 멀티테스킹, 멀티프로세스 멀티스레드, PCB 과 Context switching

devAnderson·2022년 5월 24일
0

CS

목록 보기
3/5

🚍 0. 정리의 이유

최근 기술 면접들을 보는 중, 한 기업에서 자료구조와 알고리즘과 같은 기초 CS 지식을 물어보는 경우가 있었다. 슬프게도, 거진 대부분의 내용에 대해서 답변을 제대로 하지 못했다고 스스로 판단하고 있다. 차라리 아예 몰랐다면 모를까, 전에 한번 공부했다고 생각했는데 전부 다 까먹어서 대답하지 못한 건 큰 실책이다. 지식적 부끄러움의 경험을 다신 잊지 말자는 절치부심의 마음으로 항상 이 첫번째 헤더는 유지하면서 매일 CS 공부를 조금씩 정리하도록 한다.

🚍 1. CPU의 구조와 멀티테스킹, 멀티프로세싱, 멀티스레드

CPU는 소프트웨어의 명령어를 해석한 뒤 데이터를 연산/ 처리하는 기능을 가진 칩을 말한다.

이때, 소프트웨어의 명령어를 읽고 해석하는 역할을 담당하는 것을 프로세서라고 한다. 그리고 총괄적인 핵심 연산을 담당하는 것이 코어이다. 또한 내부에는 반복작업에 대해 기억해두었다가 빠르게 불러올 수 있는 캐시메모리와 현재 실행중인 프로그램에 대한 정보인 레지스터 역시 존재한다.

프로세서

내부 구조는 아래와 같다
1. control unit : 해석된 명령어를 다른 하드웨어로 전기신호를 보내는 장치이다
2. 연산장치 : 덧셈 뺄셈과 같은 사칙연산과 AND,OR과 같은 논리연산을 담당하는 장치이다.

코어

CPU 내에서 핵심적인 연산을 총괄하는 역할을 한다. 하드웨어적으로 작업의 연산처리를 코어가 담당한다면, 소프트웨어적으로 작업을 논리단위로 처리하는 것을 스레드가 담당한다.

이 코어의 갯수가 하나면 싱글코어, 많아질수록 더블 트리플 멀티로 늘어나며 코어가 많을수록 연산 속도가 당연히 빨라진다.

코어 자체적으로는 클럭이라고 하는 한번 들어오는 전기적 신호에 대해서 얼마나 많은 양을 처리할 수 있는지에 대한 능력치가 존재한다. Hz를 단위로 표현한다. 즉, 1초의 타이밍에 얼마나 많은 전기 신호 (1과 0) 을 처리할 수 있는지를 표현한 것이 클럭이다.


멀티 프로세싱

즉, CPU에 존재하는 여러개의 프로세서가 병렬적으로 일을 처리하는 것을 뜻한다.

하나의 프로세서가 고장나더라도 다른 프로세서들이 작업을 나누어 실행하기 떄문에 신뢰성이 높다는 장점이 있다.

멀티 프로세싱의 방법은 크게 2가지로 나뉜다

  1. 대칭형 멀티 프로세싱 : OS가 모든 프로세서를 관리하는 형태이다. 자원을 서로 공유하며 사용하기 떄문에 동기화가 필요하다.
  2. 비대칭형 멀티 프로세싱 : 하나의 메인 프로세서가 다른 프로세서들에게 작업을 스케듈링하여 일을 할당하는 형태이다.

멀티 테스킹

프로그램이 실행되면, 프로세스가 되고 이 프로세스는 내부에서 쓰레드들을 이용하여 작업처리를 진행하는데 이 쓰레드는 CPU의 한정된 자원을 서로 사용해야 하는 경쟁관계에 있다. 따라서 이 자원을 효과적으로 분배하여 작업을 효과적으로 스위칭하는 방식을 취하는데 이것이 멀티 테스킹이다.

이 멀티 테스킹을 위한 방법으로는 비선점형과 선점형으로 나눌 수 있다.

  1. 비선점형 : CPU의 자원을 차지하고 있는 쓰레드가 더이상 자신이 CPU 연산이 필요없음을 운영체제에 알렸을 떄에만 운영체제가 이 자원을 회수할 수 있는것을 뜻한다.
  2. 선점형 : 반대로 운영체제가 응답이 없는 프로세스를 강제로 정지하고 CPU 자원을 회수할 수 있는 것을 뜻한다.

🚍 2. PCB 과 Context switching

PCB는 Process control Block의 줄임말이다.

OS는 소프트웨어고, 이것은 컴퓨터가 부팅되는 순간 실행에 필요한 요소들의 집합인 커널을 메모리에 탑재하여 구동된다고 하였다.
이 커널은 이후 프로그램들이 실행될 때 적절하게 컴퓨터의 리소스 자원들(heap, stack, code, data)을 분배한 뒤 메모리 공간을 확보시켜 프로그램들을 구동시키는데 이것을 프로세스라고 하였다.

즉, 커널은 프로세스들을 관리하기 위한 특수한 자료구조를 갖게 되는데 이것을 바로 PCB라고 한다. 프로세스가 생성이 될 때마다 고유의 PCB가 생성이 되고 프로세스가 완료되어 사라지면 제거된다. 다시 말하자면 PCB란 OS 커널이 현재 실행중인 각각의 프로세스에 대한 중요정보를 저장해놓는 저장 장소를 뜻한다

존재 이유

위에서 언급했듯, CPU의 자원인 코어와 프로세서들은 한정적이기 때문에 멀티 테스킹을 위해서는 운영체제의 적절한 스케듈링이 필요하다. 이 때에, 선점형 멀티 테스킹과 같이 특성 프로세스의 CPU 점유를 정지시키고 다른 프로세스를 우선적으로 실행하는 교체 작업이 진행된 뒤, 다시 기존의 프로세스를 실행상태로 변경시키는 등의 인터럽트를 해결하기 위해서는 기존 프로세스의 정보 내용이 존재해야 한다.

즉, 다시금 말하자면 위에서 언급했듯

CPU 내에는 "현재 어떤 프로세스가 자신의 자원을 점유중이며 어떤 연산처리를 진행중이고 현 스레드의 스텍 포인터는 어디까지이며 등등" 와 같은 처리정보에 대한 내용을 기록하는 레지스터가 존재한다.

이 때에 갑자기 다른 프로세스로 처리를 교체해야 할 경우, 기존에 있던 프로세서의 레지스터 정보 내용을 PCB에 등록하고 다른 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정을 "Context Switching" 이라고 한다.

PCB에 담기는 중요 요소는 아래와 같다.(이 외에도 다양한 정보들이 있지만 일단 암기용으로 작성)

이름 설명
Process Id 프로세스 관리를 위한 고유아이디. PID
Process state 프로세스 상태. ready, waiting, running, terminated 등
Pointer 다음 실행될 프로세스를 가리키는 포인터
Priority 스케쥴링과 프로세스 우선순위

profile
자라나라 프론트엔드 개발새싹!

0개의 댓글