System Programming
-
[System Programming] Hello World ToolchainSystem Programming 2021. 3. 10. 19:48
1. 코드 작성 #include int main(int argc, char *argv[]){ printf("Hello, world!\n"); return 0; } 2. 컴파일 명령 gcc -Wall -Werror -O2 -g -std=c99 -o helloworld helloworld.c -Wall : 모든 warning을 보여준다 -Werror : warning을 error처럼 처리한다 -O2 : optimization 정도를 2로 설정한다 -g : 디버깅 정보를 포함한다 3. 전처리 gcc -E #명령어들(#include, #define ...)을 수행 4. 어셈블리어로 컴파일 문자열 저장, 글로벌 타입 지정 등 복잡한 함수를 단순한 함수로 변환 등 5. Linking helloworld.o 파일을 ..
-
[System Programming] 3. C ToolchainSystem Programming 2021. 3. 10. 19:28
1. C PreProcessor(C 전처리기) : hello.c -> hello.i #으로 시작하는 명령어들을 소스코드 내에서 수행한다 #include : 다른 파일을 insert (는 경로를 알때, ""는 경로를 모를때, 따라서 경로를 명시해야 한다) #define : 심볼이나 매크로를 정의 #if/#endif : 조건의 참/거짓 여부에 따라 뒤의 문장들을 컴파일 #ifdef/#endif : 해당 심볼의 정의 여부에 따라 뒤의 문장들을 컴파일 전처리 명령어들은 세미콜론이 아닌 개행여부로 판단한다 2. C Compiler : hello.i -> hello.s 전처리된 소스코드들이 프로그래머가 지정한 아키텍쳐(ARM, Intel 등)에 따라 어셈블리 코드로 변환된다 3. C Assembler : hello..
-
[System Programming] 2. C Rundown (C Syntax)System Programming 2021. 3. 9. 18:46
1. Pointer - 다른 언어에서는 없는 것. 메모리 주소를 저장한다 - 데이터의 타입도 같이 저장한다 - 역참조는 *, ->, [] 를 통해 진행된다. 구조체는 특히 ->를 통해 참조된다 2. stdio.h - POSIX에서 모든 입출력은 파일 포인터를 통해 구현된다 : 모든 입출력은 파일들을 통해 수행된다는 것 - 모든 POSIX 프로세스는 stdin, stdout, stderr 세가지 파일을 가지고 있다 이 파일들을 이용하는 함수가 stdio함수다 - 많은 함수들이 있고 man 페이지를 통해 확인하자
-
[System Programming] 1. C와 POSIXSystem Programming 2021. 3. 9. 18:34
1. C를 사용하는 이유 - 함수, 구조적 프로그래밍, 복잡한 데이터 타입, 많은 추상화를 제공한다 - 많은 구조적 디테일들을 보여준다 -> 따라서 많은 시스템 커널들이 C를 사용한다 2. POSIX란 - OS 커널과 어플리케이션 사이의 인터페이스(라이브러리, 쉘 인터페이스)를 규격화한 것 - 규격화(standardized) 했기 때문에 여러 운영체제 위에서 동작한다 3. C, POSIX를 사용하는 이유 - C는 우리가 배우고 싶은 추상화의 단계와 잘 맞는다 - POSIX는 범용적이고 간단하다 - 64비트를 고려할 것이다