⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다.
오늘의 사족
안녕하시렵니까?
< 목차 >
1. Compile Process(Source code -> exe -> process)
2. exe 파일을 읽어오는 과정(exe -> memory -> cpu)
3. 컴퓨터 프로그램의 본질
- Computation
- Flow Control
1. Compile Process(Source code -> exe -> process)
“[1] Compile은 주어진 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 바꾸는 프로세스이다. Compiler는 이 작업을 실행하는 소프트웨어이다. 일반적으로 Compiler는 C 또는 Java와 같은 고급 언어를 CPU가 이해할 수 있는 기계어로 변환한다.”
Source code는 Compiler를 통해 exe로 바뀌고 exe는 다시 메모리로 올라가서 O/S에 있는 Loader를 통해 Process로 바뀐다. 예시를 통해 compile을 하는 과정을 알아보겠다. 변수를 선언한다는 것은 정의를 내린다는 것이다. 컴파일러는 Source code에서 정의를 읽어온 다음 정의에 해당하는 것으로만 Symbol table을 만든다. 이후에 Instruction을 컴파일한다. 이렇게 Symbol table을 통해서 정의된 주소들을 미리 할당해 놓은 다음 compiler는 exe code를 만드는데 compiler는 exe code의 header에 exe의 total size(Tsize)와 code segment size(CSSize), data segment size(DSSize)를 집어넣는다. 여기서 total size를 계산할 때는 code segment size와 data segment size, header size를 합해서 계산한다. 이후에 Loader가 exe를 Process로 만들면 Instruction이 실행된다.
2. exe 파일을 읽어오는 과정(exe -> memory -> cpu)
exe가 어떻게 메모리에 올라가고 메모리에 올라간 exe가 어떤 형태로 메모리 구조가 생기고 그것이 어떻게 실행되는 것일까? 메모리 0번지는 보통 ROM으로 되어 있어서 처음에 BIOS가 실행된다. ROM에다가 O/S의 하드디스크 위치를 고정해 놓는다. 그래서 BIOS는 O/S의 위치를 안다. Storage에 있는 파일을 더블 클릭을 하면 O/S 내에 있는 Loader가 하드디스크의 주소를 알아서 파일을 읽어오게 한다. 메모리가 exe 파일을 load 하면 CPU는 PC와 SP를 세팅하여 해당 메모리를 읽어온다. 여기서 header에 PC가 어느 곳을 가리키는지 알기 위해 PC의 값을 저장한다. PC의 값 외에도 CPU에 있는 모든 Register를 모두 header에 저장해 놓는다.
3. 컴퓨터 프로그램의 본질
컴퓨터가 하는 일은 PC가 지정한 곳에 가서 Instruction을 fetch한 다음 SP가 지정한 data를 가져와서 ALU가 계산한다. 이는 전자계산기와 아주 동일한데 다만 컴퓨터 프로그램의 근본적 차이는 flow control로 제어를 바꿀 수 있다는 것이다. 컴퓨터는 인간의 생각을 대신해주는 기계로 첫 번째는 메모리에 쓰고 지우는 것과 같은 계산을 하고 두 번째는 계산해야 할 일들에 대한 계획을 짜고 규칙에 따라 흐름의 제어를 만들어 놓는다. 즉 컴퓨터 프로그램의 본질은 계산과 제어의 흐름이다. 이에 따라 명령어는 두 가지로 분류되는데 computation과 flow control이다. 제어의 흐름의 default 값은 0번지부터 시작하는 PC를 1씩 증가시켜 명령을 실행하는 것이다. 하지만 조건에 따라 1씩 증가하는 것이 아니라 다른 주소로 점프할 수 있다는 점에서 제어의 흐름을 제어할 수 있다.
< 참조 >
[1] (2021.10.07.) MDN contributors, Compile [Website] 검색경로 https://developer.mozilla.org/ko/docs/Glossary/Compile
- (2020.03.13) Writing an Emulator in JavaScript (Chip-8), Tania Rascia [Website] 검색경로
https://www.taniarascia.com/writing-an-emulator-in-javascript-chip8/#decoding-chip-8-instructions
- How to write an emulator (CHIP-8 interpreter) [Website]
검색경로 https://multigesture.net/articles/how-to-write-an-emulator-Chip-8-interpreter/
- 프로그램 실행 과정, [Website] 검색경로
'🖥️ Computer Science > System Programming' 카테고리의 다른 글
[System Programming] CPU Instruction Cycle, Masking (2) | 2023.12.03 |
---|---|
[System Programming] Memory System, Instruction Cycle (0) | 2023.12.01 |
[System Programming] CPU Architecture (0) | 2023.11.30 |
[System Programming] 컴퓨터는 무엇인가? (1) | 2023.11.29 |