1일차 - 씹어먹는 C언어

Nobu90·2023년 6월 17일
1

씹어먹는 C언어

목록 보기
1/7

내가 C 언어를 배우기 전에 알았으면 좋았을 것들

https://youtu.be/8kqY1b2nDT8

공대에 가면 어떻게든 C언어는 배우게 된다.

하지만 컴퓨터에 대한 배경 지식 없이 배우기 어렵다.

오래 전 발명된 언어로 초심자에 대한 고려없이 발명되었다.

48년 전 C와 지금의 별 차이가 없다.
-> 앞으로도 변하지 않을 가능성이 크다.

C언어에서 많은 언어들이 파생되었다.
-> C를 알면 다른 언어의 이해도가 높다.

추상화가 적다(직접 조정하는 부분이 많음) > 자동차를 수동 운전하는 것과 비슷하다.

컴퓨터의 작동 원리를 알면 매우 쉬울 수 있다.

CPU와 메모리

https://www.youtube.com/watch?v=nFk3uzR17NA

컴퓨터란 계산하는 장치이다.

스스로 명령어를 읽어들여 연산을 수행하는 장치
누가 명령어를 읽는가?
-> CPU

CPU는 열이 많이 발생한다.
최근에는 1초에 10억번 이상의 연산 가능

어디서 명령어를 읽는가?

CPU가 연산을 수행하기 위해 저장하는 공간(레지스터)는 크기가 작다
64비트 CPU의 경우 8바이트 16개 > 128바이트 밖에 되지 않음
-> 따라서 저장에 특화된 장치가 필요하다. 메모리 RAM

Random Access Memory(RAM)
어떤 위치든 동일한 속도로 데이터를 읽고 쓸 수 있음
주소 1과 주소 100만은 같음

속도가 매우 빠르다. (보통 데이터를 읽고 쓰는 데 100나노 초가 걸림)
휘발성이 있음(컴퓨터를 끄면 데이터가 날아감)

-> 저장하려면 하드디스크가 필요

하지만 RAM은 CPU보다 느리다.
CPU에서 연산 1개를 하는 데 걸리는 시간 : 0.3초
RAM이 읽는 시간 : 100 나노초
연산 300개를 할 수 있는 시간이 낭비됨

-> 낭비를 줄이기 위해 CPU에 데이터를 잠시 보관할 수 있는 장소를 마련함
캐시 > Cache

크기: L1캐시 < L2캐시 < L3캐시
속도: L1캐시 > L2캐시 > L3캐시

어떻게 명령어를 작성하는가?

https://www.youtube.com/watch?v=_uByLEwOt7Q

CPU가 이해할 수 있는 명령어의 집합 = ISA
예시) X86, ARM, RISC-V
CPU가 이해하는 명령어는 이진수이기 때문에 이해가 어려움
-> 사람이 이해할 수 있는 언어로 변환한 것이 어셈블리어

CPU가 어디에서 실행할 명령어를 가져올까?
-> 램

그럼 어떻게 명령어를 가져올 램의 주소를 알 수 있을까?
-> CPU에는 명령어 주소 레지스터 RIP가 있음

Register Index Point(X86 기준)

프로그램을 실행한다의 의미는 프로그램 정보를 램에 복사한 후 프로그램의 시작 위치로 RIP를 설정하는 것

어셈블리어는 난해하므로 사람이 쉽게 이해할 수 있는 언어를 개발하게 됨

사람이 이해하기 쉽게 작성하는 명령어 -> 프로그래밍 언어
어셈블리어로 바꿔주는 과정 -> 컴파일

2개의 댓글

comment-user-thumbnail
2023년 6월 18일

화이팅!! 같이 성장해가요.

1개의 답글