문의를 보내주셔서 감사합니다! 팀원이 곧 연락드리겠습니다.
예약을 보내주셔서 감사합니다! 저희 팀 멤버 중 한 분이 곧 연락드리겠습니다.
코스 개요
소개
- GNU/리눅스의 간단한 역사
- 라이선싱
- 커널 버전 관리
- 릴리스 주기
- 커널 트리는(Kernel Trees)
- 메인라인(Mainline)
- 커널 vs. 유저스페이스
- 메커니즘 vs. 정책
- 커널 드라이버 대안
- RTOS vs. 리눅스
메모리 관리
- 가상 메모리 vs. 물리 메모리
- 커널에서의 메모리 할당
- 페이지(Page)
- 존(Zone)
- API
- 슬랩(Slab)
커널 패치
- 수명 주기
- git
- 커널 소스
- 패치 생성
- 패치 검사
- 패치 수정
- 패치 배포
- 감사가 완료된 코드(Audited Code)
커널 모듈
- 커널 소스 가져오기
- 구성/빌드/설치
- 장치 드라이버 (정적 링크, 런타임 로딩)
- 초기화/종료
- 라이선싱
- EXPORT_SYMBOL GPL
- 아웃 오브 트리는(Out of Tree) Makefile
- module-init-tools
- 커널 트리 내의 모듈
- Kconfig
- 매개변수 전달
- Sparse
캐릭터 드라이버(Char Drivers)
- 아키텍처
- 유저/커널 인터페이스
- I/O 서브시스템
- VFS
- sysfs (디바이스, 버스, 드라이버, 클래스),
- kobject/ktype/kset
- 리눅스 커널 드라이버 모델
- 장치 파일
-
캐릭터 드라이버
- 초기화
- 등록
- 오픈, 리리즈
- cdev, cdev_add, cdev_del, ...
- 메이저/마이너 넘버
- udev, udevmonitor, udevadm
고급 캐릭터 드라이버 작업
- ioctl
- unlocked ioctl
- compat ioctl
- 유저스페이스 API
- 커널스페이스 API
- 프로세스 수명 주기
- 대기/블로킹
- 대기/각성
- 대기 큐(Wait Queue)
- 번떼리드 허드(Thundering Herd)
- poll/select
커널 디버깅
- 디버깅
-
커널 디버깅
- git를 이용한 이진 탐색(Binary Search)
- 커널의 디버깅 지원 기능
- printk, syslogd, klogd, 로그 레벨, 레이트 리미트, 디버그 레벨, 선택적 서브시스템 디버깅
- debugfs 쿼리를 통한 디버깅
- Oops 디버깅, Oops 발생시키기
- 매직 SysRq 키
- kgdb/kdb
- JTAG
트레이싱(Tracing)
- gcov
- lcov
- oprofile
-
ftrace
- nop tracer
- function tracer
- sched switch tracer
- function graph tracer
- dynamic tracer
- trace-cmd/kernelshark
- perf
- LTTng
인터럽트(Interrupts)
- 인터럽트 vs. 폴링(Polling)
- 인터럽트
- 프로그램 섹션
- 재진입성(Reentrancy)
- 이벤트
- 인터럽트 핸들러
- 공유 인터럽트 핸들러
- 인터럽트 흐름
- 인터럽트 제어
작업 지연(Deferring Work)
- 상부/하부 절반(Top/Bottom Halves)
- softirq
- tasklet
- 작업 큐(Work Queues)
- 스레드형 인터럽트(Threaded Interrupts)
동시성(Concurrency)
- 임계 영역/섹션
- 원자성(Atomic)
- 래스 컨디션(Race Condition)
- 동기화
- 락(Locking)
- 락 솔루션
- 데드락(Deadlock)
- 컨테션(Contention)
- 무엇을 잠가야 할까?
-
무엇을 사용할 수 있을까?
- 원자 연산(Atomic Operations)
- 스핀 잠금(Spin Locks)
- 리더-라이터 스핀 잠금
- 세마포어(Semaphore)
- 바이너리 세마포어
- 뮤텍스(Mutex)
- 리더-라이터 세마포어
- 완료 변수(Completion Variables)
- 시퀀셜 잠금(Sequential Locks)
- 프리에뎁션(Preemption) 비활성화
- 순서 지정 및 장벽(Ordering and Barriers)
시간(Time)
- HZ
- Jiffies
- 대/소 지연
- 커널 타이머
하드웨어 I/O
- I/O 포트
- I/O 메모리
- 레지스터에 접근할 때 부수 효과(Side Effects)를 어떻게 처리할까?
유저-커널 통신
- put(get)_user()
- copy to(from)_user()
- 커널 I/O
- 메모리 매핑
- procfs
- sysfs
- debugfs
- relayfs
- netlink
- ioctl
이식성(Portability)
- 워드 사이즈
- 불투형 타입(Opaque Types)
- 부호 있는/없는 문자
- 데이터 정렬
- 정수 승격(Integral Promotion)
- 코드 재사용
- 엔디anness
- 시스템 틱(System Tick)
- 페이지 크기
- 명령어 순서
- SMP/프리에뎁션/하이 메모리
별도로 명시되지 않는 한, 이 콘텐츠와 과정 구성표는 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 국제(CCBY-NC-SA 4.0).에 따라 라이선스되었습니다.
요건
- GNU/리눅스 시스템을 일반 사용자로서 사용하는 데 대한 기본 지식
- 명령줄 쉘 사용에 대한 기본 지식
- 유저스페이스(애플리케이션) 개발에 대한 기본 지식
- C 프로그래밍 중급 지식
- 이전에 임베디드 GNU/리눅스 시스템 아키텍처 과정을 수강했거나(강력히 권장), 해당 과정에서 다루는 주제에 대해 잘 이해하고 있어야 합니다.
35 시간
회원 평가 (3)
모든 것이 잘 되고 있습니다.
Adrian Rybka - SEOyon
코스 - Flutter Development Bootcamp with Dart
기계 번역됨
매우 유용한 추가 정보
Grzegorz - Comp S.A.
코스 - BLoC Pattern
기계 번역됨
그의 지식과 인내심.
Chrisna - Agricatural Research Council
코스 - Ionic 4 and Angular for Developers
기계 번역됨