혼공컴운
[혼공컴운] 1장. 컴퓨터 구조 시작하기
게으른 the lazy
2024. 7. 4. 15:50
0. 욕망
- 대학교 1학년 때 한 친구가 있었다.
- BiDuRi라는 아이디를 쓰던 그 친구는 컴퓨터를 잘 다뤘다.
- Quake 3를 좋아했고, 나에게 Need For Speed라는 게임도 알려줬다.
- 나는 ip address라는 게 있는 줄도 모르던 시절이었다.
- 어느 날인가, 컴퓨터에 대해 얘기를 하고 있었다.
- 그 친구가 이런 표현을 했다.
- "램(RAM)은 말하자면 책상 같은 거야."
- 컴퓨터가 어떻게 동작하는지 1도 알지 못하던 나였으나
- 그 한 문장으로 인해 갑자기 모든 것이 다르게 느껴졌다.
- 컴퓨터 내부를 감싸고 있던 안개가 살짝 걷히는 기분이었다.
- 그리고 생각했다. "더 알고 싶다!"
- 컴퓨터 구조라는 과목이 전산과에 있다는 것을 알게 되었다.
- 하지만 내 전공만으로도 벅찼다.
- 결국 미루고 미루다 정식으로 배울 기회는 갖지 못했다.
- 그래도 틈날 때마다 찾아보고 공부하고 고민하면서
- 이제는 이런 그림들을 그리게 되었다.
출처: https://wikidocs.net/219235
출처: https://wikidocs.net/223730
- 하지만 파편화된 자료들은 지식의 조각을 만들 뿐이었다.
- 조각은 구조를 만들기에 부족했다.
- 잘 갖춰진 무언가를 통해 공부하고 싶다는 욕구는 늘 있었다.
- 책이든 웹사이트든 유튜브든, 목차와 스토리와 설계가 있는 형태로 말이다.
- 그러다가 혼자 공부하는 컴퓨터 구조+운영체제 책이 눈에 들어왔다.
- 혼자 공부하는 머신러닝+딥러닝 책의 만족도가 꽤 높았었다.
- 혼공학습단 8기에 지원해서 이 책을 공부했고, 나름 공들여 기록을 남겼다.
- 이번엔 컴퓨터 구조와 운영체제를 공부할 차례이다.
- 혼공학습단 12기에 도전한다.
- 이 이야기와 별 상관없는 반전: BiDuRi는 전산과가 아니었다.
1. 컴퓨터 구조 시작하기
- 컴퓨터의 구성 요소와 각 요소의 역할에 대해 알아본다.
- 우선은 큰 그림을 머리 속에 그리는 것이 목표이다.
1.1 컴퓨터 구조는 왜 알아야 하는가
- 한줄요약: 몰라도 된다. 코딩 노예가 되어도 괜찮다면.
- 그냥 잘 돌아가기만 하는 코드는 누구나 문법 좀 공부하면 짤 수 있다.
- 그리고 당연히, 누구나 할 수 있는 일은 내가 아니어도 할 사람이 있다는 뜻이다.
- 직장에서 살아남는 가장 확실한 방법은 대체불가자원이 되는 것이다.
- 좋은 개발자가 되고는 싶은데 컴퓨터 구조와 운영체제를 공부하기 귀찮다는 건
- 살은 빼고 싶은데 운동은 하기 싫다는 것과 동치가 아닐까?
- 책에서는 컴퓨터의 성능, 비용, 용량에 대해서만 말하고 있지만
- 이것만으로는 조금 부족하지 않나 싶다.
- 운영체제는 개발 과정에서 직접적으로 와닿는 부분이니 굳이 강조하지 않아도 될 것 같다.
- 하지만 컴퓨터 구조는 정말 와닿으려면 병렬 컴퓨팅이나 GPU 등을 얘기하면 확실할 것 같은데
- 입문서의 1장에 쓰기엔 무리가 있었을 것이며,
- 무엇보다 나도 잘 모른다(...).
- 이럴 땐 검색이다.
- 개발자가 컴퓨터 구조와 운영체제를 알면 좋은 이유는 결국,
- 안될 때 되게 하려고
- 더 잘 되게 하려고
- 가 아닐까?
1.2 컴퓨터 구조: 큰 그림 이해하기
- 일단 숲을 조망하고 나무를 보러 들어간다.
- 숲은 두 가지 모습을 가지고 있다: 하드웨어와 소프트웨어
- 하드웨어는 부품이라고 부르고,
- 소프트웨어는 정보라고 부른다.
1.2.1 컴퓨터가 이해하는 정보: 데이터와 명령어
- 간단하다.
- "이거 해"라고 시킬 때
- "이거"에 해당되는 재료를 데이터라고 부르고
- "이거 해"라는 문장은 명령어라고 부른다.
1.2.2 컴퓨터의 핵심 부품: CPU, 메모리, 보조기억장치, 입출력장치
- 컴퓨터는 이렇게 생겼다.
출처: dall-e한테 시킴
프롬프트: desktop computer, without monitor, side-view, from top of the mainboard, with side cover removed. CPU, RAMs, Graphic card and HDD should be shown
- 그래픽카드는 신경쓰지 말자.
- 사무실에서 일하는 사람을 머리 속에 떠올려보자.
- 필수 요소들이 있다.
- 일하는 사람이 있어야 하고
- 작업물들을 올려둘 책상이 있어야 하고
- 자료의 장기 보존을 위한 책장도 있어야 하고
- 이 모든 것들이 들어있을 사무실이 필요하다.
- 컴퓨터도 똑같다.
- 일하는 CPU가 있어야 하고
- CPU가 작업할 정보가 올라가 있을 메모리가 있어야 하고
- 정보의 장기 보존을 위한 보조기억장치가 있어야 하고
- 이 모든 것들을 이어주는 메인보드가 필요하다.
- 자세한 내용은 이곳과 이곳에 적어둔 것으로 대신한다.
- CPU보다 메모리를 먼저 봐야 한다.
- 이유는 뒤에서 알게 된다.
- 메모리는 책상이다.
- 사실 물건을 아무렇게나 놓을 수 있는 책상은 아니고,
- 엄청나게 많은 칸으로 나뉘어져 있는 책상이다.
- 굳이 계산하자면 수 천억 개 정도의 칸으로 되어 있다. (계산 확인 필요)
- 각 칸에는 주소가 부여되어 있다.
- 메모리에는 명령어와 데이터가 올라간다.
- "100이랑 200이랑 더해"라고 시킬 때
- '100', '200', '더해' 같은 것들이 메모리의 어떤 영역을 차지한다.
- 칸이 아니라 영역이라고 쓴 이유는, 한 칸은 너무 작아서 실제로는 몇 칸을 점유하고 있을 때가 대부분이기 때문이다.
- 후술하겠지만, CPU가 일할 때 값을 직접 가져가기보다 주소만 가져가서 일할 때가 많다.
- 그래서 명령어도 '3번지와 4번지 값을 더해'라는 식으로 표현될 때가 많다.
- CPU는 일하는 사람인데, 좀 더 뜯어볼 수 있다.
- 산술논리연산장치(이하 ALU), 레지스터, 제어장치로 구성된다.
- ALU는 계산기다. 사람의 두뇌 중 사고영역이다. (그런게 있다고 치자.)
- 레지스터는 사람의 두뇌 중 단기기억영역이다.
- C언어에서 만드는 레지스터 변수가 여기에 들어간다.
- 그래서 빠르지만 좁다.
- 제어장치는 사람의 팔이다.
- 딱 맞는 비유인지 모르겠지만 그냥 그렇다고 치자.
- 지금 알아야 할 제어 신호는 2가지이다.
- 메모리 읽기: 메모리한테 "야 줘"라고 말한다.
- 책상에 쓰인 정보를 단기기억영역에 저장한다.
- 메모리 쓰기: 메모리한테 "야 받아"라고 말한다.
- 정보를 책상 위에 적는다.
- CPU가 100과 200을 더하는 과정은 아래와 같다.
- 제어장치가 메모리에게 읽기 신호를 보낸다.
- 메모리가 보내준 정보를 레지스터에 저장한다.
- 정보를 보니 '3번지와 4번지 값을 더하라'고 써있다.
- 제어장치가 읽기 신호를 통해 3번지, 4번지 값을 요청한다.
- 3, 4번지에 저장된 값이 레지스터에 저장된다.
- ALU가 일한다. 두 값을 더한다.
- 연산 결과를 레지스터에 저장한다.
- 제어장치가 읽기 신호를 통해 다음 할 일(명령어)을 물어본다.
- 메모리가 보내준 명령어는 '결과를 저장하라'이다.
- 제어장치가 쓰기 신호를 통해 레지스터의 정보를 메모리에 쓴다.
- 메모리는 CPU와 가까우므로 작업이 빠르다.
- 그런데 CPU가 퇴근하면(전원을 끄면) 책상이 리셋된다.
- 그래서 보조기억장치가 필요하다.
- 우리가 HDD, SSD라고 부르는 것들이다.
- 보조기억장치는 책장이다.
- 전원과 무관하게 정보를 저장할 수 있다.
- 여기서 명령어와 데이터의 경계가 모호해지는데,
- 보조기억장치에 저장된 명령어는 데이터일까, 명령어일까?
- 데이터의 형태를 하고 있지만 역할은 명령어이다.
- 데이터의 형태이지만 메모리가 올라가 프로세스가 되면서 명령어가 된다(고 알고 있다).
- 자세한 내용은 후반부 언젠가 나올 것이라 기대된다.
- 입출력장치는 키보드, 마우스, 모니터 등이다.
- 지금 내가 타이핑을 하고 있듯이 사용자가 정보를 입력할 수 있고,
- 지금 여러분이 화면을 보고 있듯이 사용자에게 정보를 출력할 수 있다.
- 이 모든 것들을 연결하는 것이 메인보드이다.
- 사무실로 치자면 사무실 공간 그 자체이다.
- 좀 더 정확히는 시스템 버스라는 이름의 통로를 통해서 정보를 주고받는다.
- 시스템 버스는 주소 버스, 데이터 버스, 제어 버스로 구성된다.
- 각각의 역할은 이름이 이미 말해주고 있다.
- CPU의 동작 원리를 알려주는 엄청난 영상을 소개하며 1장을 마친다.
1.3 확인문제
Q. 프로그램이 실행되려면 반드시 (뭐뭐)에 저장되어 있어야 한다.
A. 표현이 조금 모호한 것 같은데, 프로그램이 파일을 말하는 것이라면 보조기억장치이고, 프로세스를 말하는 것이라면 메모리이다.