컴퓨터 시스템(Computer Systems: A Programmer's Perspective)이라는 책을 정리하고자 한다. 시간이 들겠지만(feat.로꼬) 길게 볼 책이라면, 내 언어로 정리해둬야 다시 볼 때 더 좋겠지 싶어서 원래의 나와는 다른 길로 가본다...
정리에 앞서, 초반에는 아마 용어 정리도 많이 나올 것 같다. 1장을 2번 다 읽은 상태인데.. 거의 소 입장에서 경 읽은 것 같다.
와 정리 쉽지 않다... 파이팅 !
아래와 같은 "hello.c"인 파일의 코드를 프로그래머가 작성하면, 이를 실행시키려면 저급 기계어 인스트럭션들(????)로 번역되어야 한다. 이 인스트럭션들은 “실행가능 목적 프로그램(Executable object Program)”이라고 하는 바이너리 디스크 파일로 저장된다.
#include <studio.h>
int main()
{
printf("hello, world\n");
return 0;
}
여기서 GCC 컴파일러 드라이버는 소스파일 hello.c를 읽어서 실행파일인 hello로 번역하며, 번역은 아래 4단계를 거쳐 실행된다. 이 4단계를 실행하는 프로그램들을 컴파일 시스템이라 부른다.
아래는 전형적인 시스템에서의 하드웨어 조직도(?)이다.
- CPU(=Central Processing Unit) : 주처리장치 혹은 프로세서라고 부른다.
1. 메인 메모리에 저장된 인스트럭션들을 해독(실행)하는 엔진이다.
- 중심에는 워드 크기 저장장치인 프로그램 카운터(PC)가 있다.
- 전원이 켜있는 동안 내내 프카(PC)가 가리키는 곳의 인스트럭션을 반복 실행하고, 다음 인스트럭션 위치를 가리키도록 업데이트 한다.
- 즉, cpu는 아래와 같은 행동들을 반복하는 것이다.
4-1. 적재(Load) : 메인 메모리에서 레지스터에 데이터를 복사(덮어쓰기)
4-2. 저장(Store) : 레지스터에서 메인 메모리에 데이터를 복사(덮어쓰기)
4-3. 작업(Operate) : 두 레지스터 값을 ALU로 복사, 두 개 워드로 수식연산, 레지스터에 결과값 덮어쓰기 저장
4-4. 점프(Jump) : 인스트럭션 자신으로부터 한 개 워드 추출, 이 것을 프카(PC)에 덮어쓰기- 최신 CPU들은 성능을 위해 위의 설명보다 훨씬 복잡한 방식으로 사용
- 메인 메모리(Main Memory) : CPU가 프로그램 실행하는 동안 데이터, 프로그램을 모두 저장하는 임시 저장장치다.
(0. DRAM계열의 RAM이라고 생각하면 된다.)
- 물리적으로는 DRAM 칩들로 구성되있다.
- 한 개의 프로그램을 구성하는 각 기계어 인스트럭션은 다양한 바이트 크기를 가진다.
- 입출력 장치(Input/Output Unit) : 키보드, 마우스, 모니터, 디스크 드라이브 등 외부 세예와의 연결을 담당한다.
- 각 입출력 장치는 컨트롤러 OR 어댑터를 통해 입출력 버스와 연결된다.
1-1. 컨트롤러 : 디바이스 자체가 칩셋 or 마더보드에 장착된다.
1-2. 어댑터 : 마더보드의 슬롯에 장착되는 카드다.- 버스(Bus) : 시스템 내를 관통하는 전기적 배선군
- 각 구성요소들 간에 바이트 정보를 전송한다.
- 일반적으로 word라는 고정 크기의 바이트 단위로 데이터를 전송한다. 오늘날 대부분은 32비트 혹은 64비트를 사용한다.
우와 멋져!! 시간이 들어도 여보에게 분명 보상받는 날이 올거야 내사랑🧡 화이팅!!!