2024. 1. 1. 23:46ㆍ컴구+OS
시키는거 다 하는 막내개발자... 가 된 이후 CS를 더이상 외면할 수 없음을 체감하게 되어 아래 책으로 공부를 시작했다.
분명 수업으로 다 수강했던 과목인데 막상 적용하려니 좀 막히는 부분이 있어서, 책 내용 + (일천하지만) 개인 경험을 같이 정리하며 공부해 보려고 한다. 잘못되었거나 틀렸거나 잘했다고 칭찬해주고싶거나 그냥 친해지고 싶거나... 아무튼 모든 댓글과 소통을 환영합니다!
혼자 공부하는 컴퓨터 구조+운영체제 | 강민철 - 교보문고
혼자 공부하는 컴퓨터 구조+운영체제 | 혼자 해도 충분합니다! 1:1 과외하듯 배우는 IT 지식 입문서 42명의 베타리더 검증으로, ‘함께 만든’ 입문자 맞춤형 도서이 책은 독학으로 컴퓨터 구조와
product.kyobobook.co.kr
Ch1-1. 컴퓨터 구조를 알아야 하는 이유
- 문제해결의 관점:
기술 면접에서 물어본다 ← 사실 아래 이유로 일할 때 필요하니까 물어보는 거라고 생각한다.
- 비용절감의 관점:
동접자 5명에 필요한 리소스와 5천 명에 필요한 리소스는 다르다. 서버는 비싸다. 좋은 서버는 더 비싸다. 따라서 이런 요구사항에 맞춰 가격을 최적화할 수 있다.
요즘은 특히 AWS 등 클라우드를 많이 이용하니까, 비용 변화를 더욱 체감할 수 있다. (개인 프로젝트로 c5.xlarge 같은걸 클러스터 묶어서 여럿 띄워놓으면 저걸 제발 최적화해서 줄여야 한다는 생각이 금방 들지도? 아무래도 내 돈이니까...)
IoT 개발을 한다면 제한된 리소스에서 스펙을 맞춰야 할 할 때가 있는데, 코드를 더 이상 개선할 수 없을 때 이 지식을 활용하면 더 쥐어짤 수 있다!
Ch1-2. 컴퓨터 구조의 큰 그림
컴퓨터가 이해하는 정보: 데이터와 명령어
- 필자는 컴퓨터를 "명령어를 처리하는 기계" 라고 정의한다.
- 명령어는 컴퓨터를 작동시키는 정보
- 데이터는 명령어를 위해 존재하는 재료
컴퓨터의 네 가지 핵심 부품: CPU 메모리 보조기억장치 입출력장치
메모리
- 역할: 현재 실행되는 프로그램의 명령어와 데이터 저장
- 메모리는 address로 관리되어 빠르게 접근할 수 있다.
CPU
- 역할: 저장된 명령어를 읽어들이고, 읽어들인 명령어를 해석하고 실행한다
- ALU(Arithmetic Logic Unit): 연산만 매우빠르게 잘함
- 제어장치(control unit): control signal(메모리 읽기/쓰기)을 내보내고 명령어를 해석하는 장치
- 레지스터: 프로그램 실행에 필요한 값들을 임시로 저장
처음에 공부할땐 아무래도 사람의 연산방식과는 다르다보니 조금 안 와닿았었다. ALU가 연산 '만' 한다는게 이해가 안되었는데 붕어가 엄청 똑똑해서 사칙연산은 할 수 있는데 결과를 기억하지 못하니 긴 식을 풀수가 없다고 생각했고, 그 붕어의 계산결과를 대신 적어놔서 합칠 수 있게 도와주는 걸 레지스터라고 생각해서 이해했다.
하나의 명령어를 실행하기 위해 다음과 같은 과정을 거친다.
1. 제어장치가 메모리에 '메모리 읽기' 제어 신호를 보낸다.
2. 제어장치는 읽은 명령어를 해석하고 ALU에 넘긴다
3. ALU는 시킨 연산을 한다
4. 연산 결과는 레지스터에 저장된다
보조기억장치
- 어쨌든 램은 휘발성(volatile) 이 있으므로 전원이 꺼지면 다 날아가니까, 전원 관계없이 값을 저장할 수 있는 보조기억장치(SSD/HDD) 가 필요하다
- 그리고 램은 비싸다. 1TB SSD는 있지만 1TB RAM은 아직 없...진 않지만 너무 비싸다
입출력장치
- 모니터 키보드 마우스 for human
...그리고 이것들을 이어주는 시스템 버스
- 주소 버스(address bus): 메모리의 주소를 주고받음
- 제어 버스(control bus): 제어 신호를 주고받음
- 데이터 버스(data bus): 명령어와 데이터를 주고받음
+제어 신호(control signal) 이 명령어랑 뭐가 다르길래 개념을 분리했나?봤더니 제어 신호가 좀더 low level의 개념인 것 같다. 제어 신호의 예시로는 아래와 같은 것들이 있다고 한다.
- 메모리 읽기/쓰기,
- I/O device 읽기/쓰기,
- Interrupt(코드 돌리다 Ctrl+C누르면 걸리는 KeyboardInterrupt 같은 것),
- ALE signal(같은 address에 다른 명령어 2개가 동시에 들어왔을 때 하나를 홀딩해 줌),
- OpCode(제어 신호를 위한 제어 신호)
동작 예시: CPU가 메모리 속 명령어를 읽고 싶다
1. 제어 버스로 '메모리 읽기' 제어 신호를 보냄
2. 주소 버스로 읽고자 하는 주소를 보냄
3. 메모리 : 1,2를 받아 데이터 버스로 CPU가 요청한 주소에 있는 내용을 보냄
'컴구+OS' 카테고리의 다른 글
[혼자 공부하는 컴구+OS] Ch2. 데이터 (0) | 2024.01.02 |
---|