프로시저(Procedure)
비슷한 개념으로는 함수(Function)와 매서드(Method)가 있다.
컴퓨터 프로그래밍에서 사용되는 용어로, 일련의 명령문이나 코드 블록을 실행하는 서브루틴(subroutine) 또는 함수와 유사한 개념입니다. 프로시저는 일반적으로 특정 작업이나 계산을 수행하기 위해 사용됩니다.
프로시저는 주로 프로그램의 중복을 제거하고 코드를 구조화하여 관리하기 쉽게 만들기 위해 활용
#include <stdio.h>
int main()
{
print("hello World!");
return 0;
}
1.1 정보는 비트와 컨텍스트로 이루어진다.
hello 프로그램의 일생
1) 프로그래머가 에디터로 작성한 소스 프로그램
2) hello.c 라는 텍스트 파일로 저장
비트
2진법으로 0과 1 가운데 하나를 나타내는 단위
바이트
8비트로 구성 (총 256가지의 정보 나타낼 수 있음)
아스키
컴퓨터 내부에서 문자를 표현하는 표준적인 코드체계로서, 7비트로 구성된다.
일반적으로 컴퓨터는 8개의 비트 단위로 묶어 한번에 처리함
아스키는 단지 128개의 문자만 사용하기에 나머지 비트는 패리티 비트나 특정문자로 사용됨.
패리티 비트
정의)
정보 전달 과정에서 2진 비트열에 부가되는 에러 검출용 비트
비동기 통신에서는 데이터 전송이 단속적으로 이루어지고 한번에 하나의 문자가 전송되므로 비동기 에러 검출은 실행되어야 한다.
이때, 사용되는 것이 패리티 비트..!
전송 에러 검출을 위해 같은 문자를 두 번 보내는 대신 패리티 비트를 사용하면 하나의 비트로 그 문자의 정보를 제공 가능
방법)
1로된 비트들의 개수가 항상 짝수 또는 홀수가 되도록 바이트의 끝에 붙인다.
7비트의 0010110이라는 데이터에서 짝수 패리티가 되게 하기 위해서는 1의 패리티 비트를 붙여 00101101로 한다.
또는 같은 데이터에 대해 홀수 패리티 비트가 되게 하려면 0의 패리티 비트를 붙인다.
각 바이트는 프로그램의 텍스트 문자를 나타냄
텍스트 문자 = 바이트로 나타냄 = 8비트가 1바이트
버퍼 오버플로우
정의) 버퍼를 넘치게(overflow) 하는 것을 의미
메모리에 할당된 버퍼의 양을 초과허는 데이터를 입력하여 프로그램의 복귀 주소(return address)를 조작, 궁극적으로 해커가 원하는 코드를 실행하는 것
버퍼"buffer"
정의) 프로그램 처리 과정에서 필요한 데이터가 일시적으로 저장되는 공간으로 메모리의 스택(stack) 영역과 힙(heap) 영역이 여기에 속하며, "버퍼 오버플로우"가 이 두 가지 영역 중 어떤 것을 이용하느냐에 따라 두 가지로 분류 가능
컨텍스트
정의) 호출, 응답 간의 환경 정보라고 정의. 즉, 누가 무엇을 어떤 의도를 가지고 언제 행위를 하였는지에 대한 정보를 통칭하여 "컨텍스트"라고 부른다. 이 컨텍스트 정보가 그냥 일반적인 환경 설정 정보와의 차이점은 컨텍스트 정보는 일반적인 환경설정 정보와 다르게 런타임시에 생성되는 정보라고 할 수 있다.
텍스트 파일
오로지 아스키 문자로만 이루어진 파일
인간이 읽을 수 있는 데이터로
텍스트 편집기와 같은 도구로 쉽게 열고 편집할 수 있습니다.
텍스트 문서, 소스 코드 파일, 구성 파일, 로그 파일 등이 포함
바이너리 파일
텍스트 이외의 다른 모든 파일.
텍스트 파일과 달리 이진 데이터를 저장하는데 사용
이진 데이터는 텍스트가 아닌 바이트로 구성되며, 텍스트 편집기로 직접 열면 해석하기 어려울 수 있습니다.
사용자 또는 프로그램이 사용하던 정보나 숫자 값을 가공 없이 그대로 파일에 저장한 파일
.jpg .png 같은 그림 파일
.mp3 와 같은 음악 파일
.exe 와 같은 실행 파일 등
바이너리 파일은 파일의 내용을 확인하려면, 해당 파일을 볼 수 있는 프로그램이 별도로 있어야 한다.
예를 들어, PNG 형식의 그림 파일을 보려면 아래와 같이 '그림판'과 같이 그림 파일을 보여줄 수 있는 프로그램이 설치되어 있어야지 가능
인스트럭션(Instruction: 명령어)
저급 기계어(Assembly Language)에서 사용되는 용어 중 하나인 "인스트럭션(Instruction)"은 컴퓨터 프로세서(중앙 처리 장치)가 수행해야 하는 작업 또는 연산의 기본 단위입니다. 인스트럭션은 컴퓨터의 기계어로 작성되며, 컴퓨터 아키텍처에 따라 다양한 형식을 가질 수 있습니다.
바이너리 디스크 파일
C의 각 문장들이 다른 프로그램에 의해 저급 기계어인 인스트럭션으로 번역되고,
이 인스트럭션들은 실행가능 목적 프로그램이라고 하는 형태로 합쳐져서 '바이너리 디스트 파일'로 저장된다.
"바이너리 디스트 파일(Binary Distribution File)"은 주로 소프트웨어나 프로그램의 배포 형식 중 하나를 가리키는 용어입니다. 이는 소프트웨어를 다른 사용자 또는 컴퓨터 시스템으로 전달하고 설치하는 데 사용되는 파일이며, 이 파일은 주로 바이너리 형식으로 구성됩니다. 바이너리 디스트 파일은 소스 코드가 아니라 컴파일된 실행 가능 파일 또는 라이브러리로 제공
컴파일 시스템 단계
컴파일러를 사용하여 프로그램을 컴파일할 때 발생하는 주요 단계를 설명하겠습니다. 프로그램의 소스 코드를 기계 코드로 변환하기 위해 몇 가지 중요한 단계가 수행됩니다:
1. 전처리(Preprocessing):
- 소스 코드 파일을 컴파일하기 전에 전처리기(preprocessor)에 의해 처리됩니다. 전처리기는 주로 `#include` 지시문을 처리하여 헤더 파일을 포함하고, 매크로 확장 및 조건부 컴파일을 수행합니다.
2. 컴파일(Compilation):
- 전처리된 소스 코드는 컴파일러에 의해 분석되고 중간 코드 또는 어셈블리 코드로 변환됩니다. 이 단계에서 코드의 구문 및 의미적 오류가 검사됩니다.
3. 어셈블리(Assembly):
- 몇몇 컴파일러는 컴파일 후에 중간 어셈블리 코드를 생성하며, 이 코드는 어셈블러에 의해 기계어 코드로 번역됩니다. 다른 컴파일러는 바로 기계어 코드를 생성할 수도 있습니다.
4. 링킹(Linking):
- 프로그램이 여러 소스 파일로 구성된 경우, 각 소스 파일이 컴파일된 후 이들을 하나로 연결하는 과정이 필요합니다. 이를 "링킹"이라고 합니다. 라이브러리 파일 및 외부 종속성도 여기에서 연결됩니다.
5. 로드(Loading):
- 최종 실행 파일은 메모리에 로드되어 실행됩니다. 운영 체제는 실행 파일을 메모리에 로드하고 프로그램을 시작합니다.
이러한 단계는 소스 코드를 실행 가능한 프로그램으로 변환하는 과정을 나타냅니다. 컴파일 시스템은 이러한 단계를 자동으로 수행하며, 프로그래머는 주로 소스 코드 작성 및 디버깅에 집중합니다.
'크래프톤 정글 > TIL' 카테고리의 다른 글
| [2주차] 런타임 에러(RecursionError) 해결방법 (0) | 2023.10.23 |
|---|---|
| [2주차] 그래프 연결 관계 표현(인접 행렬/ 인접 리스트) (0) | 2023.10.20 |
| [1주차] 재귀함수의 장단점 (+stack overflow/ 재귀 한계) (0) | 2023.10.20 |
| [1주차] 파이썬 sort, sorted (0) | 2023.10.16 |
| [1주차] 알고리즘을 위한 파이썬 기본 문법 (0) | 2023.10.16 |