[독서샬롱] 한 권으로 읽는 컴퓨터 구조와 프로그래밍 3,4,5화 독후감 및 정리
살려주세요. CS 너무 어려워요.
![[독서샬롱] 한 권으로 읽는 컴퓨터 구조와 프로그래밍 3,4,5화 독후감 및 정리](https://cdn.hashnode.com/res/hashnode/image/upload/v1723127090027/60b57f8c-decb-44d7-8964-aa69cd52c6d5.webp)
본 포스팅은 CS지식을 채우기 위해 진행하고 있는 독서모임의 정기 독후감입니다.
들어가며...
CS지식을 머리 속에 채워보자는 마음으로 시작한 스터디였으나, 확실히 전공으로 다룰 만큼 심도있는 이야기들을 (비교적) 가볍게 풀어낸 책이라 그런지 정말 많은 지식들을 이해해야했다. 문제는 이해해야하는데 이해를 못한 것인데, 결국 이런 내용들은 복습을 통해서 더 발전된 이해를 가져야할 듯 하다.
핑계지만서도 100 중 20 도 안되는 이해를 한 것 같아 조금 간략한 독후감 및 정리를 남겨야겠다.
하루 10시간씩 알바하면서 그래도 틈틈히 책을 읽은 내가 조금은 대견하다. ...ㅇ

재산을 압류당하면 빨간 딱지가 붙지만, 지식을.... 이해도를 압류당하면 노란 딱지가 붙는다고 한다......
메모리와 디스크의 핵심 : 순차 논리
조합 논리와 순차 논리
조합 논리
2장에서는 조합 논리라는 용어가 나왔다. 조합 논리는 현재의 흐름에서 입력에 의해서만 출력이 결정된다.
무슨 말인고 하면, A가 T인지 F인지를 결정하는 것을 질문이 던져진 그 순간의 입력에 의해서 답이 결정된다는 말이다.
순차 논리
그렇다면 순차 논리라는 말은 대체 무슨 얘기인가?
당장의 입력에 의해서 답이 결정되는 조합 논리와는 다르게 값을 기억해 시간의 흐름을 고려할 수 있게된 논리를 의미한다.
너무나 당연스럽게 True, False 만으로는 시간을 나열할 수 없다.
그래서 시간을 계산하는 발진자라고 불리는, 인버터를 활용하게 된다고 한다.
입력된 시간이 출력되면 그 출력이 다시 입력으로 돌아와 반복되고 그 주기를 시간으로 산정하는 것.

위 그림을 보면 들어온 입력을 받은 인버터가 출력한 것을 그대로 가지고 와 다시 입력으로 넣는 것을 볼 수 있다. 그리고 그 0과 1이 바뀌는 주기를 타이밍 다이어그램으로 표현하면 틱/톡하는 일종의 시간이 된다.
이런 주기를 클록이라고 하며, 우리가 CPU나 GPU 등의 스펙을 볼 때 확인할 수 있는 클록이 바로 발진자가 제공하는 이 클록이다.
래치
그럼 이렇게 흘러가는 시간을 저장할 장치가 필요한데, 입력되는 펄스를 유지/기억/저장하는 장치로는 래치가 있다. OR게이트를 활용한 단순한 래치나 두개의 입력(Set, Reset)을 받는 S-R래치 등 다양한 게 있는데, 솔직히 구조적으로는 이해는 못하겠다.
다만 이 래치라는 것은 "정보를 기억할 방법과 수단"으로서 활용이 된다는 것이 중요하다.

생긴 걸 보면 그냥 느낌적으로만 이해하게 된다. 뭐가 됐든 이전 값을 기억할 수 있다.
플립플롭과 레지스터
플립플롭
위와 같은 래치 중 플립플롭이라는 게 있다고 한다.
데이터 변경으로 인한 사이드 이펙트를 최소화하기 위해 전이에 의해 데이터 변화가 촉발되는 래치라고 하는데,
그냥 쉽게 이해하면 "출력값이 전이, 즉 0 -> 1 or. 1 -> 0 이 되었을 때 작동하는 래치" 정도라고 이해할 수 있을 것 같다.
이 플립플롭은 비트를 하나 기억할 때 유용하다.
결국 메모리라는 것이 저장을 위한 것이니 만큼 "변경점"이 생겼을 때 저장하는 것이 당연한 것이겠지...?
머리가 안굴러가는 건지 이해하기 어려운 건지 모르겠다!
레지스터
플립플롭은 비트 하나를 기억하는데 유용하다. 만약 여러 개의 비트를 저장하고 싶다면 여러 개의 D플립플롭을 묶어서 패키지화 시키면 된다. 패키지화된 플립플롭들의 합이 바로 레지스터다.

이 때부터는 우리가 알고 있는 칩셋이라는 느낌의 하드웨어가 나오기 시작한다. 기판이라는 걸 한번이라도 봤다면 어디선가 본 적있는 여러 발 달린 지네 녀석들...
임의 접근 메모리
이런 레지스터들과 앞 장에서 봤던 실렉터니 디코더니 하는 것들을 엮어다가 기억 장치인 메모리를 만들어낼 수 있는데, 우리가 흔히 RAM이라고 얘기하는 임의 접근 메모리가 그 대표적인 메모리다.
RAM의 특징은 빠르다는 것이다. 왜 빠르냐? 저장된 데이터의 위치 중 원하는 곳으로 바로 가서 탐색할 수 있다.
와 검색 알고리즘 개 잘되어있다
휘발성 메모리라고도 부르고 SRAM과 DRAM으로 나뉘는데, SRAM은 딱히 기억 안나고, DRAM이 우리가 일반적으로 알고 있는 컴퓨터의 RAM이다.
삼성전자의 DRAM 사업.... 망..

마! 이게 삼성전자의 디램이다! (아님. 그냥 아무 사진 퍼온거임)
SRAM과 DRAM의 차이는 SRAM이 비싸고 빠른거, DRAM이 가난한 일반 소비자들이 쓰는 위 사진 갘은 거 라고 생각하면 된다. 트랜지스터를 때려박아 만든 SRAM과 캐퍼시피라는 전자 보관함 하나, 트랜지스터 하나 가난하게 가지고 있는 DRAM.
읽기 전용 메모리
1회성
ROM이라고 불리는 읽기 전용 메모리는 사실 읽기 전용이 아니라고 한다.
읽기 전용이라면 우리는 ROM을 가지고 아무것도 할 수 없다. 제조사도 데이터를 써 넣을 수가 없을 거니까.;;^^;;;
정확히는 1회 쓰기 가능한 메모리 정도로 생각하면 되는데, CD-ROM이라고 했던 그것들이 RW가 안붙으면 일회용이었던 걸 생각해보면 바로 이해된다.

프로 갬성러들에게 친숙한 아이템인 LP도 1회의 쓰기만 허용하므로 ROM이라고 할 수 있지 않을까?
다회성
ROM이라고 불리면서도 읽기 쓰기 다 가능하고 심지어 다회용인 이상한 것들이 나오기 시작했다. 메모리가 워낙 비싸다 보니 그 대체제로서 ROM에 대한 연구개발이 이루어 진 것인지, 우리에게 지금 친숙한 HDD와 SDD를 비롯하여 전기로 데이터를 지울 수 있는 EEPROM 같은(SDD의 전신이라고 해야할까) 것들까지 뭐 굉장히 다양한 것들이 있다.
편의의 시대에 우린 살고있다. 감사하다.
컴퓨터 내부 구조
컴퓨터는 중앙 처리 장치와 I/O장치, 메모리로 구성되어있다.
우리는 이것들을 대충 다 알고 있다.
중앙처리장치는 CPU니 뭐니 하는 것들이고
I/O장치는 입출력 장치들이며 (메인보드에 보면 I/O 칩셋이 달려있다.)
메모리는 RAM과 SSD 등으로 알고 있다.

콤퓨타 시절의 컴퓨터
메모리
조작할 비트들을 저장할 장소를 메모리라고 한다.
메모리 버스라고 하는 것들은 말그대로 메모리를 비트를 처리-운반..?- (실제론 바이트 단위로 처리한다)하기 위해 버스가 계속 움직이는데 그 버스가 움직일 차로가 1차로 일방통행인지 16차로 고속도론지 하는 것이다.
32비트 OS에서는 4차선/ 64비트 OS에서는 8차선이다.

메모리 전용 버스- 타세요 타세요
그런데 이 버스를 탑승하는 방식이 각 프로세서 제조사들마다 다르다.
크게는 빅 엔디안과 리틀 엔디안으로 나뉘는데

양심없다. 그냥 통일 해라.
덕분에 운영체제 및 프로세서에 따라서 호환이 안되는 경우가 생긴다. 얌체다 아주. 타 제조사의 제품을 쓸 경우 세상이 뒤집어지는 경험을 하게되는거지.
입력과 출력(I/O)
I/O장치가 없는 컴퓨터는 그냥 지들만의 리그가 된다. 조작할 장치가 없으니 사용자는 사용할 수 없다. 그래서 I/O가 중요한 것인데, 주변장치라고 부르는 것들, 즉 우리같은 현대인에게 친숙한 키보드 마우스 부터 (심지어는 현대인의 손꾸락까지) 다양한 입력장치가 있다. 출력 장치로는 모니터나 스피커 같은 거가 있고.

현대인은 이 손가락이면 서맛터폰이라는 거로 컴퓨터 사용할 수 있다. 터치 만세.
근데 손가락 치니까 왤케 가운데 손가락 사진이 나오냐. 나 엿먹이는 거냐 구글?
중앙 처리 장치(CPU)
컴퓨터의 두뇌라고 불리는 중앙 처리 장치다. CPU는 하나의 부품으로 되어있지 않고 몇가지 부품의 패키지다.
계산기인 ALU 그리고 그런 알루~ 에게 피연산자와 명령코드를 전달 및 결과 값을 메모리로 반환 시켜주는 실행장치 등을 포함하고 있다.
간단한 프로세스로 표현하면 실행장치가 가진 명령어 목록을 통해 명령어와 메모리의 데이터를 알루~에게 전해주고 알루가 이를 계산해 메모리에 반영한다.

대충 이런거..
프로그램 카운터
이 때 실행장치가 메모리에서 명령어를 가져와야 하기 때문에 이를 알기 위해 프로그램 카운터를 활용하는데, 프로그램 카운터가 메모리 위치를 참조하고 있기 때문에 이 프로그램 카운터가 가리키는 주소에서 명령어를 가지고 올 수 있다.

먼 소린 지 모르겠다. 쟤가 술 마셨나보다.
주소 지정 모드
명령어는 한 두개가 아니다. 그렇기 때문에 많은 양의 주소를 가리킬 수 있는 솔루션이 필요한데 이 때 주소지정모드를 활용할 수 있다.
주소 지정 모드는 크게 세가지로 나뉜다.
첫째로, 즉시 주소 지정이다.
명령어가 가진 값을 바로 누산기로 넣는다.
둘째로, 직접 주소 지정인데,
명령어가 가진 값을 따라 해당 주소로 가고 그 주소의 값을 누산기에 넣는다.
마지막으로 간접 주소 지정이다.
명령어가 가진 주소로 가서 그 주소가 가진 주소로 또 가서 그 값을 누산기에 넣는다.
당연히 즉시 > 직접 > 간접 순으로 빠르고
그 역순으로 많은 주소를 참조할 수 있다.

제 악필을 보세요.
그 외의 4장 내용은 데이터 흐름 제어 등인데 이해하기가 어려워서 추후에 더 정리해보겠..다?
GPU
그래픽 처리 장치라고 얘기 되는 GPU도 일종의 CPU인데, CPU와는 달리 복잡한 연산보단 간단한 처리 장치가 많이 필요하다. 잘은 모르겠는데, 엔비디아 그래픽 카드 보면 보이는 CUDA가 아마 이 간단처리장치를 의미하는 것 같다. 갯수가 많을 수록 성능이 높거든. 끄덕

저성능의 많은 작업이 필요한 코인 채굴 역시, 이런 GPU의 특성을 활용한 케이스. 그래픽카드 폭등의 주범 ㅡㅡ
컴퓨터 아키텍처와 운영체제
컴퓨터 아키텍쳐는 컴퓨터의 여러 구성요소를 배치하는 방법이다.
가장 대표적인 방법으론 폰 노이만과 하버드식이 있다.
이거 코드스피츠 강의에서 계속 봐서 현기증나.
폰 노이만과 하버드
구조
폰 노이만 구조는 메모리 버스가 1개로 통합되어 속도는 느리지만 버스가 1개면 된다.
반면 하버드 구조는 데이터 메모리와 명령어 메모리 2개로 분리되어 속도가 빠르지만 버스가 2개 필요하다.

Von이 왜 폰이냐
여러가지 용어들
프로세스 코어 & 멀티코어 프로세서
기존 CPU의 구성은 계산장치, 시랭장치, 저장장치 3가지의 조합이었다. 이런 싱글코어 기반에서 회로크기가 점점 작아지고 성능이 좋아지면서 전력소모가 커져 발열이 높아지게 되자 해결책으로 여러개의 프로세스 코어를 묶은 멀티코어 프로세서가 등장했다.
그래서 기존의 CPU라고 불리던 싱글코어 프로세서는 프로세서 코어라는 이름으로 명칭이 변경되었고 여러개의 코어를 가진 것이 CPU라고 불리게 되었다.
마이크로 프로세서 & 마이크로 컴퓨터
메모리와 I/O가 프로세서 코어와 같은 패키지가 아닌 경우를 의미하며 마이크로 컴퓨터는 메모리와 I/O가 프로세서 코어와 같은 패키지에 있는 경우를 말한다.
이때 마이크로 컴퓨터는 아두이노와 같은 칩셋형 컴퓨터를 생각하면 편하다. 또는 생활가전의 간단한 명령을 수행하는 칩셋들이나.
SoC(System on Chip)
시스템 온 칩은 스마트폰이 등장하면서 많이들 들어봤을 것 같다. 일종의 마이크로 컴퓨터 고도화 버전인데, 기존 프로세서 코어 + 메모리 + I/O + 와이파이칩, GPU 등등이 한 칩셋에 통합되면서 사실 상 칩셋 하나에 모든 것이 있는 패키지다.
가장 대표적인 아키텍쳐는 ARM 아키텍쳐이며 스마트폰과 태블릿에서 사용된다.

아이폰-
이후 분량 - 함수, 서브루틴, 프로시저, 스택, 인터럽트, 상대 주소 지정, 메모리 관리 장치, 가상메모리, 시스템 공간과 사용자 공간, 메모리 계층과 성능, 코프로세서, 메모리 상의 데이터 배치, 프로그램 실행, 메모리 전력소비... 를 건너뛰며... 마무리하기.
5장의 경우에는 1회독 밖에 못했다. 그래서 사실 저 뒷부분을 정리하거나 감상평을 남기기에도 애매한 것 같아 과감히 다음으로 넘기기로 한다.
아무래도 중요한 부분인 듯 하야 이 부분만 따로 한번 정리하겠습니다.
마치며
이 모든 과정이 현대식 컴퓨터의 구조적인 부분에 대한 설명이었다. I/O장치도 다음 장에서 얘기하니 사실상 컴퓨터 설계의 구조적 이론만 봐도 책의 1/3인 것.
컴퓨터를 어릴 때부터 가까이에서 접하면서 알고 있던 내용도 있었고, 전혀 모르던 부분도 있었지만 어렴풋이 이해가 되는 지점들이 많아서 (다회독으로,..) 조금은 나 컴퓨터랑 친해진 걸 지도? 하게 된다.
당장 내가 아두이노 조차도 다룰 리 없는 하드웨어와 먼 사람일 지 언정 하드웨어와 친해지는 것이 좋겠지?
아 빨리 웹 공부 하고 싶다. ㅇㅇ


![[트러블슈팅] 서버를 터뜨린 쟈그마한 함수](https://cdn.hashnode.com/res/hashnode/image/upload/v1748357643167/fc68d237-0bfe-4f79-8e28-15fd98c5710d.png)
![[기술 서적 후기 및 요약] 쏙쏙 들어오는 함수형 코딩](https://cdn.hashnode.com/res/hashnode/image/upload/v1743129459556/14a7d741-d22e-4622-98e4-1857e449821e.png)
![[Daily Flow 1.] Validator 리팩토링](https://cdn.hashnode.com/res/hashnode/image/upload/v1741161717995/a62693a8-0f24-4dc9-8d80-cefe541ed663.png)