[PINTOS-KAIST] project. 1-1 - 개념 - 프로세서, 프로세스, CPU와 기억장치들

조해빈·2023년 5월 25일
0

PINTOS

목록 보기
3/9
post-thumbnail

프로세서(Processor)

  1. 하드웨어적인 측면에서 :

컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛.
CPU, GPU와 같은 중앙처리장치를 일컫는다.

  • 폰노이만 아키텍쳐에 의해 만들어졌다면, 적어도 하나 이상의 ALU(Arithmetic Logic Unit)와 레지스터(Register)를 내장하고 있어야 한다.
  • 범용 프로세서: 노트북이나 데스크탑 또는 서버에 사용되는 프로세서들. 특정 목적이 아닌 범용적으로(일반적인 다양한 목적) 사용할 수 있다.
  • 전용 프로세서: 네트워크 장비(라우터, 스위치, IP공유기, 스위칭허브 등)에 포함되어 있는 '네트워크 프로세서', 디지털 미디어 기기(MP3, 디지털피아노 등)에 사용되는 'DSP(Digital Signal Processor)' 등 매우 다양한 종류의 특정 목적에 적합하게 설계된 중앙처리장치들이다.
  1. 소프트웨어적인 측면에서 :

데이터 포맷을 변환하는 역할을 수행하는 데이터 프로세싱 시스템(데이터 처리 시스템).

애매하다고는 하지만, 워드프로세서와 컴파일러, 어셈블러 등이 포함된다고 볼 수 있으며 출력 가능한 인쇄물을 생성하는 워드프로세서도 프로세서라 부를 수 있는 성 싶다. 이 분류는 어느 정도 개발자마다의 주관이 개입되는 것 같다.

CPU:

중앙처리장치(Central Processing Unit)
컴퓨터 시스템을 통제하고 프로그램의 연산을 실행 · 처리하는 가장 핵심적인 컴퓨터의 제어 장치, 혹은 그 기능을 내장한 칩.

보통 우리가 쓰는 전통적인 코드는 CPU 프로세서에서 처리된다.
대표적인 브랜드로 Intel이 있다.

GPU:

그래픽 처리장치(Graphical Processing Unit)
컴퓨터 시스템에서, 그래픽 연산을 빠르게 처리하여 결과값을 모니터에 출력하는 연산 장치.

대표적인 브랜드로 NVIDIA가 있다.

프로세서와 운영체제의 관계, 프로세서의 역할

프로세서는 1️⃣ 컴퓨터 동작 제어를 위한 제어장치이자 2️⃣ 연산 수행을 위한 연산장치이다. 3️⃣ 레지스터와 캐시라는 기억장치를 통해 메모리를 운영/관리한다.

운영체제(OS)는 프로세서가 처리할 프로세스를 할당하는 역할을 한다. 특히 여러 프로세스를 동시에 처리해야 할 때(multi-processing), 각 프로세스의 처리 순서나 순서 변경 로직을 정하는 것이 바로 운영체제의 역할이다.

여기서 프로세서와 구분되는 '프로세스'라는 건 어떻게 정의해야 할까?

프로세스(Process):

메모리에 적재되어 프로세서에 의해 실행 중인 프로그램.
프로그램의 최소 실행 단위.

컴퓨터에서 프로그램이란, 프로그래밍 언어로 작성된 작업 수행 과정이다. (프로그래머가 작성한 소스코드와 소스코드가 컴파일되어 기계어로 번역된 바이너리파일도 그저 작업 과정이 기록된 파일일 뿐이다.)

작업의 과정이 파일로 저장되어 있으면 그것을 "프로그램"이라고 부른다.
메모리에 적재되어 실행 중 이거나 실행 대기 중일 땐 "프로세스"라고 구별하여 부를 뿐이다.
즉, 프로세스는 "메모리에 적재되어 프로세서에 의해 실행 중인 프로그램" 이라고 정의하는 것이 정확할 것이다.

프로세스가 "메모리에 적재되어 프로세서에 의해 실행되는 중인 프로그램"이라는 말의 의미를 이해하려면 CPU가 동작하는 원리를 알고 있어야 한다.

프로그램이 실행되는 과정!

  1. 사용자가 단축 아이콘 혹은 명령행에서 프로그램을 실행한다.

  2. 파일로 저장되어 있던 프로그램은 메모리(RAM)에 로더(Loader)에 의해 적재(load)된다. 처음으로 실행해야 할 기계어 코드가 저장된 메모리의 주소를 CPU의 명령주소(IP : Instruction Pointer) 레지스터에 저장한다.

  3. 프로세서(CPU)는 IP(Instruction Pointer: 언제나 다음에 실행할 명령어가 들어 있는 메모리의 번지를 가리키는, 즉 오프셋을 담고 있는 명령 포인터 레지스터)가 가리키는 메모리의 주소에서 (처음으로) 실행할 명령어를 인출한다.(즉, 메모리에서 CPU로 가져온다.)

  4. 이 인출된 명령어를 명령 레지스터 IR(Instruction Register: 현재 실행 중인 명령을 기억하는 레지스터)에 저장한다.

  5. IR에 저장된 명령을 실행하고 IP에 다음번에 실행할 명령어가 있는 주소를 저장한다.

  6. 3~5를 프로그램의 끝까지 반복한다.

레지스터의 종류에 대한 참고 글레지스터의 종류에 대한 참고 글.

실제로는 이보다 훨씬 더 복잡하게 설명할 수 있겠으나 큰 그림으로서의 이 체계를 이해한다면 프로세스란 용어의 뜻이 무엇인지 좀 더 명확하게 이해할 수 있다고 생각한다.

고로 "프로세스"라 함은,
CPU(프로세서)에 의해 파일로 저장된 프로그램메모리에 적재(load)되고,
CPU가 프로세스에 명시된 명령어를 순서대로 불러와 실행하는! 과정이자 상태이다.

CPU와 기억장치들

일단 예외(exception)와 인터럽트(interrupt)를 말하기 이전에, CPU 입장에서 봤을 때를 생각하여, 컴퓨터의 하드웨어 측 구조를 디스크와 메인 메모리로 크게 정리하고 들어가겠다.

디스크(Disk):

데이터 저장 및 검색에 사용되는 저장 매체.
컴퓨터 전원이 꺼져 있어도 정보를 지속적으로 저장하는 비휘발성 물리적 장치.
보조기억장치.

  • 일반적으로 운영 체제 파일, 응용 프로그램, 사용자가 사용하고자 하는 데이터와 프로그램 및 기타 유형의 디지털 콘텐츠를 장기간 저장하는 데에 사용된다.
  • 일반적으로 디스크는 자성 물질로 코팅된 하나 이상의 회전 플래터와, 플래터에서 데이터를 자기적으로 읽고 쓸 수 있는 읽기/쓰기 헤드로 구성된다. 데이터는 트랙이라는 동심원으로 구성되며 각 트랙은 섹터라는 더 작은 단위로 나뉜다. 운영 체제는 읽기/쓰기 헤드를 조작하고 플래터를 회전함으로써, 특정 섹터에 액세스하여 데이터를 읽거나 쓸 수 있다.
  • 메인 메모리(RAM)에 비해 훨씬 느린 속도로 액세스하지만, 훨씬 더 큰 저장 용량을 제공한다.
  • 디스크는 일반적으로 컴퓨터 시스템의 기본 저장 장치로 사용되며 파일에 대한 영구 저장소를 제공하고 디스크에서 데이터 읽기, 쓰기 및 구성과 같은 다양한 파일 시스템 작업을 지원한다.

메인 메모리(RAM):

컴퓨터가 프로그램을 실행하고 데이터를 처리하는 데에 필요한 정보를 저장하는 매체.
CPU가 현재 처리중인 데이터나 명령만을 일시적으로 저장하는 휘발성 메모리.
주기억장치.

  • RAM(Random Access Memory)은 DRAM과 SRAM으로 소분류할 수 있는데, 보통 주기억장치는 주로 DRAM을 일컫는다. (SRAM은 캐시나 레지스트리를 말한다.)
  • 메인 메모리는 마치 프로세서처럼 전자소자로 만들어져 있고, 기억할 내용이 전기 신호로 저장된다.
  • 메인 메모리는 프로그램 코드, 변수, 작업 중인 데이터 등을 임시로 저장하여 CPU가 접근할 수 있는 고속의 저장 공간이다. RAM은 주기억 장치로서 데이터에 대한 랜덤한 액세스(Random Access)를 지원하며, 데이터를 빠르게 읽고 쓸 수 있다. 그러나 전원이 꺼지면 메모리에 저장된 데이터가 사라지는 휘발성 특성을 가진다.
  • 운영체제(OS)는 메인 메모리를 관리하여 프로그램이 메모리에 필요한 공간을 할당하고 회수하는 역할을 수행한다.

어쨌든 결론은 우리가 앞으로 Pintos의 흐름을 말하거나 이해할 때에 메인메모리==주기억장치==RAM, 디스크==보조기억장치==물리메모리라고 생각하면 된다.

(보통은 레지스터, 캐시, RAM을 통칭 주기억장치라고 부른다. 프로그램이 실제로 구동될 때 이 세 기억장치를 사용하기 때문이다.

짧게만 언급하자면,

  • 레지스터가 CPU 내에 위치하여 제일 빠른 메모리로, CPU 안에 내장되어 연산을 위한 저장소이며 ALU와 함께 CPU 계산 과정의 일부로 작동한다.
  • 빠른 속도 : CPU > Cache > RAM >>> SSD, HDD
  • OS나 CPU는 자동으로 자주 쓰이는 데이터와 자주 쓰일 것 같은 데이터를 메모리에서 캐시로 읽어온다. 메인 메모리의 데이터를 캐시 메모리에 넣어두고 필요한 데이터를 캐시에서 먼저 찾도록 할 경우 시스템 성능을 향상시킬 수 있다.)

하드디스크(HDD)와 램(RAM)의 관계를

직관적으로 이해하기 위한 예를 들자면,

게임을 처음 실행하거나 다음 차례의 동영상을 실행할 때 화면에 “로딩중…(loading…)” 이라는 메시지를 볼 수 있다. 이때 이 "load"하는 수행이 바로 하드디스크에서 데이터를 읽어 램으로 전송하는 과정을 의미한다.

CPU와 기억장치들과의 관계를

이해해보자.

CPU(중앙처리장치)는 컴퓨터 내부의 모든 명령(연산)을 담당한다.

1️⃣ CPU는 보통 작업을 할 때 기억장치(RAM, HDD, SDD, …) 중 그나마 가장 빠른 RAM(메인 메모리) 내의 코드와 명령어, 스택 영역, 힙 영역 등에서부터 자료를 주고 받는다.
2️⃣ 또한, 보다 더 빠른 접근을 도모하면 산술 연산이나 메모리의 주소, 프로그램 카운터(PC)등을 레지스터에 저장해서 가져다 쓴다.
3️⃣ 그러나 CPU의 입장에서는 이 역시 느리게 느껴진다. 그래서 CPU는 자주 쓰는 데이터들을 캐시 메모리에 넣어놓고 사용한다.

profile
JS, CSS, HTML, React etc

0개의 댓글