임베디드기사 필기 10 — 임베디드 플랫폼 ② 리눅스 커널 프로그래밍(시그널·VFS·RAID·메모리매핑)
임베디드기사 필기 10 — 임베디드 플랫폼 ② 리눅스 커널 프로그래밍(시그널·VFS·RAID·메모리매핑)
3과목 [3-2] 리눅스 커널 프로그래밍 파트입니다.
시그널 함수, arch/init 함정, 메모리 사상 입출력은 반복 출제돼요.
커널 소스트리 재정리 ⭐⭐ (함정 주의!)
arch — 플랫폼에 종속적인 코드 (부팅·시그널·클록)
init — 하드웨어에 독립적인 커널 초기화 루틴
kernel — 하드웨어에 독립적인 시스템 콜·관리 루틴
drivers — 디바이스 드라이버
include — 헤더 파일
⚠️ "arch가 플랫폼에 독립적인 코드" → 오답! (종속적)
⚠️ "init이 하드웨어에 종속적인 코드" → 오답! (독립적)
fork() COW (Copy-On-Write) ⭐
fork() 직후 → 부모와 자식이 같은 물리 메모리 공유
실제 쓰기 시도 시 → 그때 비로소 페이지 복사
"복제된 프로세스의 메모리가 달라지는 시점까지
메모리 복사를 미룬다" → 옳은 설명!
시그널 (Signal) ⭐⭐⭐
주요 시그널
| 시그널 | 발생 조건 |
| SIGINT | Ctrl+C |
| SIGQUIT | Ctrl+\ |
| SIGTSTP | Ctrl+Z (일시 정지) |
| SIGTERM | 정상 종료 요청 (kill 전에 먼저 시도) |
| SIGPIPE | 연결 종료된 소켓/파이프에 send/write |
| SIGCHLD | 자식 프로세스 종료/정지 시 부모에게 전송 |
⚠️ "SIGHUP은 Ctrl-S에서 발생" → 오답!
(Ctrl-S는 터미널 출력 일시 정지, SIGHUP과 무관)
SIGHUP = 터미널 연결 끊김
⚠️ "중복 시그널은 큐에 저장된다" → 오답!
(표준 시그널은 중복 시 병합됨, 횟수 보존 안 됨)
시그널 처리 함수
signal() — 구형 함수, 이식성 문제
sigaction() — 표준(POSIX) 핸들러 등록 함수 (signal 대체)
sigprocmask() — 시그널 봉쇄(block) 시스템 호출
sigpending() — 지연된(pending) 시그널 확인
"signal() → sigaction()으로 대체해야 한다" → 옳은 설명!
"sigprocmask() = 시그널 봉쇄" → 옳은 설명!
"sigpending() = 지연 시그널 확인" → 옳은 설명!
SIGCHLD 상세 ⭐
자식 프로세스 종료/정지 시 부모에게 자동 전송
부모가 wait() 안 하면 → 좀비(Zombie) 프로세스 발생
⚠️ "자식 종료 상태를 부모에게 보내지 않는다" → 오답!
(자동 전송됨)
⚠️ "자식 결함이 부모에게 전파된다" → 오답!
(스레드는 전파되나 프로세스는 전파 안 됨)
SIGTERM 특이사항:
kill 시그널 보내기 전에 먼저 SIGTERM을 전송하는 것이 일반적 절차
기출 문제
Q. kill 시그널이 전송되기 전에 일반적으로 전송되는 시그널은?
A. SIGTERM
Q. 소켓 통신 중 연결이 종료된 소켓에 send를 시도할 때 발생하는 시그널은?
A. SIGPIPE
/proc 파일시스템 ⭐⭐
가상 파일시스템 — 실제 디스크에 없음, 메모리 상에만 존재
커널이 실시간으로 만들어내는 정보
주요 파일:
/proc/partitions — 파티션 정보
/proc/modules — 적재된 커널 모듈 목록 (lsmod가 참조)
/proc/ioports — 사용 중인 I/O 포트 영역
/proc/misc — misc 드라이버 목록
"블록 디바이스가 아닌 메모리상에 위치하는 파일시스템" → proc
메모리 관리
메모리 매핑 ⭐
mmap() — 파일이나 메모리를 가상 주소 공간에 대응
공유 메모리 IPC에도 활용
ioremap() — 물리 주소(하드웨어 레지스터)를 커널 가상 주소로 매핑
"파일이나 메모리를 가상 프로세스 공간에 대응,
공유메모리 통신 프로그램 작성에 이용" → mmap()!
문맥 교환과 인터럽트
⚠️ "인터럽트 처리는 문맥 교환 없이 가능하다" → 오답!
인터럽트도 문맥 저장·복구를 수반함
jiffies — 커널 부팅 후 타이머 인터럽트 횟수를 세는 카운터
제한 시간 관리 기준으로 사용
디바이스 관리
메모리 사상 입출력 (Memory-Mapped I/O) ⭐⭐
메모리와 디바이스가 같은 하나의 주소 공간 공유
일반 메모리 명령어로 디바이스 접근 가능
⚠️ "메모리와 디바이스가 별도의 주소 공간을 사용" → 오답!
(별도 주소 = Isolated I/O 방식)
적용: ARM, M68K, PowerPC, MIPS 등
디바이스 드라이버
하드웨어 자원은 한 드라이버가 독점 사용
⚠️ "동일 자원을 다른 목적으로 사용 가능" → 오답!
I/O 영역 등록: request_region()
사용 중인 I/O 영역 확인: /proc/ioports
파일시스템
VFS (Virtual File System)
서로 다른 파일시스템(ext4, FAT, NFS)을 하나의 인터페이스로
open/read/write/close 등 표준 인터페이스로 통일
LVM vs RAID ⭐⭐
LVM (Logical Volume Manager):
물리 디스크를 논리 볼륨으로 유연하게 관리
크기 조정 가능
단점: 복구 어려움!
RAID:
| 레벨 | 방식 | 특징 |
| RAID 0 | 스트라이핑 | 빠른 I/O, 고장 대비 없음 |
| RAID 1 | 미러링 | 완전 동일 복사 |
| RAID 5 | 패리티 분산 | (N-1)×S 가용 용량 |
| RAID 6 | 패리티 2개 | 2개 디스크 동시 오류 허용 |
RAID-5 가용 용량 계산:
가용 용량 = (N-1) × S
예: 4개×100GB → (4-1)×100 = 300GB
JFS (Journaled File System)
저널링(Journaling) — 변경 사항을 로그에 먼저 기록
비정상 종료 시 빠른 복구 가능
ext3, ext4도 같은 저널링 계열
TCP/IP 스택
TCP/IP 4계층 ↔ OSI 7계층
응용계층 ↔ 응용/표현/세션
전송계층(TCP) ↔ 전송
인터넷계층(IP) ↔ 네트워크
링크계층 ↔ 데이터링크/물리
💡 실무에서는?
RAID는 인프라 SI에서 스토리지 설계의 핵심이에요. 보안 로그 서버에는 RAID-5나 RAID-6으로 안정성을 확보하고, 고성능이 필요한 DB 서버에는 RAID-0+1을 씁니다. mmap()은 대용량 로그 파일을 빠르게 분석할 때 파일을 메모리에 올려서 처리하는 방식으로 씁니다. SIGTERM→SIGKILL 순서로 프로세스를 종료하는 건 리눅스 서버 관리의 기본이에요.
핵심 정리
✅ arch=종속적 / init=독립적 (뒤바꾸면 오답!)
✅ COW=쓰기 시점에 복사 (미루기)
✅ SIGTERM=kill 전에 먼저 / SIGPIPE=끊긴소켓에 send
✅ SIGCHLD=자식종료시 부모에게 자동 전송
✅ "SIGHUP=Ctrl-S" → 오답!
✅ signal()→sigaction() 대체
✅ sigprocmask()=봉쇄 / sigpending()=지연확인
✅ /proc = 메모리상 가상 파일시스템
✅ mmap()=가상공간매핑/공유메모리IPC
✅ "인터럽트=문맥교환없이" → 오답!
✅ jiffies=타이머 인터럽트 카운터
✅ Memory-Mapped I/O=같은주소공간 ("별도주소"=오답!)
✅ "동일자원 다른목적 사용가능" → 오답!
✅ RAID-5 = (N-1)×S
✅ LVM 단점 = 복구 어려움
다음 편에서는 시스템 및 네트워크 프로그래밍 — TCP소켓·pthread·IPC·서브넷으로 이어갑니다!
궁금한 점은 댓글로 남겨주세요!
2026.08.14 - [자격증 정복/임베디드기사(기능사)] - 임베디드기사 필기 09 — 임베디드 플랫폼 ① OS·프로세스관리·스케줄링·병행성제어
임베디드기사 필기 09 — 임베디드 플랫폼 ① OS·프로세스관리·스케줄링·병행성제어
임베디드기사 필기 09 — 임베디드 플랫폼 ① OS·프로세스관리·스케줄링·병행성제어3과목 [3-1] 파트입니다.교착상태 4조건, 은행가 알고리즘, HRN 공식은 매 회차 출제돼요.기출 검증 완료된 함
tech.seanney.pe.kr
2026.08.12 - [자격증 정복/임베디드기사(기능사)] - 임베디드기사 필기 08 — 임베디드 펌웨어 ③ 디바이스 드라이버 개발
임베디드기사 필기 08 — 임베디드 펌웨어 ③ 디바이스 드라이버 개발
임베디드기사 필기 08 — 임베디드 펌웨어 ③ 디바이스 드라이버 개발 (module_init·세마포어·뮤텍스·워치독)2과목 ③ 디바이스 드라이버 개발 파트입니다.세마포어 vs 뮤텍스 차이는 필기·실기
tech.seanney.pe.kr