일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- DFS
- 그래프(Graph)
- 백준 9012번
- 트리(Tree)
- 스택(Stack)
- 다익스트라 알고리즘(Dijkstra Algorithm)
- 알고리즘 개념
- 백준 21606번
- 백준 17608번
- 백준 2493번
- 백준 2504번
- 큐(Queue)
- BFS
- 이분 탐색(Binary Search)
- 위상 정렬(Topology Sort)
- 이분 그래프(Bipartite Graph)
- 플로이드 워셜 알고리즘(Floyd-Warshall Algorithm)
- 백준 1707번
- DFS & BFS
- 동적 프로그래밍(Dynamic Programming)
- 백준 18352번
- 백준 2261번
- 백준 10000번
- 백준 2812번
- DFS(Depth First Search)
- 그리디 알고리즘(Greedy Algorithm)
- BFS(Breadth First Search)
- 백준 1948번
- 분할 정복(Divide and Conquer)
- 위상 정렬(Topological Sort)
- Today
- Total
Always Be Wise
비트와 컴파일 시스템 본문
정보는 비트와 컨텍스트로 이루어진다.
C 언어에서 소스 프로그램은 0 또는 1로 표시되는 비트들의 연속이며, 바이트라는 8비트 단위로 구성된다.
대부분의 컴퓨터 시스템은 텍스트 문자를 아스키(ASCII) 표준을 사용하여 표시한다.
아스키 표준은 각 문자를 바이트 길이의 정수 값으로 나타낸다. 아스키 문자들로만 이루어진 파일을 텍스트 파일이라 부른다.
그런데 동일한 일련의 바이트가 컨텍스트에 따라 정수, 부동소수, 문자열 또는 기계어 명령을 의미할 수 있다.
정리하자면, 모든 컴퓨터 시스템 내부의 정보는 비트들로 표시되며, 이 비트들은 컨텍스트에 의해 그 의미가 결정된다.
프로그램은 다른 포로그램에 의해 다른 형태로 번역된다.
C 언어로 프로그램을 작성한다고 할 때, 우리가 입력한 코드들은 인간이 이해하기 쉬운 고급 언어이다.
그러나 작성한 C 프로그램 파일을 실행하려면 각 코드들을 저급 기계어로 번역해야 한다.
이러한 번역 과정은 전처리기, 컴파일러, 어셈블러, 링커 등의 프로그램으로 구성된 컴파일 시스템에 의해 이루어진다.
전처리 단계
전처리기는 본래의 C 프로그램을 #문자로 시작하는 디렉티브에 맞추어 수정한다.
예를 들어, 우리가 작성하는 C 파일 첫 줄의 #include<stdio.h>는 전처리기에게 시스템 헤더파일인 stdio.h를
C 파일 문장에 삽입하라고 지시한다.
컴파일 단계
컴파일러는 전처리가 끝난 C 파일을 어셈블리어로 변환한다.
어셈블리어는 여러 상위 수준 언어의 컴파일러들을 위한 공통의 출력 언어를 제공한다.
예를 들어, C와 Fortran 컴파일러는 둘 다 동일한 어셈블리어로 출력 파일을 생선한다.
어셈블리 단계
앞선 단계들을 거쳐 어셈블리어로 변환된 프로그램을 기계어로 변환, 바이너리 형식의 목적 파일로 저장한다.
링크 단계
우리가 작성한 목적 파일을 다른 여러가지 라이브러리 목적 파일과 연결하는 단계이다.
이 단계를 마치면 최종적으로 바이너리 형식의 실행가능 목적 파일이 되어 시스템에 의해 실행된다.
'컴퓨터 시스템 > CSAPP' 카테고리의 다른 글
가상 메모리 (0) | 2021.12.10 |
---|---|
동적 메모리 할당과 할당기 (0) | 2021.12.09 |
운영체제 (0) | 2021.12.09 |
캐시 메모리와 저장 장치 (0) | 2021.12.09 |
기본적인 컴퓨터 하드웨어 구성 (0) | 2021.12.08 |