Home [SP] 시스템 프로그래밍 개요와 Makefile
Post
Cancel

[SP] 시스템 프로그래밍 개요와 Makefile

시스템 프로그래밍 개요와 Makefile

1강-1. 시스템 프로그래밍 개요

System Programming

  • 시스템 소프트웨어를 만드는 프로그래밍 활동
  • 다른 소프트웨어에게 서비스를 제공하는 소프트웨어를 만드는 프로그래밍 활동
  • 유닉스 시스템 프로그래밍은 유닉스에서 제공하는 시스템 호출을 이용해서 프로그램을 작성하는 것
  • 시스템 호출은 유닉스 시스템이 제공하는 서비스를 프로그램에서 이용할 수 있도록 지원하는 프로그래밍 인터페이스를 의미

What is system?

  • 어떤 목적을 달성하기 위해서 필요한 것들을 모아둔 것
  • A set of HW/SW resources combined for one purpose

System call & System SW

  • 운영체제(Kernel / OS): 하드웨어를 효율적으로 관리해서 사용자가 원하는 서비스를 제공하는 소프트웨어
  • Application -> System SW and Utilities -> System Call Interface -> Kernel(OS) -> Hardward

System Programming?

  1. System
    • 하나의 목적을 위해 결합 된 자원(HW/SW)들의 집합
  2. System programming
    • 시스템을 구성하는 자원을 다루는 프로그램
    • 응용프로그램에 서비시를 제공하는 프로그램 (OS, firmware, compilers, I/O routines, scheduler, …)
  3. System call interface
    • 시스템 프로그램이 제공하는 기능을 사용하기 위한 통로 (함수, …)
  • 시스템에 대한 이해를 가지고 하는 프로그래밍
    • 시스템을 구성하ㅏ는 자원 및 동작 방식에 대한 이해를 바탕으로 효율적인 프로그램 작성
  • 시스템 자원의 기능을 활용하는 프로그래밍
    • 시스템 자원을 직(간)접적으로 제어 (System call 활용)

System call vs Library function

  • System call interface
    • 시스템의 기능(서비스)을 이용/제어하는 통로
    • Kernel 내 모듈을 직접 호출
  • Library function
    • 미리 컴파일 된 함수
      • 자주 사용되는 기능을 독립적으로 구현
      • 프로그램 개발을 빠르고 쉽게 하도록 도와 줌
    • 내부적으로 System call을 활용

Why system programming?

  • Do more things
  • Higher performance

1강-2. Unix/Linux 개요

Unix/Linux system

  • 현재, 다양한 시스템에서 가장 널리 사용되는 OS

Unix/Linux architecture

  • Kernel
    • OS의 핵심 기능을 모아 놓은 것
  • System call
    • OS의 기능 중 응용프로그램이 사용하도록 허락된 기능들의 집합
  • Shell
    • 사용자와 OS 사이의 인터페이스
    • 사용자의 입력을 해석하여 커넣의 함수 호출
  • Utilities

Linux

  • PC를 위한 효율적인 유닉스 시스템
  • 오픈소스
  • 다양한 플랫폼에 이식 가능
  • 높은 안정성
  • 강력한 네트워크 기능
  • GNU 소프트웨어와 함께 배포

1강-3. Linux 기초 명령어

기초 명령어

Login/Logout

telnet유닉스시스템에 접속 telnet 주소
logout
exit
유닉스시스템에서 접속 해제 logout
exit

Process management

ps현재 실행 중인 프로세스의 정보 출력-u : 특정 사용자의 Proc.
-ef: 모든 Proc.의 상세 정보
ps
ps -u 사용자ID
ps -ef
killProcess 강제 종료-9: 강제 종료kill 5000
kill -9 5001

File/Directory

pwd현재 디렉토리 경로 출력  
ls디렉토리 내용 출력-a: 숨긴파일출력
-l: 파일 상세정보 출력
 
cd현재 디렉토리 변경  
cp파일/디렉토리 복사-r: 디렉토리 복사cp a.txt b.txt
cp -r dir1 dir2
mv파일/디렉토리 이름변경과 이동 mv a.txt b.txt
mv a.txt dir1
rm파일/디렉토리 삭제-r: 디렉토리 삭제 
mkdir디렉토리 생성  
rmdir빈 디렉토리 삭제  
cat파일 내용 출력  
more파일 내용을 쪽단위로 출력  
chmod파일 접근권한 변경 chmod 755 a.exe
chmod go+x a.exe
grep패턴 검색 grep abcd a.txt

Others

su사용자 계정 변경-: 변경할 사용자의 환경 초기화 파일 실행 
tar파일/디렉토리 묶기-cvf: tar파일 생성
-tvf: tar파일내용보기
-xvf: tar파일 풀기
tar cvf a.tar *
tar tvf a.tar
tar xvf a.tar
whereis
which
파일 위치 검색 whereis ls
which telnet

Man page

  • Unix/Linux 시스템 사용 설명서
  • man [options] [section] page
    • page: 검색하려는 명령어/함수 이름
    • section: page의 소속 구분
      • 1: Shell cmd, 2: System call, 3: Std. library

Hello Linux

VI editor

입력모드전환i, a, o, O명령모드전환ESC
커서이동j, k, h, l 또는 방향키행이동#G (50G, 143G, …)
:행번호
한글자수정r여러글자수정#s (5s, 7s, …)
단어수정cw명령취소u, U
검색하여수정:%s/aaa/bbb/g복사#yy (5yy, 10yy)
붙이기p커서이후삭제D(shidt-d)
잘라내기x, #x(3x, 5x, …)행삭제(잘라내기)dd, #dd(3dd, 4dd, …)
저장하고 종료:wq!
ZZ
저장하지 않고 종료:q!

1강-4. Makefile & Make (Unix/Linux 컴파일 환경)

GNU C compiler

  • Basic compiler for Unix/Linux
  • gcc [options] filename
    • options
      • -c: object file(.o)만 생성
      • -o: execution file name 지정

Makefile & Make

Makefile

  • Compile 방법을 기술 하는 파일
    • 관련 파일 정보, compile 명령, 실행 파일명 등
  • 여러 파일로 구성된 프로젝트 설정과 비슷한 개념

Make

  • 주어진 Makefile에 따라 compile을 수행하고, 실행파일을 생성
  • 최초 컴파일 이후에는, 변경이 있는 파일만 컴파일 함

Without make file

1
2
3
4
5
$gcc -c -o main.o main.c
$gcc -c -o foo.o foo.c
$gcc -c -o bar.o bar.c

$gcc -o app.out main.o foo.o bar.o

Makefile -> 소스코드가 있는 폴더에 위치

1
2
3
4
5
6
7
8
9
10
11
app.out: main.o foo.o bar.o
  gcc -o app.out main.o foo.o bar.o

main.o: foo.h bar.h main.c
  gcc -c -o main.o main.c

foo.o: foo.h foo.c
  gcc -c -o foo.o foo.c

bar.o: bar.h bar.c
  gcc -c -o bar.o bar.c
  • Rule block
1
2
3
4
5
6
7
8
9
10
<Target>:<Dependencies>
  <Recipe>

# Target
  - Bulid 대상 이름
  - 일반적으로 최종 결과 파일명 사용
# Dependency
  - Build 대상이 의존하는 Target이나 파일 목록
# Recipe
  - Build 대상을 생성하는 명령어
  • Implicit rules (Built-in rules)
    • 자주 사용되는 규칙을 자동으로 처리
1
2
3
4
5
6
app.out: main.o foo.o bar.o
  gcc -o app.out main.o foo.o bar.o

main.o: foo.h bar.h main.c
foo.o: foo.h foo.c
bar.o: bar.h bar.c

Variables (or Macro)

$(VarName)

1
2
3
4
5
6
7
8
9
10
11
CC = gcc
CFLAGS = -g -Wall
OBJS = main.o foo.o bar.o
TARGET = app.out

$(TARGET):$(OBJS)
  $(CC) -o $@ $(OBJS)

main.o: foo.h bar.h main.c
foo.o: foo.h foo.c
bar.o: bar.h bar.c

Clean rule

  • Build로 생성된 파일들을 삭제하느 규칙
  • Clean build를 위해 사용 가능
1
2
3
4
5
clean:
  rm -f *.o
  rm -f $(TARGET)

$make clean

Makefile -basic pattern

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CC = gcc
CFLAGS = -g -Wall
OBJS = main.o foo.o bar.o
TARGET = app.out

all: $(TARGET)

$(TARGET) : $(OBJS)
  $(CC) -o $@ $(OBJS)

main.o: foo.h bar.h main.c
foo.o: foo.h foo.c
bar.o: bar.h bar.c

clean:
  rm -f *.o
  rm -f $(TARGET)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CC = <compiler>
CFLAGS = <options for compiler>
LDFLAGS = <options for linker>
LDLIBS = <a list of library to link>
OBJS = <a list of object file>
TARGET = <build target name>

all: $(TARGET)

clean:
  rm -f *.o
  rm -f $(TARGET)

$(TARGET) : $(OBJS)
  $(CC) -o $@ $(OBJS)
This post is licensed under CC BY 4.0 by the author.

23년 3월 1주차 주간 회고

23년 3월 2주차 주간 회고

Comments powered by Disqus.