안녕하세요~



이번 시간에는 컴퓨터가 기본적으로 어떤 순서에 의해 동작하는지 알아보도록 할거에요~

보통 이러한 개념은 컴퓨터학과에서 컴퓨터 구조(Computer Architecture)와 운영체제(Operating System; OS)라는 과목에서 배울 수 있는데, 

이곳에서는 너무 자세하게 말씀드리진 않고 간단하게만 설명해 보도록 할게요!






<1.기본구성요소>


컴퓨터는 기본적으로 CPU, Main Memory, I/O(Input/Output) device로 구성됩니다. 


<사진1>



CPU가 main memory에서 명령어를 읽어들어와 특정 task을 수행하게 됩니다. 보통 task라는 것은 계산을 한다던지 다른 I/O device 장치들에 특정 명령을 하게 되는 방식인거죠. 예를들어, 우리가 프린트(Output device)를 실행시키는 것도 CPU가 memory(기억장치)에서 '프린트를 작동시켜라' 라는 명령어를 읽어들이고 프린트에다가 명령하는 원리에요. 그렇기 때문에 CPU를 컴퓨터의 뇌라고 부른답니다.



<사진2>





<2. 컴퓨터가 켜질 때>


컴퓨터가 켜질때 어떤 일이 일어날까요?

컴퓨터가 켜지면 컴퓨터에 있는 하드웨드들을 깨워줘야 하지 않을까요?

이렇게 컴퓨터가 켜지면 하드웨어가 깨우는 모습을 "컴퓨터를 초기화" 시킨다라고 합니다.


그런데 다짜고짜 컴퓨터를 켜주면 저절로 초기화 시켜줄까요? 컴퓨터가 지능을 갖고 있지 않은 이상 어떤 하드웨어들을 초기화 시키라고 명령을 내려주어야 할거에요. 이렇게 컴퓨터를 초기화 시키기 위해서는 초기화 시키기 위한 명령들을 모아둔 프로그램이 있어야하는데 이러한 역할을 하는 프로그램을 Boot Loader라고 해요.


컴퓨터가 켜지게 되면 CPU는 제일 먼저 Boot loader를 읽어드리도록 설정이 되어있어요. CPU가 곧바로 읽어들여야 하기 때문에 Boot loader는 처음부터 main memory에 상주해 있어요. Boot loader를 잘 못 건드리면 컴퓨터가 실행이 되지 않기 때문에 아무나 건드리지 못하게 memory 안에서도 ROM(Read Only Memory)라는 영역에 할당되어 있습니다.


CPU가 boot loader를 읽어드리면 컴퓨터 내부의 각종 초기화 작업을 진행하게 되요. 부팅화면을 본적이 있으시죠? 이 부팅화면이 보일때는 '컴퓨터가 내부적으로 초기화 작업을 하고 있구나'라고 생각하시면 돼요. 


<사진3>




<사진4>



Boot Loader는 컴퓨터 내부를 초기화 시키는 일 외에도 다른 중요한 작업을 합니다. 다른 중요한 작업은 바로 '운영체제를 메모리에 업로드'하는거에요.


Boot loader와 달리 OS는 처음부터 memory에 올라가 있지 않아요. 누군가가 메모리에 load를 해줘야 하는 프로그램인셈이죠. 생각해보세요 Dual 부팅 하시는 분들보면 윈도우 운영체제를 실행시킬지 리눅스 운영체제를 실행시킬지 정하잖아요? 만약 OS가 RAM에 있으면 Dual 부팅을 하지도 못할거에요 (Dual 부팅은 흔히 한 컴퓨터에서 두 개의 운영체제를 선택해서 쓰려는 개념으로 이해하시면 되요).


그래서 초기에는 Disk(HDD, SSD)에 OS 프로그램이 있다가 Boot loader에 의해 OS(window or Linux)가 메모리에 올라가게 됩니다.




메모리에 올라간 OS 프로그램을 CPU가 읽어들이면서 OS를 초기 세팅하게 됩니다.


<사진5. Window 7 부팅중...>




이러한 작업이 완료되면 우리가 사용할 수 있는 컴퓨터 바탕화면이 나오게 된답니다~








지금까지 컴퓨터가 켜지면 어떻게 동작하는지 알아봤어요.


기본적인 원칙은 아래와 같이 정리할 수 있어요.


1. 컴퓨터가 어떤 작업을 하기 위해서는 메모리에 있는 명령어를 읽어들여야 한다.

2. 메모리 용량은 제한적이다. 그렇기 때문에 우리가 실행시키는 프로그램들은 Disk(SSD, HDD)에 있다가 실행을 시키면 그때서야 메모리에 올라온다.

3. 프로그램이 메모리에 올라오게 되면 그때서야 CPU가 해당 프로그램의 명령어를 읽어들여 작동시킨다.


아직 까지는 추상적으로 이해되시나요?


그럼 앞으로 "CPU->RAM->GPU" 순서대로 대로 알아보면서 CPU, RAM, GPU의 스펙에 명시된 용어들을 이해하도록 할거에요. 예를 들어, CPU에서 말하는 코어와 스레드라는 개념이 무엇인지, 딥러닝을 구축할 때 이러한 스펙이 어느정도가 되어야 하는지에 대해서 알아보도록 할거에요.


이 글을 다 읽으셨을 땐, 전문가까지는 아니더라도 "나도 딥러닝을 돌릴 수 있는 서버스펙 정도는 혼자서 구축할 수 있어~"라고 말할 수 있었으면 좋겠어요 ㅎㅎ (물론 돈만있다면 ㅜㅜㅜ)



[사진 래퍼런스]

사진1

https://www.doc.ic.ac.uk/~eedwards/compsys/memory/index.html

사진2

http://lily.mmu.ac.kr/lecture/18ca/ca_01.pdf

사진3

https://slidesplayer.org/slide/14685169/

사진4

https://smartindigital.tistory.com/entry/%EB%B6%80%ED%8C%85-%EC%A4%91-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%9D%98-%EB%A9%88%EC%B6%A4-%ED%98%84%EC%83%81

사진5

https://www.youtube.com/watch?v=jrNhQLXmJGM


'컴퓨터 하드웨어' 카테고리의 다른 글

0.글을 쓴 배경  (0) 2020.06.28

+ Recent posts