일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- CSS 기초
- 자바스크립트
- 자바입력받기
- 혁신의기술2:신뢰의미래 블록체인을 만나다
- biginteger사용법
- 2차원배열정렬
- Entity
- 자바문자열구분
- select
- 반정규화
- K-MOOC 단국대학교 홍보단
- 블록체인강의
- national instruments
- StringBuilder
- attribute
- 컴파일시스템
- 시스템프로그래밍
- 해시
- 티스토리챌린지
- Node
- 오블완
- 블록체인
- K-MOOC
- stringreader
- StringTokenizer
- html기초
- 단국대학교 k-mooc
- 블록체인 강의
- 우선순위큐
- html 태그
- Today
- Total
열정 실천
시스템 프로그래밍 1) 컴파일 시스템 본문
[시스템 프로그래밍]
- 컴파일 시스템
- 런타임 시스템
- 운영체제 시스템
컴파일 시스템
우리가 작성한 hello.c 파일은 인간이 이해할 수 있는 고급언어(High-Level Language)로 작성이 된 파일이고, 이 파일을 시스템에서 실행시키기 위해서는 기계가 이해할 수 있는 저급언어(Low-Level Language)로 작성된 파일로 변환해주어야 한다. 그리고 이 파일은 실행 가능한 목적 프로그램(executable object program)으로 불리는 형태로 패키지화되어 이진 디스크 파일로 저장된다. (executable object program = executable object files) Unix 시스템 gcc compiler driver가 hello.c 파일을 읽어 hello로 변환해줌으로써 소스 파일을 목적 파일이 되는 과정을 수행한다. 이러한 번역을 ‘컴파일 시스템’ 이라고 하고 4단계에 거쳐 수행된다.
① Preprocessing phase 전처리 단계
hello.c 소스 파일에서 # 문자로 시작하는 지시자들에 대한 처리를 한다.
- 전처리기(cpp) 사용
- hello.c -> hello.i
② Compilation phase 컴파일 단계
어셈블리어 프로그램으로 변환된다.
*어셈블리어 : 기계어를 사람이 보기 쉽게 기호화한 것
- cc1 컴파일러 사용
- hello.i -> hello.s
③ Assembly phase 어셈블리 단계
어셈블러가 기계어로 번역하고 재배치 가능한 목적 프로그램(relocatable object program)의 형태로 묶어서 hello.o에 저장한다.
- 어셈블러(as) 사용
- hello.s -> hello.o (여기서부터 Text files (x), binary files (o) )
④ Linking phase 링크단계
외부 라이브러리와 목적 파일을 결합해주는 역할을 한다.
- ld 프로그램 사용
- hello.o -> hello
우리는 왜 컴파일 시스템의 작동방식을 이해해야 할까?
1. 프로그램 성능을 최적화하기 위해서
프로그래머로서 효율적인 코드를 작성하기 위해서 컴파일러의 내부 동작을 알 필요는 없 지만, 코드를 작성할 때 switch와 if-else, while과 for문 등 어느 것을 사용하느냐에 따라 효율성이 달라지므로, 가장 효율적인 코드를 작성하기 위해서 기계 수준의 코드와 컴파 일러가 C 코드를 기계어 코드로 어떻게 번역하는지는 이해하고 있어야 한다.
2. 연결 시간 오류를 이해하기 위해서
가장 복잡한 프로그래밍 오류 중 대부분은 링커의 동작과 관련이 있다. 특히 대규모 소 프트웨어를 빌드할 때 그렇다. 이러한 링커를 이해하고 있어야 한다.
3. 보안 허점을 피하기 위해서
그동안 버퍼오버플로우의 취약점은 네트워크 및 인터넷 서버의 보안 허점들을 설명해오 고 있으며, 이 취약점들은 소수의 프로그래머들만 신뢰할 수 없는 출처에서 받아들이는 데이터들을 신중하게 제한해야 한다는 사실을 인지하고 있기 때문에 발생되고 있다. 이 러한 취약점들을 막기 위한 보안 프로그래밍 학습은 데이터 및 제어 정보가 프로그램 스 택에 저장되는 방식을 이해하는 것으로 출발해야 한다.
참고자료 : CSAPP
출처 : 밥아조씨ㅋㅋ
'CS > 시스템 프로그래밍' 카테고리의 다른 글
시스템 프로그래밍이란?? (1) | 2022.09.19 |
---|