컴파일러; Compiler

컴파일러(Compiler)는 코딩 언어(파이썬, 자바스크립트 등)로 작성된 소스 코드를 CPU 가 이해하고 실행할 수 있는 기계어로 변환해주는 소프트웨어 도구이다. 일반적으로 소스 코드는 사람이 이해하기 쉬운 고수준 언어로 작성되어 있지만, CPU는 이해하기 어려운 저수준 기계어만 처리할 수 있다.
컴파일러는 소스 코드(문장 코드)를 입력받아 번역하여 목적 코드(Object Code) 또는 실행 파일(Executable File)을 생성한다. 이 과정에서 소스 코드의 문법과 의미를 분석하고, 중간 코드(Intermediate Code)로 변환한 후, 최종적으로 목적 코드로 변환한다. 목적 코드는 특정 하드웨어 아키텍처에서 실행할 수 있는 기계어로 작성된 파일이며, 실행 파일은 사용자가 프로그램을 실행할 수 있는 형태로 만들어진 파일이다.
컴파일러의 주요 목적은 소스 코드를 효율적으로 번역하여 실행 가능한 프로그램을 만드는 것이며, 이를 통해 프로그램의 실행 속도와 성능을 최적화한다. 또한, 컴파일러는 프로그래밍 언어의 문법 오류를 찾아내고 사용자에게 알려줌으로써 코드의 신뢰성을 높여준다.
컴파일러 개발

컴파일러는 인간이 사용하는 문장 코드를 CPU 가 이해하는 기계어로 변환하는 프로그램이다. 컴파일러 개발은 깊은 컴퓨터 및 과학적 지식과 언어, 건축, 법, 의학 등 다양한 분야의 전문 지식이 필요하며, 대부분의 경우 기존 컴파일러를 확장하거나 표준 컴파일러를 수정하여 새로운 언어나 기능을 지원하는 방향으로 진행한다.
언어 설계: 컴파일러를 만들기 전에 어떤 나라의 언어(문장)를 지원할지 정한다. 언어의 문법과 규칙을 정의한다.
구문 분석(Parser): 컴파일러는 문장 코드를 구문 분석하여 구조적인 트리로 변환합니다. 이 단계에서 코드의 구조와 문법 오류를 확인한다.
의미 분석(Semantic Analysis): 구문 분석 이후, 프로그램의 의미적인 부분을 분석한다. 변수의 유효성을 확인하고 타입 검사를 수행한다.
코드 생성(Code Generation): 이 단계에서 기계어 변환 코드를 생성한다. 컴퓨터가 실행할 수 있는 명령어로 번역한다.
최적화(Optimization): 생성된 기계어 코드를 최적화하여 실행 성능을 향상시키는 작업을 수행한다.
어셈블러(Assembler)와 링커(Linker): 기계어 코드를 특정 플랫폼에 맞게 변환하는 어셈블러와, 여러 개의 파일로 분할된 코드를 하나로 연결하는 링커를 사용하여 최종 실행 파일을 생성한다.
CPU; Central Processing Unit (중앙처리장치)

CPU 는 컴파일러가 작성한 목적코드(실행파일, 기계어, 명령)을 해석하고 실행하는 역할을 한다. 컴퓨터의 두뇌라고 할 수 있는데, 인공지능 소프트웨어를 실행해 인간이 가진 지적 능력과 유사한 일을 수행하는 기술적 도구이다.
또한, CPU는 알고리즘과 논리의 중심으로 여겨질 수 있다. CPU는 일련의 명령어를 기계어로 해석하고 이를 실행하는데, 이러한 과정은 수많은 알고리즘과 논리의 결합으로 이루어져 있다. 이러한 관점에서 CPU는 추상적인 사고와 문제 해결 능력의 상징이 될 수 있다.
또한, 컴퓨터 시스템은 기술적 발전의 산물이지만, CPU가 인간의 역할을 어떻게 대신하고 확장시키는지에 대한 철학적 고찰도 가능하다. 인공 지능과 머신 러닝 기술의 발전으로 CPU는 더욱 놀라운 기능을 발휘하고, 인간과 컴퓨터 사이의 관계에 대한 미래적인 상상력을 자극한다.
따라서, CPU를 철학적으로 바라보면, 기술적인 측면 뿐만 아니라 인간의 사고, 지능, 문제 해결 능력과 관련하여 다양한 의문과 이론을 탐구할 수 있는 흥미로운 주제가 될 수 있다.
프로파일러; Profiler

컴퓨터 프로파일러는 프로그램의 실행 시간, 자원 사용량 및 함수 호출 등과 같은 성능 데이터를 수집하고 분석해 프로그램의 동작을 평가하고 최적화하는데 사용한다.
프로파일러는 주로 다음과 같은 목적으로 사용된다.
성능 분석: 프로파일러를 사용하여 프로그램의 실행 시간과 자원 사용량을 측정하여 어느 부분이 가장 많은 자원을 소모하는지, 어떤 함수가 느린지 등을 파악할 수 있다. 이를 통해 병목현상을 발견하고 성능을 개선하는 데 도움을 준다.
코드 최적화: 프로파일러를 사용하여 성능 분석 결과를 기반으로 프로그램의 성능을 향상시킬 수 있는 최적화를 적용한다. 예를 들어, 자주 실행되는 루프를 최적화하거나 비효율적인 함수 호출을 개선할 수 있다.
메모리 누수 검출: 프로파일러는 프로그램이 사용하는 메모리를 모니터링하여 메모리 누수를 검출하는 데 사용된다. 메모리 누수는 프로그램이 동적으로 할당한 메모리를 반환하지 않아서 시스템의 자원을 낭비하거나 불안정한 동작을 유발할 수 있다.
호출 그래프 생성: 프로파일러는 프로그램의 함수 호출 그래프를 생성해 함수들 간의 관계를 시각화할 수 있다. 이를 통해 프로그램의 구조를 이해하고 복잡성을 파악할 수 있다.
주로 개발자들이 사용하는 프로파일러는 언어나 플랫폼에 따라 다양하며, 대부분의 현대적인 프로그래밍 언어와 개발 환경은 내장된 프로파일링 기능을 제공한다. 프로파일러는 프로그램의 성능 향상과 버그 검출에 매우 유용한 도구로서, 효과적인 소프트웨어 개발과 최적화를 위해 빠질 수 없는 중요한 도구 중 하나다.
어셈블리어; Assembly Language
어셈블리 언어(Assembly Language)는 컴퓨터 프로그램을 작성하는 저급 언어로, 기계어와 일대일로 대응하는 언어이다. 컴퓨터 아키텍처의 기본 명령어 집합을 사용하여 프로그래밍하는데, 사람이 이해하기 쉬운 기호와 단어로 명령어를 작성합니다.
어셈블리 언어는 사람과 컴퓨터 간의 다리 역할을 합니다. 컴퓨터가 이해하는 기계어는 0과 1의 이진 숫자로 이루어져 있어서 직접 작성하기 어려우며, 이를 대신하여 어셈블리 언어를 사용하면 보다 이해하기 쉽고 구조적인 프로그램을 작성할 수 있습니다.
어셈블리 언어로 작성한 프로그램은 어셈블러(Assembler)라는 특수한 프로그램을 사용하여 기계어로 번역되어 실행됩니다. 어셈블러는 어셈블리 언어 코드를 기계어로 변환하는 역할을 수행합니다. 이렇게 어셈블리 언어로 작성된 프로그램은 기계어로 직접 작성한 프로그램과 동일한 기능을 수행하지만, 더 쉽게 이해하고 수정할 수 있습니다.
어셈블리 언어는 하드웨어와 밀접한 관련이 있으며, 특정한 컴퓨터 아키텍처(Processor Architecture)에 따라 다양한 어셈블리 언어가 존재합니다. 따라서 특정 컴퓨터 아키텍처를 위한 어셈블리 언어를 사용하기 위해서는 해당 아키텍처에 맞는 지침과 문법을 익히는 것이 필요합니다. 어셈블리 언어는 주로 하드웨어와 시스템 프로그래밍, 임베디드 시스템 등에서 사용되며, 성능에 매우 민감한 애플리케이션을 개발하는 경우에 활용됩니다.
어셈블리어 "Hello World"
설치(Ubuntu) : $ apt install gcc gbd ld asm
소스 코딩
section .text
global _start
_start:
mov edx,len
mov ecx,msg
mov ebx,1
mov eax,4
int 0x80
mov eax,1
int 0x80
section .data
msg db 'Hello world',0xa
len equ $ - msg
'코딩' 카테고리의 다른 글
| 한글 처리(2), 파이썬으로 고급 코딩하기 (1) | 2023.08.05 |
|---|---|
| 한글 처리(1), 파이썬으로 기본 개념 잡기 (11) | 2023.07.31 |
| 코딩적 사고; Computational Thinking & Architectural Thinking (0) | 2023.07.25 |
| HTML 코딩과 과 글자 디자인; Typography (1) | 2023.07.24 |
| 웹브라우저라는 코딩로봇을 이용한 코딩 (1) | 2023.07.23 |
