컴퓨터 하드웨어의 기본 구성

 

  코딩에 관심을 가지게 된 계기가 무엇인가요? 한다면, 저는 주저 않고 '컴퓨터가 좋아서'라고 대답하곤 합니다. 구체적으로는 하드웨어를 조립해서 작동하는게 신기하고 재밌어서 흥미를 가지게 되었습니다. 컴퓨터를 이루는 하드웨어는 생각보다 별로 거창하지 않습니다. Cpu, 메모리, 저장장치(ssd), 입출력장치(키보드, 마우스) 등만 있으면 되죠. 여기에 본인이 원하는 운영체제를 사서 깔기만 하면 됩니다. 컴퓨터로 주로 무엇을 하느냐에 따라 어떤 cpu, 메모리, 그래픽카드 등을 쓸 지를 정하기만 하면 됩니다. 그러면 더 자세하게 컴퓨터 구조는 어떻게 되어있는 지, cpu와 메모리는 어떤 일을 하고 얼마나 중요한 지 알아보겠습니다. 

 

 


 

컴퓨터 하드웨의 구조

 

   컴퓨터 부품은 '메인보드'(혹은 마더보드라고도 불리움) 판에서 연결됩니다. CPU단자, RAM(메모리)단자, 그래픽 카드 연결 단자, 하드디스크 연결 단자, 사운드 단자, 마우스 키보드 단자 등등이 다 메인보드에 장착되어 장치를 연결하고 데이터를 지나갈 수 있게끔 합니다. 이를 폰노이만 구조라고 하는데요, 이는 폰노이만이 프로그래밍을 할 때 하드웨어를 바꿀 필요 없이, 메모리 위에만 프로그램을 올려서 프로그래밍이 가능하도록 하는 방식을 제안했기 때문입니다. 지금도 널리 쓰이고 있는 이 방식은 모든 프로그램은 메모리에 올라와야만 실행이 가능합니다. 티스토리를 켜놓고 카톡창을 켜놓고 멜론을 켜놨을 때 모두 메모리 위로 올라와야만 실행가능하며 하드웨어 구조에는 메모리가 매우 중요함을 의미합니다.

 

 


 

CPU central processing unit

 

   CPU는 중앙처리장치라고 불리우며, 컴퓨터의 뇌입니다. CPU의 구성 요소에는 산술논리 연산장치, 제어장치, 레지스터가 있습니다. 

 산술논리 연산장치는 데이터의 산술, 논리연산을 담당합니다. 

 제어장치는 모든 장치들의 동작을 지시하고 제어하는 장치입니다. 

 레지스터는 CPU내에서 계산을 위해 데이터를 임시로 보관하는 장치입니다. 

 


 

CPU 명령어 처리 과정

 

   2+3를 더하라는 프로그램이 있다면 이 프로그램을 CPU가 어떻게 처리하는 지 과정을 살펴보겠습니다.

 

1. 제어장치가 먼저 덧셈 프로그램의 명령어를 해석하고 제어 신호를 보낸다 -> 2. 메모리에서 2와 3의 데이터를 가져와 레지스터에 둔다. (프로그램은 항상 메모리 위에서 수행되어야 하니까, 메모리에 프로그램의 데이터가 있습니다!!) -> 3. 가져온 데이터의 덧셈을 산술논리 연산장치에서 실행한다. -> 4. 덧셈의 결과값을 레지스터에 넣는다 -> 5. 레지스터에 있는 결과값 5를 메모리에 옮긴다. 

 

  제어장치는 계속 제어 신호를 보내며 명령을 하고, 레지스터에는 데이터를 계속 저장하고, 산술논리 연산장치에서는 데이터 값을 계산합니다. 

 


 

메모리 

 

   모든 프로그램은 메모리에 올라와야 실행될 수 있습니다. 이 부분이 메모리 파트에서 제일 중요한 개념입니다. 메모리의 종류에는 읽거나 쓸 수 있는 램, 읽기만 가능한 롬으로 구분 됩니다. 램은 휘발성 메모리와 비휘발성 메모리로 나누어집니다. 

 

램 Random Access Memory 

 

   사용자가 자유롭게 데이터를 읽고 쓰고 지울 수 있는 기억장치이며 CPU의 모든 동작이 이 주기억장치에 저장됩니다. 램이 많으면 많을 수록 많은 일을 빠르게 처리할 수 있기 때문에 '램다익선', 램은 많으면 많을 수록 좋다 라는 말도 있을 정도 입니다. 

 

휘발성 램 & 비휘발성 램

 

   휘발성 램은 컴퓨터 전원이 꺼지자 마자 '기억'들이 사라집니다. 예를들어 우리가 문서작업을 할 때 컴퓨터를 끄게 되는 불의의 사고를 겪게 되면, 다시 켰을 때 작업들이 깜쪽같이 사라진 경험이 꽤나 있을겁니다. 휘발성 램에서 작업이 실행되었기 때문에 전원이 꺼지면 정보도 날라가게 되는 것입니다.(cmd/ctrl+s의 중요성..)

 비휘발성 램은 말 그대로 휘발되지 않는 '기억'들입니다. 문서를 작업하다가 저장을 누르고 파일로 만들게 되면 컴퓨터를 껐다 켜도 그대로 존재하는 것이 이 비휘발성 램입니다.

 

롬 Read Only Memory 

 

   롬은 전력이 끊겨도 데이터를 보관하지만 데이터를 한 번 저장하면 수정이 불가하기 때문에 컴퓨터 부팅과 관련한 바이오스를 저장하는데 주로 쓰입니다. 

 

 


메모리 보호

 

   메모리는 매우 중요합니다. 메모리가 보호되지 않는다면 악성 소프트웨어, 바이러스로 프로그램을 파괴당하거나 데이터가 지워지는 불상사가 일어날 수 있습니다. 운영체제의 작업이 중단된 경우에 메모리를 보호하기 위해선 하드웨어의 역할이 중요합니다. 메모리를 보호하기 위해 cpu는 메모리 작업시 경계 레지스터와 한계레지스터를 정하여 메모리 주소에 넣고 그 값이 주소에서 벗어난다면 메모리 오류에 관련한 인터럽트가 발생합니다. 인터럽트가 발생하면 모든 작업이 중단되고 강제종료되는 상황이 일어나게 됩니다. 

 

부팅 과정

 

   컴퓨터를 껐다가 키면 어떤 과정이 일어날까요? 운영체제도 응용 프로그램이기 때문에 메모리에 올려져서 실행되어야 합니다. 운영체제를 메모리에 올리는 과정을 부팅이라고 합니다. 

 

   컴퓨터 전원을 키면 롬에 저장된 바이오스가 실행됩니다. 하드웨어에 이상이 없는 지 체크하고 이상이있다면 삐~소리와 오류메세지를 출력합니다. 이상이 없다면 하드디스크의 마스터 부트 레코드에 저장된 운영체제를 실행하기 위한 코드인 부트스트랩을 메모리로 가져와 실행합니다. 

 

인터럽트

 

   초기 컴퓨터 시스템에서는 cpu가 직접 입출력 장치에서 데이터를 가져오거나 내보냈습니다. 이를 폴링 방식이라 합니다. 언제쯤 입출력 명령이 완료될 지 모르기 때문에 cpu는 이를 주기적으로 관리했는데 이는 매우 비효율적이 였기에 인터럽트 방식이 도입됩니다. 인터럽트는 입출력 관리자가 cpu에 보내는 완료신호입니다. cpu가 입출력 관리자에게  입출력을 맡기고 다른 일을 하며 일이 완료 됐을 땐 cpu신호를 받아 인터럽트 서비스 루틴을 실행시켜 작업을 완료하기에 효율적입니다. 

 

메모리 매핑 입출력 Memory Mapped I/O MMIO

 

메모리 매핑 입출력 작업 영역

 

   CPU는 입출력 관리자에게 인터럽트 방식을 사용하여 입출력을 전담으로 맡겼습니다. 그 과정에서 메모리에 접근할 수 있는 권한이 필요하여 직접 접근을 허용합니다. 하지만 직접 접근을 사용하면 메모리가 복잡해지며 데이터도 섞일 우려가 있기 때문에 이를 보완하는 방법이 도입되었습니다. 바로 CPU가 사용하는 메모리 공간과 직접 메모리 접근의 공간을 분리하는 것입니다. 이를 메모리 매핑 입출력 MMIO라고 부릅니다. 

 

 

 


 

버퍼란?

 

   버퍼는 속도의 차이가 나는 두가지 장치에서 일정량의 데이터를 모아 옮김으로써 속도의 차이를 완화하는 장치입니다. 하드웨어 뿐만 아니라 동영상을 볼 때 '버퍼링 걸린다'라는 말을 많이 들어보셨을 텐데요, 네티워크 데이터의 시간과 플레이어 재생 시간의 속도차이가 일어났을 때 주로 이 말을 쓰입니다. 이 현상을 방지하기 위해 동영상 데이터 일정 부분을 버퍼에 넣은 후 실행하기도 합니다.

 


 

스풀?

 

   스풀은 cPU와 입출력장치가 독립적으로 동작하도록 고안된 소프트웨어적 버퍼입니다. 주로 프린터기가 대표적인 스풀러인데요, 순차적으로 내용물을 인쇄하지만 출력 명령을 내린 프로그램과는 독립적으로 동작한다는 특징이 있습니다. 

 

 


 

캐시란?

 

   캐시는 메모리와 CPU간의 속도 차이를 완화하기 위해 메모리의 데이터를 미리 저장해두는 임시 장소입니다. 미리 필요한 데이터를 모아 한꺼번에 전달하는 버퍼의 일종이며, cpu의 속도를 쫓기 위해 메모리는 앞으로 사용할 것으로 예상되는 데이터를 미리 가져다 놓습니다. 컴퓨터의 성능 향상을 위해서는 캐시 적중률이 높아야하는데, 적중률을 높이기 위해서는 캐시의 크기가 늘려져야 합니다. 크기가 커질 수록 더 많은 데이터를 미리 가져올 수 있으며 많은 데이터는 캐시 적중률을 올리기 때문이죠. 

+ Recent posts