미소를뿌리는감자의 코딩

[컴퓨터 시스템 1장] 컴퓨터 시스템으로의 여행 본문

코딩 이야기

[컴퓨터 시스템 1장] 컴퓨터 시스템으로의 여행

미뿌감 2024. 9. 14. 09:07
728x90

1. .c 파일의 .o 파일 (executable object file)로의 변환

 

우선 hello.c파일 안에 printf("hello"); 가 들어가 있다고 하자.

  1. 처음에 cpp 전처리기를 만나, #include<stdio.h> 와 같은 라이브러리 코드를 hello.c 파일에 추가해 준다.
    해당 라이브러리 코드가 추가된 파일은 hello.i 가 된다. 이는 .c파일에서 modified 되었다고 한다.
  2. 이후 hello.i는 compiler로 들어간다. compiler는 cpp file을 처리해 준다. compiler는 어셈블리어 프로그램을 저장해준다.
    어셈블리어 프로그램 저장을 통해,  동일한 내용을 다른 언어로 썼어도 assembly 언어로 표현된 후 실행할 수 있게 된다.
  3. 이후 어셈블리 언어를 처리할 assembler(as)로 들어가게 된다. 여기서 기계어로 변환하여 컴퓨터가 이해할 수 있도록 한다.
    이를 relocatable object file이라고 명명한다. 확장자는 .s를 가지게 된다.
  4. 이후, linker를 이용해서 사용한, printf에 대한 .o파일과 현재 만든 hello.o파일을 연결시켜준다.
    이를 링크 단계라고 한다.
  5. 링크 단계를 거치고 난 파일을 excutable object file이라고 하며, 이를 메모리 적재 후 실행하게 된다.

2. Typcial hw system architecture

 

다음으로 전형적인 하드웨어 시스템 구조에 대해서 알아볼 것이다.

전기적 배선군을 bus라고 한다. bus는 word가 이동하게 되는데, 이는 byte의 묶음이다. 4byte(32bit) 혹은 8byte(64bit)를 이용한다.

 

  1. 키보드로 hello를 치는 과정에서 I/O bridge를 거쳐서 bus interface를 거쳐 register file로 들어간다. 여기서 해당 과정을 처리하면서 다시 I/O bridge로 넘어가, main memory에서 type한 ./hello를 저장하게 된다.
  2. ./hello를 치게 되고 enter를 치게 되면 disk에서 hello.o 파일을 찾게 된다. 이는 앞에서 언급한 .o 파일로 변환되어 있는 것이다.
  3. 해당 파일에 대한 정보가 이제 bus를 따라서 이동하게 된다. data part에는 출력 결과인 "hello world! /n"이 저장되어 있고, DMA 방법을 이용하여 main memory로 워드가 이동하게 된다. processor를 거치지 않고 disk에서 main memory까지 이동하기에 이를 DMA(direct memory access)라고 부른다. 
  4. 다음으로 main memory에 저장된 워드들을 display 해주어야 한다. 
    이는 I/O bridge, register file, bus interface를 거쳐 graphics adapter로 이동하게 된다.

 

3. Cache

 

캐시는 L0 캐시부터 시작하여 L1, L2, L3, L4 ... 으로 넘어갈 수 있다.

L0 캐시는 register로 가장 용량이 적고 빠르다고 할 수 있다. L0의 캐시는 L1이 되고, L1의 캐시는 L2가 되고 ... 을 반복한다.

L1, L2, L3 캐시는 SRAM이라고 부르며, L4는 주로 main memory라고 부르며 이는 DRAM이다.

 

그렇다면, SRAM vs. DRAM ...? 이게 무슨 뜻일까?

SRAM은 static random access memory, DRAM은 dynamic random access memeory를 의미한다.

그렇다면 왜 그렇게 named after 되었을까?

DRAM은 trangister, capacitor 등으로 구성되어 있어 전하를 필요로 한다. 전하를 필요로 하기에, 주기적으로 재충전을 해주어야 한다.
            즉, 활동적으로 동작해야 하기에 dynamic이라고 한다.

반면, SRAM은 filp flop 회로로 구성되어 있어 재충전 없이 안정적으로 이용할 수 있다. 안정적이기에 static이라고 부른다.

4. Others

다음으로 추상화에 대해 알아볼 것이다.

  • Virtual machine : 컴퓨터 전체의 추상화
  • Process : 실행 중인 프로그램의 추상화
  • Virtual Memory : 프로그램 메모리의 추상화
  • Files : 입출력 장치의 추상화

요즘에는 한 개의 core가 여러 개의 thread로 구성되어 있다.

인텔 코어 i7 프로세서라는 chip이 있다. 해당 chip은 각각의 코어가 2개의 thread를 지니고 있다. 따라서, 4코어 시스템을 8개의 thread를 병렬로 실행할 수 있다.

728x90

'코딩 이야기' 카테고리의 다른 글

[MST] Kruskal's Algorithm & Prim's Algorithm  (1) 2024.09.17
[Introduction to Algorithms] DFS 와 BFS  (0) 2024.09.15
프로세스, 스레드란?  (0) 2024.06.21
CI/CD 란  (0) 2024.06.20
MySQL과 MongoDB의 차이점은?  (0) 2024.06.17