230109(월)
🎄 성장일지 3.1
책 행복한 이기주의자(웨인 다이어)
의 내용에 자극받아 시작하는 소박한 성장기록
살아있는 꽃과 죽은 꽃은 어떻게 구별하는가?<br/> 성장하고 있는 것이 살아 있는 것이다.<br/> 생명의 유일한 증거는 성장이다!
🌳 키워드 (1.0)<br/> 최대한 간단하게 정리, 추후에 보면서 스스로 설명<br/> 🍉 경험 위주로 (2.0)<br/> 단순 정보를 전달하기보다 무엇을 배웠고 어떻게 해결했는지 짧고 간단하게 작성<br/> ❄️ 정해진 템플릿에 맞춰서 (3.0)<br/> 키워드, 경험 모두 좋다. 다만 매일 작성하기로 마음 먹은만큼 핵심만 간결하게 정리할 수 있게 템플릿을 작성 (3.1) 230102부터 시작되는 학습에 관한 내용 추가
🔑 오늘의 키워드
기억장치
기억장치는 크게 SSD(Storage), RAM(Memory), CPU(CACHE, REGISTER)로 나눠지며 뒤로 갈수록 속도가 빠르고 가격이 비싸다. 즉, SSD에 프로그램들이 저장되어있고 이 프로그램을 실행시키면 RAM에 올라가게 된다. 이 때, 프로그램의 여러 명령어들이 CPU로 전달되어 처리된다.
우리가 작성한 코드
---(컴파일러)--->어셈블리 언어
---(어셈블러)--->기계어(0,1)
어셈블리 언어
기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어. 전류가 흐르는 1, 흐르지 않는 0의 이진수로 구성된 기계어를 인간의 관점에서는 이해하기 어렵기 때문에 어셈블리 언어가 등장했다. 우리가 흔히 배우는 언어들은 고급 언어로 컴파일하는 데 시간이 다소 걸리지만, 어셈블리 언어는 기계어와 일대일로 대응하는만큼 굉장히 빠르다. 다만, 어셈블리 언어는 배우기 어렵고 유지보수가 힘들다는 이유로(기계어보다는 낫지만) 특수한 경우가 아니라면 사용되지 않는다. 어셈블리 언어로 직접 코딩을 하진 않더라도, 어셈블리 언어를 이해하는 것은 컴퓨터의 구조를 이해하는 데 도움이 된다.
<!-- EAX가 Destination, EBX가 Source가 된다. -->
<!-- 즉, EBX를 EAX에 더하라는 의미이다. -->
ADD EAX EBX
추가) 어셈블리 언어에서 LOAD와 STORE를 기억하자
- LOAD: Memory에서 CPU(의 레지스트리)로 값을 가져온다.
- STORE: CPU(의 레지스트리)에서 연산이 끝난 값을 Memory로 보낸다.
ADD, SUB 등의 연산 과정은 Memory의 주솟값으로 할 수 없다. 즉, 그 값을 직접 가져와서 해야하기 때문에 위와 같이 LOAD와 STORE의 과정을 거친다.
레지스터
- CPU의 요청을 처리하는 데이터의 임시공간.(CPU에서 사용하는
변수
라고 생각하자.) - 공간 자체가 작고 가격은 비싸지만, CPU에 직접 연결되어 있어 연산 속도가 매우 빠르다.(RAM보다 훨씬 더 빠르다.)
- CPU는 자체적으로 데이터를 저장할 수 없다.
- 그러므로 레지스터를 이용하여 연산처리와 번지지정을 한다.
참고 자료
📝 요약 및 하루 간단 회고
CS가 처음 볼 때는 정말 단어도 하나하나 이해가 안되고 막막하다. 그렇지만 키워드부터 따라가면서 뭔가 그 연결지점에서 해소되는 무언가가 쾌감이 있다. 또, 아직은 작은 부분들이지만 컴퓨터의 구조에 대해서 알게 되면서 내가 작성하는 자바스크립트 언어가 어떻게 처리되어 컴퓨터가 명령어들을 실행시키는지 조금이나마 알 것 같다. 막연하게 알고 있던 Storage, Memory, CPU 그리고 CACHE, REGISTER 등도 그 작동 흐름을 알게 되니 속이 시원하다. 정말정말 배울수록 배울 게 많지만 천천히 배우면서 나아가는 재미가 있다. 내일은 또 어떻게 조금씩 성장할지 기대된다!
undefined