신규강사모집 바로가기
자유게시판 바로가기
Q&A 바로가기
강의 소개
초고속으로 대규모 데이터를 처리하는 리눅스 서버를 개발하거나 실제 펌웨어 솔루션과 서버 솔루션간의 통신을 수행할 경우 개발자가 반드시 알아야 하는 필수적인 개념과 리눅스 커널의 내부 동작 방식에 대해 파악하는 시간을 가집니다.

또한 멀티 프로세스 및 스레드를 사용함에 있어 동기화 메커니즘을 잘못 사용하면 원하는 동작이 이루어지지 않고 오동작을 하며 성능은 최하로 떨어지게 됩니다. 본 과정은 이와 같은 멀티 스레드 및 멀티 프로세스 프로그래밍을 올바르게 수행하여 성능도 높이고 안정성도 높이는 방법에 대한 실무 능력을 키우는 것을 목표로 합니다.

[강의 요약]
open, read, write 등등의 리눅스 Low Level 파일 시스템 API 활용법
파일 시스템 처리 메커니즘에 관련된 리눅스 커널 코드 간략 설명
fork(), pthread_create(), execve() 등등의 리눅스 Low Level 태스크 제어 API 활용법
C.O.W 아키텍처 및 Demand on Paging, Lazy Buddy 시스템과 Slab 캐시 시스템
컨텍스트 스위칭, 뮤텍스, 세마포어, 메시지 큐, Shared Memory API 활용법
실제 제품군에서 사용한 펌웨어와 통신하는 중앙 제어 서버에서 활용한 방식 일부 소개

Unix 및 Linux의 핵심 철학

‘모든 것은 파일이다’ 라는 UNIX의 핵심 철학이 가지는 의미와 코드를 살펴봅니다.

  1. 1) 리눅스가 만들어진 역사와 과정
  2. 2) 왜 모든 것은 파일인가?
  3. 3) 리눅스 커널 코드 내부 분석
소켓 통신, 디바이스 드라이버, I/O 제어를 하던 모두 파일로서 제어하므로 기본 개념을 탄탄하게 다져 향후 리눅스를 더 잘 활용할 수 있게 기초 개념을 다집니다.

open, read, write 등의 Low Level 파일 API 활용

리눅스 시스템 프로그래밍시에 가장 많이 활용하는 open, read, write, lseek, close 등에 대해 알아봅니다.

  1. 1) System Call 이란 무엇인가?
  2. 2) 각 API의 사용방법 학습
리눅스 운영체제의 파일을 제어하기 위한 파일 시스템 콜에 대해 학습합니다.

opendir, readdir, mkdir 등의 Low Level 디렉토리 API활용

리눅스 시스템 프로그래밍시에 디렉토리와 관련된 제어를 수행하기 위해 활용한 디렉토리 관련 시스템 콜을 활용하는 방법에 대해 학습합니다.

  1. 1) 디렉토리 관련 API 사용법 학습
  2. 2) 리눅스 명령어 직접 구현하기
  3. 3) 각각의 기능들이 제품군에서 활용되는 실전 케이스들의 단편
리눅스 운영체제에서 파일과 디렉토리를 혼성 제어하기 위해 필요한 디렉토리 관련 시스템 콜에 대해 학습하며 또한 일부 실전 사례를 간략하게 살펴봅니다.

프로세스와 객체

C/C++, Java 등에서 객체라는 용어가 자주 사용되는데 이것은 무엇인지 또 프로세스와 객체의 관계는 무엇인지 살펴봅니다.

  1. 1) 프로세스가 무엇이며 리눅스는 이를 어떻게 관리하는가?
  2. 2) 자주 등장하는 용어 객체란 도대체 무엇인가?
객체라는 용어의 진의와 리눅스에서 프로세스 관리를 어떻게 하는지 살펴봅니다. 프로세스와 가상 메모리, 그리고 이들의 물리 메모리 맵핑에 대해서도 알아봅니다.

fork을 통한 태스크 제어 API 활용과 Multi-Tasking의 원리

fork()를 사용하여 여러개의 main 함수가 프로그램상에서 함께 동작하는 Multi-Tasking 개념에 대해 학습합니다

  1. 1) Multi-Tasking의 핵심 개념
  2. 2) fork()를 통한 멀티 프로세스 프로그래밍
Multi-Tasking의 원리를 CPU 동작과 어셈블리어 수준에서 상세하게 분석하고 fork()를 사용하여 멀티 프로세스를 제어하는 방식에 대해 학습하는 시간을 가집니다.

signal을 통한 태스크 제어 API 활용

signal()을 사용하여 정상 종료된 태스크와 비정상 종료된 태스크를 구별하는 방법을 학습하고 또한 2일차에 배웠던 내용들을 실제 제품군에서 어떻게 활용하였는지 간단하게 소개하는 시간을 가집니다.

  1. 1) 정상 종료와 비정상 종료를 구별하는 방법
  2. 2) signal()을 활용한 프로세스 제어 방법
  3. 3) 실제 제품군에서 활용한 방식들에 대한 일부 단편 소개
실제 서버를 운용하다보면 다양한 문제점들이 나타나며 이에 대한 유연한 대응을 수행할 수 있도록 비정상 종료인지 정상 종료인지 파악이 필요합니다. 또한 여태까지 학습했던 태스크 제어가 실제 제품군에서는 어떻게 활용되는지 간략하게 일부를 살펴보는 시간을 가집니다.

IPC 메커니즘은 왜 사용하는 것인가요?

IPC(Inter-Process Communication)의 필요성에 대해 학습하고 어째서 프로세스간에 메모리 공유가 안되는지 스레드는 무엇인지에 대해 알아보는 시간을 가집니다.

  1. 1) 리눅스의 프로세스/스레드 모델
  2. 2) IPC 메커니즘이 필요한 이유
리눅스 커널의 task_struct 구조체와 mm_struct 구조체, 태스크별 스택에 대한 커널 코드를 살펴보며 프로세스와 스레드의 차이점에 대해 파악합니다. 또한 여기서 자연스럽게 알게 되는 IPC의 필요성에 대해서 추가적으로 설명합니다.

동기 / 비동기 메커니즘 pthread_create, mutex 스레드 제어 API 활용

동기/비동기 메커니즘의 핵심 개념에 대해 소개하고 pthread_create(), mutex 등을 통해 멀티 스레드 프로그래밍과 여기에서 발생하는 Critical Section 등등의 다양한 동기화 이슈에 대해 설명하는 시간을 가집니다.

  1. 1) 동기/비동기 메커니즘
  2. 2) pthread_create()을 통한 멀티 스레드 프로그래밍
  3. 3) Critical Section과 Mutex
하드웨어와 소프트웨어에서 얘기하는 동기/비동기에는 차이가 있습니다. 소프트웨어 관점에서의 메커니즘에 대해 알아보는 시간을 가집니다. 또한 멀티 스레드를 활용하는 방법과 Critical Section이 무엇이고 왜 Mutex가 필요한지 알아보는 시간을가집니다.

Semaphore, Message Queue, Shared Memory 등의 IPC API 활용

세마포어, 메시지 큐, 공유 메모리를 사용하는 방법을 학습하고 IPC와 관련된 코드를 실제 코드에서 어떻게 활용 되었는지 살펴보는 시간을 가지도록 합니다.

  1. 1) Semaphore vs Mutex
  2. 2) Mutex vs Spinlock
  3. 3) 각 API의 활용법
  4. 4) 실제 제품군에서 활용한 방식들에 대한 일부 단편 소개
Mutex와 Semaphore의 차이, Spinlock과의 차이, API 활용 방법을 학습합니다. 또한 실제 제품군에 이들을 어떻게 적용했는지 일부를 살펴보는 시간을 가집니다.
강사 소개
이상훈대표
현) 에디로봇아카데미
약력 및 전문 분야
2020년 창조경제혁신센터 주관 사업 최우수 달성
에디 로봇 아카데미 운영
Binary Translator 컴파일러 개발
삼성전자 무선사업부 IoT 교육 외 다수 기업 교육
FPGA 기반 초고속 데이터 처리 서버 개발
차량용 임베디드 리눅스 시스템 개발
차량용 레이다 신호처리 S/W 개발
DC-DC 컨버터 설계
FPGA 기반 모터 제어 외주 개발
TMS570, STM32, NXP 펌웨어(RTOS포함) 개발
임베디드 마스터 과정 및 자율주행 과정 강의(비트교육센터, 한국아이티기술, 헤스트, 한국산업기술대 외 다수)
과학기술정보통신부 혁신성장 인공지능 전문 교육(비트교육센터)
웹 애플리케이션 개발 과정 교육(비트교육센터, KH정보교육원)
강의장 안내주소 : 서울 구로구 디지털로34길 43 (구로동, 코오롱싸이언스밸리1차) 405호
리눅스 시스템 프로그래밍
일자
2021.09.15(수)~2021.09.17(금)
시간
9:30 ~ 14:30
강사
이상훈 대표
장소
서울 구로구 디지털로34길 43 (구로동, 코오롱싸이언스밸리1차) 405호
가격
590,000원