혼자 공부하는 컴퓨터구조 + 운영체제를 보고 정리한 글입니다. cf. https://www.youtube.com/watch?v=kFWP6sFKyp0&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC
1. 컴퓨터 구조를 알아야 하는 이유
컴퓨터 구조라고 하면 어떤 이미지가 떠오르나요?
- 컴퓨터 부품과 케이블, 복잡한 회로와 같은 이미지는 프로그램 개발과는 큰 관련이 없어 보입니다.
- 왜냐하면 컴퓨터의 구조와 작동 원리를 몰라도,
- 프로그래밍 언어의 문법만 알면 프로그램을 개발하고 실행하는 데 전혀 지장이 없었기 때문입니다.
하지만 컴퓨터 구조는 실력있는 개발자가 되려면 반드시 알아야 할 기본 지식입니다.
1.1 문제 해결
강의나 책에 나오는 코드를 똑같이 따라 작성했는데도, 코드가 제대로 작동하지 않는다면 어떻게 할건가요?
- 같은 코드를 작성했는데도 어떤 컴퓨터에서는 코드가 제대로 작동하고,
- 어떤 컴퓨터에서는 제대로 작동하지 않는 상황이 의외로 빈번하게 발생합니다.
- 실무에서도 마찬가지로 개발할 때는 문제 없이 작동했던 코드가
- 실제 사용자들에게 선보이는 자리에서는 작동하지 않는 상황이 비일비재합니다.
- 이 경우는 분명 코드상의 문법적인 오류만이 원인은 아닐 겁니다.
- 컴퓨터 구조를 이해하고 있다면, 문제 상황을 빠르게 진단할 수 있고,
- 문제 해결의 실마리를 다양하게 찾을 수 있습니다.
- 컴퓨터 내부를 거리낌 없이 들여다보며 더 좋은 해결책을 고민할 겁니다.
- 이러한 역량이 업무 수행에 필요하다는 것을 기업들도 알고 있기 때문에
- 각종 기술 면접에서 컴퓨터 구조에 관한 소양을 검증하거나알아야 하는 분야로 명시하기도 합니다.
- (e.g. 구글 , 삼성전자 등 채용공고)
- 즉, 컴퓨터 구조를 알면, 코드만 작성하는 개발자를 넘어 다양한 문제를 스스로 해결할 수 있습니다.
1.2 성능, 용량, 비용
여러분이 웹사이트를 개발했다고 가정해 봅시다.
- 이 웹사이트는 컴퓨터에서 작동하기 때문에, 사용자에게 보여주려면
서버 컴퓨터가 필요합니다. - 검색창에 ‘서버 컴퓨터’를 입력하면, 수 많은 서버 컴퓨터가 검색됩니다.
- 서버 컴퓨터마다 사용하는 CPU와 메모리가 다르고 그에 따라 성능, 용량, 비용이 다양합니다.
- 이떄 어떤 컴퓨터를 고르는게 좋을까요?
- 저렴하거나, 최신 제품이 가장 좋을까요?
- 무작정 저렴한 컴퓨터를 고르면 턱없이 부족한 성능으로 인해 곤란한 상황에 처할 수 있습니다.
- 아니면 최신 컴퓨터를 고르면, 비용이 너무 커집니다.
- 서버 컴퓨터를 구매하지 않고, 클라우드 서비스를 이용하더라도 이런 고민은 피할 수 없습니다.
- 어떤 CPU를 사용할지, 어떤 메모리를 사용할지 등을 직접 판단하고 현명하게 선택해야 합니다.
- 본인이 개발한 프로그램이 어떤 환경에서 어떻게 작동하는지는 본인이 가장 잘 이해하고 있어야 하고,
- 프로그램을 위한 최적의 컴퓨터 환경을 스스로 판단할 수 있어야 합니다.
- 컴퓨터 구조에서 배우는 내용은 결국 성능, 용량, 비용과 직결됩니다.
2. 컴퓨터 구조의 큰 그림
컴퓨터 구조 지식은 크게 두 가지입니다.
- 컴퓨터가 이해하는 정보
- 컴퓨터의 네 가지 핵심 부품
2.1 컴퓨터가 이해하는 정보
컴퓨터는 0과 1로 표현된 정보만을 이해합니다. 그리고 이렇게 0과 1로 표현되는 정보에는 크게 두 종류가 있는데, 바로 데이터와 명령어입니다.
데이터(data)- 명령어 없이는 아무것도 할 수 없는 정보 덩어리
- 컴퓨터가 이해하는 숫자, 문자, 이미지, 동영상과 같은 정적인 정보
- 컴퓨터와 주고받는 정보나 컴퓨터에 저장된 정보를 가리킬 때, 편하게 데이터라 통칭하기도 함
명령어(instruction)- 데이터를 움직이고 컴퓨터를 작동시키는 정보
컴퓨터는 ‘명령어를 처리하는 기계‘컴퓨터 프로그램은 ‘명령어들의 모음’
| 예시 | 데이터 | 명령어 |
|---|---|---|
| 1 | 1과 2 | ‘더하라, 1과 2를’ |
| 2 | 안녕하세요 | ‘화면에 출력하라, 안녕하세요를’ |
| 3 | cat.jpg | USB 메모리에 저장하라, cat.jpg를 |
2.2 컴퓨터의 4가지 핵심 부품
아두이노, 라즈베리 파이와 같은 작은 컴퓨터부터 스마트폰, 노트북, 데스크톱, 서버 컴퓨터까지 컴퓨터는 여러 종류가 있지만, 컴퓨터를 이루는 핵심 부품은 크게 4가지입니다.

-
중앙처리장치(CPU; Central Processing Unit, 이하 CPU)ALU(산술논리연산장치),제어장치와여러 레지스터가 있습니다.- CPU는 메인보드 내 시스템 버스와 연결
-
주기억장치(main memory, 이하 메모리)- 메인보드 내 시스템 버스와 연결
- 주기억장치에는 크게 2가지입니다.
RAM(Random Access Memory)메모리는 보통 RAM을 지칭- 특별한 언급이 없는 한 여기서 다루는 주기억장치는 RAM을 의미
ROM(Read Only Memory)
-
보조 기억장치(secondary storage)- 메인보드 내 시스템 버스와 연결
- e.g. 하드디스크(HDD), SSD 등
-
입출력 장치(input/output(I/O) device)- e.g. 모니터, 키보드, 마우스 등
-
cf.
메인보드와시스템 버스메인 보드: 위 4가지 장치들이 모이는 장치시스템 버스(System Bus): 연결 통로
2.2.1 메모리

메모리: 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품- 즉, 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 합니다.
- 컴퓨터가 빠르게 작동하기 위해서는 메모리 속 명령어와 데이터가 중구난방으로 저장되어 있으면 안됩니다.
- 저장된 명령어와 데이터의 위치는 정돈되어 있어야 합니다.
- 그래서 메모리에는 저장된 값에 빠르고 효율적으로 접근하기 위해
주소(address)라는 개념이 사용됩니다.- 원하는 위치를 찾아갈 수 있듯이 컴퓨터에서도 주소로 메모리 내 원하는 위치에 접근 가능
예를 들어, 다음 그림은,

- 1번지와 2번지에 명령어,
- 3번지와 4번지에 데이터가 저장되어 있고,
- 5번지와 6번지에 아무것도 저장되어 있지 않은 상태의 메모리를 표현한 그림입니다.
명령어와 데이터는 모두 0과 1로 표현되기 때문에, 겉보기에는 마치 0과 1로 이루어진 데이터를 저장한 것처럼 보입니다.
💡 메모리 핵심
- 프로그램이 실행되기 위해서는 반드시 메모리에 저장되어 있어야 한다.
- 메모리는 현재 실행되는 프로그램의 명령어와 데이터를 저장한다.
- 메모리에 저장된 값의 위치는 주소로 알 수 있다.
2.2.2 CPU

CPU: 메모리에 저장된 명령어를 읽어 들이고, 읽어 들인 명령어를 해석하고, 실행하는 부품- CPU는 컴퓨터의 두뇌

CPU의 역할과 작동 원리를 구체적으로 이해하기 위해서는 CPU 내부 구성 요소 3가지를 알아야 합니다.
산술논리연산장치(ALU; Arithmetic Logic Unit, 이하 ALU)- 쉽게 말해 계산기
- 계산만을 위해 존재하는 부품으로 컴퓨터 내부에서 수행되는 대부분의 계산은 ALU가 수행
레지스터(register)- CPU 내부의 작은 임시 저장 장치
- 프로그램을 실행하는 데 필요한 값들을 임시로 저장합니다.
- CPU 안에는 여러 개의 레지스터가 존재하고 각기 다른 이름과 역할을 가짐
제어장치(CU; Control Unit)제어 신호(control signal)라는 전기 신호를 내보내고 명령어를 해석하는 장치제어 신호: 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의 전기 신호- 지금은 아래 내용만 이해
- CPU가 메모리에 저장된 값을 읽고 싶을 땐, 메모리를 향해 메모리 읽기라는 제어 신호를 보낸다.
- CPU가 메모리에 어떤 값을 저장하고 싶을 땐, 메모리를 향해 메모리 쓰기라는 제어 신호를 보낸다
간단한 예시를 통해 CPU를 구성하는 세 가지 부품의 역할을 알아보겠습니다.
(1)

제어장치는 1번지에 저장된 명령어를 읽기 위해,메모리에 ‘메모리 읽기’ 제어 신호를 보냅니다.메모리는 1번지에 저장된 명령어를CPU에 건네주고, 이 명령어는레지스터에 저장됩니다.제어장치는 읽어들인 명령어를 해석한 뒤, 3번지와 4번지에 저장된 데이터가 필요하다고 판단합니다.제어장치는 3번지와 4번지에 저장된 데이터를 읽어 들이기 위해메모리에 ‘메모리 읽기’ 제어 신호를 보냅니다.
(2)

메모리는 3번지와 4번지에 저장된 데이터를CPU에 건네주고,- 이 데이터들은 서로 다른
레지스터에 저장됩니다.
- 이 데이터들은 서로 다른
ALU는 읽어들인 데이터로 연산을 수행합니다.- 계산의 결과값은
레지스터에 저장됩니다. 계산이 끝났다면 첫 번째 명령어의 실행은 종료
(3)

제어장치는 2번지에 저장된 다음 명령어를 읽기 위해,메모리에 ‘메모리 읽기’ 제어 신호를 보냅니다메모리는 2번지에 저장된 명령어를CPU에 건네주고, 이 명령어는레지스터에 저장됩니다.제어장치는 이 명령어를 해석한 뒤,메모리에 계산 결과를 저장해야 한다고 판단합니다.제어장치는 계산 결과를 저장하기 위해메모리에 ‘메모리 쓰기’ 제어 신호와 함께 계산 결과인 220을 보냅니다.- 메모리가 계산 결과를 저장하면 두 번째 명령어의 실행도 종료
💡 CPU 핵심
- CPU는 메모리에 저장된 값을 읽어 들이고, 해석하고, 실행하는 장치
- CPU 내부에는 ALU, 레지스터, 제어장치가 있다.
- ALU는 계산하는 장치,
- 레지스터는 임시 저장 장치,
- 제어장치는 제어 신호를 발생시키고 명령어를 해석하는 장치다.
2.2.3 보조기억장치
메모리는 실행되는 프로그램의 명령어와 데이터를 저장한다고 했지만, 메모리는 두 가지 약점이 있습니다.
- 가격이 비싸
저장 용량이 적다 전원이 꺼지면 저장된 내용을 잃는다
컴퓨터 전원이 꺼지면 작업한 내역을 잃게 되는 이유는 실행 중인 프로그램들은 메모리에 저장되는데, 메모리는 전원이 꺼지면 저장된 내용이 날아가기 때문입니다.

그래서 메모리보다 크기가 크고,
전원이 꺼져도 저장된 내용을 잃지 않는 메모리를 보조할 저장 장치가 보조기억장치입니다.
- e.g. 하드 디스크, SSD, USB 메모리, DVD, CD-ROM과 같은 저장 장치
- 전원이 꺼져도 컴퓨터에 파일이 남아 있었던 이유는 우리가 파일을 보조기억장치에 저장했기 때문
| 메모리(주기억장치) | 보조기억장치 | |
|---|---|---|
| 프로그램 저장 종류 | 현재 ‘실행되는’ 프로그램을 저장 | ‘보관할’ 프로그램을 저장 |
| 데이터가 사리지는 여부 | 휘발성 저장장치 | 비휘발성 저장장치 |
| 가격 | 비쌈 | 상대적 저렴 |
| 저장 용량 | 작음 | 크다 |
2.2.4 입출력장치

입출력장치: 컴퓨터 외부에 연결되어 컴퓨터 내부와 정보를 교환하는 장치- e.g. 마이크, 스피커, 프린터, 마우스, 키보드
💡 보조기억장치는 입출력장치로도 볼 수 있음
보조기억장치는 관점에 따라 입출력장치의 일종으로 볼 수 있습니다.
- 실제로 보조기억장치와 입출력장치를 ‘컴퓨터 주변에 붙어있는 장치’라는 의미에서
주변장치(peripheral device)라 통칭하기도 합니다.- 다만 보조기억장치는 모니터, 마우스, 키보드와 같은 일반적인 입출력장치에 비해,
- 메모리를 보조한다는 특별한 기능을 수행하는 입출력장치입니다.
그렇지만 많은 전공 서적은 둘을 구분하여 서술함
2.2.5 메인보드와 시스템 버스
(1) 메인보드

컴퓨터의 핵심 부품들은 모두 메인보드(main board)라는 판에 연결됩니다.
- cf.
메인보드는마더보드(mother board)라고도 부름 - 메인보드에는 앞서 소개한 부품을 비롯한 여러 컴퓨터 부품을 부착할 수 있는 슬롯과 연결 단자가 있습니다.
(2) 시스템 버스
메인보드에는 컴퓨터 부품을 부착할 수 있는 슬롯과 연결 단자가 있습니다.
- 메인보드에 연결된 부품들은 서로 정보를 주고 받을 수 있는데,
- 이는 메인보드 내부에 **버스(bus)**라는 통로가 있기 때문입니다.
- 컴퓨터 내부에는 다양한 종류의 통로, 즉 버스가 있습니다.
- 이를
시스템 버스(system bus)라고 합니다.

시스템 버스는 주소 버스, 데이터 버스, 제어 버스로 구성되어 있습니다.
주소 버스(address bus)= 주소를 주고받는 통로데이터 버스(data bus)= 명령어와 데이터를 주고받는 통로제어 버스(control bus)= 제어 신호를 주고받는 통로- CPU 구성 요소 중 하나인 제어장치는 제어 버스를 통해 제어 신호를 내보냅니다.
얘를 들면,

CPU가 메모리를 읽을 땐, 제어 신호만 내보내지 않습니다.
제어 버스로 ‘메모리 읽기’ 제어 신호를 내보내고,주소 버스로 읽을려는 주소를 보냅니다.- 그러면
메모리는데이터 버스로 CPU가 요청한 주소에 있는 내용을 보냅니다.

그리고 메모리에 어떤 값을 저장할 때도 CPU는
데이터 버스를 통해 메모리에 저장할 값을,주소 버스를 통해 저장할 주소를,제어 버스를 통해 ‘메모리 쓰기’ 제어 신호를 내보냅니다.