컴퓨터 시스템
컴퓨터 시스템은 하드웨어Hardware와 소프트웨어Software로 분류
하드웨어
- 중앙 처리 장치
- 기억 장치
- 입출력 장치
소프트웨어
- 시스템 소프트웨어
- 응용 소프트웨어
시스템 소프트웨어
- 시스템 소프트웨어의 정의
- 컴퓨터 시스템의 하드웨어 요소를 제어하고 관리하는 소프트웨어
- 시스템 소프트웨어 종류
- 언어 처리: 컴파일러, 어셈블러, 인터프리터 등
- 운영체제: 프로세스 관리 등
- 유틸리티: 로더, 드라이버, 백신, DBMS 등
프로그래밍 언어의 계층구조
기본적으로 컴퓨터는 기계어만을 이해하며,
사람의 입장에서 알아볼 수 있는 언어를 컴퓨터 언어로 변환하는 과정이 필요
(사람)
자연어
고급 언어
기호 언어 (어셈블리어 등)
기계어
(기계)
Translator
특정 언어를 다른 언어로 바꾸는 과정
- 컴파일러compiler
- 소스코드를 어셈블리어로 통째로 번역
- 어셈블러assembler
- 어셈블리어를 기계어로 번역
- 인터프리터interpreter
- 소스코드를 한 줄씩 읽고 바로 실행
변환의 효율을 위해 소스 코드는 BNFBackups Normal Form 규칙의 형식 시스템으로 작성 (규칙에 어긋나면 syntax error 출력)
컴파일 과정
대략적인 컴파일 과정은 아래와 같다.
- 소스코드의 어휘 분석
- 구문 분석
- 의미 분석
- 중간언어 변환
- 코드 생성
- 생성된 코드 최적화 (어셈블리어 완성)
- 어셈블러를 통해 기계어 변환
위는 기본적인 컴파일 과정이며, 어셈블리어 변환 과정도 포함하여 최종적으로 기계어로 변환한다.
소스코드의 크기가 커지게 되면 한 번에 처리하지 않고 여러 개의 원시 모듈source module로 분할하여 처리한다.
각각의 원시 모듈 모두 위와 같은 과정을 통해 목적 모듈로 변환되며, 아래 7번 과정을 통해 모듈을 결합한다.
- 링커linker를 통해 목적 모듈 결합
- 결합된 모듈을 기억장치에 적재 (적재 모듈)
8번 과정까지 하면 최종적으로 실행파일이 만들어진다.
- 로더loader를 통해 적재 모듈을 주기억장치에 적재
실행 파일은 9번 과정을 통해 이루어진다.
프로그램 언어별 처리 과정
프로그램 별로 처리하는 방식이 조금씩 상이
- C Language
- .c를 컴파일하면 .obj파일이 생성됨
- 생성된 .obj와 필요한 라이브러리(.lib)를 불러와 linker로 결합하여 실행파일 생성
- 실행파일을 loader가 주기억장치에 적재
- Java
- .java를 컴파일하면 .class(바이트코드) 파일이 생성됨
- 생성된 .class와 필요한 라이브러리(.jar)를 불러와 linker로 결합
- 결합된 코드를 JVMJava Virtual Machine에 적재하여 한 줄씩 코드 해석 후 실행
- 여러 인터프리터 언어들은 한 줄씩 코드 해석 후 실행 (python, js 등)
명령 해석 방법
기계어를 읽은 후 CPU에 설계된 회로를 바탕으로 명령 수행
이 때 명령어가 수행할 연산의 코드를 opcode라고 명명
'System Programming' 카테고리의 다른 글
| [시스템 프로그래밍] 어셈블리어 (0) | 2025.10.21 |
|---|---|
| [시스템 프로그래밍] 인텔 프로세서 구조 (0) | 2025.10.21 |
| [시스템 프로그래밍] 컴퓨터 동작의 기본 개념과 명령어 해석 (0) | 2025.10.20 |
댓글