운영체제 (OS) = Kernel + Shell : 하드웨어를 OS의 kernel이 감싸고 있으며, kernel은 여러 개의 shell이 감싸고 있는 구조.
영어
의미와 예시 설명
Framework, High-level API
추상화된 고급 기능을 쉽게 호출할 수 있도록 여러 Library와 기능을 통합하여 제공하는 환경. (예: PyTorch, TensorFlow, Django 등)
High-level programming language
인간 친화적인 문법으로 추상화된 명령어를 제공하며, 직접 OS나 하드웨어를 제어하지 않고 Interpreter를 통해 간접적으로 실행됨. (예: Python, JavaScript, Ruby, Java 등)
Interpreter
고급 프로그래밍 언어(Python 등)를 실시간으로 한 줄씩 Bytecode를 해석하여 OS 호출을 통해 간접적으로 실행하는 프로그램. Python 은 내부 컴파일러인 CPython이 소스코드를 미리 Bytecode로 변환
System programming language
고급 프로그래밍 언어 중에서도, 운영체제(OS)와 하드웨어 제어가 직접 가능한 언어. (예: C, C++, Rust, Go 등)
Compiler
고급 시스템 언어로 작성된 소스 코드를 CPU가 실행 가능한 기계어(Machine Code) 로 미리 변환해주는 프로그램. 대표적인 Compiler: GCC(GNU Compiler Collection의 약자, C/C++ Compiler), Clang (C/C++ Compiler)
Shell
사용자의 명령어를 받아 기계어로 번역하여 OS의 Kernel로 전달하는 interface program. OS별 예시: Windows (PowerShell, Command Prompt), Unix/Linux (bash, zsh, fish), Android (sh), iOS (zsh, sh), macOS (zsh)
Kernel
OS의 핵심이며 하드웨어 제어와 프로세스 관리를 담당하는 program. 사용자의 요청에 따라 필요한 컴퓨터의 자원(디스크, 메모리, H/W)을 할당. OS별 예시: Windows (NT Kernel), Unix/Linux (Linux Kernel), macOS/iOS (XNU Kernel), Android (Linux Kernel)
Assembly / Machine code
- Machine code(기계어): CPU가 직접 이해하는 0과 1로 구성된 명령어. (예: 영화 '매트릭스'에 나오는 0과 1)<br>- Assembly(어셈블리): 기계어를 사람이 이해할 수 있도록 대응시킨 저급 언어 표현 (예: mov, add 등)
Hardware, Electric Circuit
실제 물리적인 전자 회로. CPU, GPU는 수많은 Transistor로 이루어진 논리 게이트 및 ALU 회로로 구성
Java또는 C#: Python처럼 중간 코드(Bytecode)를 만드는 간접 실행 계열이지만, Python은 중간에 Python Interpreter가 관여하고, Java나 C#은 VM(JVM, CLR)가 관여하는 구조. 단 Python 보다는 사전 컴파일 요소가 좀 더 강한 구조임.
항목
Python (간접 실행)
C (직접 실행)
번역 방식
소스코드 → Bytecode (중간 코드)
소스코드 → Machine code (바이너리)
실행 구조
Bytecode를 실시간 해석하며 OS를 호출 (Interpreter 중심)
미리 컴파일된 Machine code를 OS가 직접 실행
실행 효율
상대적으로 느림 (인터프리터 개입)
빠름 (즉시 실행)
CPU 전달 경로
Bytecode → Interpreter → OS → Kernel → CPU
Binary → OS → Kernel → CPU
Python 언어 (간접적 실행과정)
Python 소스코드는 Interpreter가 Bytecode로 변환한 뒤, 이 Bytecode를 실시간으로 해석하여 OS를 통해 CPU에서 간접적으로 실행된다.
Python 소스코드
Interpreter (예: CPython)
OS 호출
Kernel → Hardware (CPU)
C 언어 (직접적 실행과정)
C 소스코드는 컴파일러가 기계어로 **사전 변환(compile)**하여 바이너리 실행 파일을 생성하고, 이 파일은 OS를 통해 직접 CPU에 전달되어 실행된다.