임베디드기사 필기 11 — 임베드디 플랫폼 ③ 시스템·네트워크 프로그래밍
3과목 [3-3] 시스템 및 네트워크 프로그래밍 파트입니다.
TCP 소켓 시퀀스, pthread_detach 의미, epoll 특징은 매 회차 최빈출이에요.
프로세스 및 파일 처리
fork() vs exec()
fork()
→ 현재 프로세스를 복제, 자식 프로세스 생성
→ 부모: 자식 PID 반환 / 자식: 0 반환
→ COW 최적화 (쓰기 시점에 복사)
exec()
→ 현재 프로세스를 새 프로그램으로 교체
→ 성공 시 원래 코드로 돌아오지 않음
→ 셸: fork() 후 자식에서 exec() 패턴 사용
파일 핸들링
저수준: open()/read()/write()/close()
→ 시스템 콜 직접 호출, 파일 디스크립터(정수)
고수준: fopen()/fread()/fwrite()/fclose()
→ C 표준 라이브러리, FILE* 포인터
→ 자동 버퍼링 처리
기출 문제
Q. 프로세스를 복제하는 기능의 함수는?
A. fork()
프로세스 메모리 구조 ⭐⭐
텍스트(Text) — 실행 코드
데이터(Data) — 전역변수·정적변수
힙(Heap) — 동적 할당 (malloc/calloc/realloc)
스택(Stack) — 리턴 주소, 로컬 변수
⚠️ "리턴 주소/로컬 변수가 있는 영역 = 힙" → 오답! (스택)
⚠️ "동적 할당 공간 = 스택" → 오답! (힙)
mlock() = 메모리를 물리 메모리에 고정 (스왑 방지)
⚠️ "mlock = 읽기 전용으로 만든다" → 오답!
기출 문제
Q. 프로세스의 힙 영역에 대한 설명으로 옳은 것은?
A. 메모리 할당 함수를 이용해 동적으로 생성된 저장공간이 존재하는 영역
IPC (프로세스 간 통신)
mmap() ⭐
파일/메모리를 가상 주소 공간에 직접 매핑
공유 메모리 IPC에도 활용
"파일이나 메모리를 가상 프로세스 공간에 대응,
공유메모리 통신 프로그램 작성에 이용" → mmap()
공유 메모리 ⭐⭐
shmget() — 공유 메모리 생성 + IPC ID 반환 ← 먼저!
shmat() — 공유 메모리 부착 (주소 공간에 연결)
shmdt() — 공유 메모리 분리
순서: shmget() → shmat() → 사용 → shmdt()
⚠️ "shmat으로 공유 메모리가 생성" → 오답! (생성은 shmget)
메시지 큐
msgsnd() — 메시지 전송
msgrcv() — 메시지 수신
IPC_NOWAIT — 큐 가득 찬 경우 즉시 에러 반환 (논블로킹)
PIPE vs FIFO
PIPE — 단방향, 부모-자식 관련 프로세스만 사용 가능
FIFO — 명명 파이프, 관련 없는 프로세스도 사용 가능
기출 문제
Q. XSI 공유 메모리를 생성하며 새로 만들어진 IPC ID를 반환할 때 사용하는 함수는?
A. shmget()
I/O 멀티플렉싱 ⭐⭐
select()
→ 여러 파일 디스크립터 동시 감시
→ 범용 함수 (소켓 전용이 아님!)
→ 타임아웃 설정 가능
⚠️ "소켓 전용 함수" → 오답!
poll()
→ select() 개선, 감시 개수 제한 없음
epoll() ⭐⭐
→ 리눅스 커널 2.6부터 지원
→ stateful (상태 저장, 매번 재검사 불필요)
→ 레벨 트리거 + 엣지 트리거 모두 지원
→ 리눅스 전용 비표준 함수
⚠️ "최대 2048개 소켓만 감시" → 오답! (개수 제한 없음)
기출 문제
Q. 리눅스 커널 2.6부터 지원되는 고성능 I/O 멀티플렉싱 함수는?
A. epoll()
스레드 (pthread API) ⭐⭐⭐
주요 함수
pthread_create() — 스레드 생성
pthread_join() — 지정 스레드 종료 대기 + 자원 회수 (병합)
pthread_detach() — 스레드 분리 (자동 자원 회수)
pthread_cancel() — 스레드 취소
⚠️ "pthread_detach = 스레드를 종료한다" → 오답! (분리)
⚠️ "pthread_detach = 스레드를 감시한다" → 오답! (분리)
조건 변수 (Condition Variable) ⭐
pthread_cond_wait() 사용 조건:
→ 반드시 뮤텍스를 잠근 상태로 호출!
→ 내부에서 대기 중에만 자동 unlock
→ 깨어날 때 다시 자동 lock
⚠️ "대기 시 뮤텍스 해제 상태여야 한다" → 오답!
배리어 (Barrier)
pthread_barrier_t — 여러 스레드가 특정 지점에서 서로 대기
⚠️ "pthread에서 배리어를 제공하지 않는다" → 오답! (제공함)
뮤텍스 데드락 방지 ⭐
pthread_mutex_trylock() — 실패 시 즉시 반환 (논블로킹)
pthread_mutex_timedlock() — 시간 제한 후 포기
PTHREAD_MUTEX_ERRORCHECK — 이중 잠금 시 에러 반환
⚠️ "pthread_mutex_lock()으로 데드락 방지" → 오답!
(오히려 데드락 원인)
기출 문제
Q. pthread API에서 스레드를 분리시키는 함수는?
A. pthread_detach() — 종료·감시가 아닌 분리!
컴퓨터 네트워크
OSI 7계층 ⭐
OSI 3계층(네트워크) 대표 프로토콜 = IP
⚠️ FTP/TELNET = 7계층(응용계층)
ARP — IP 주소 → MAC 주소 변환
TCP vs UDP 특징 ⭐⭐
TCP: 연결지향, 신뢰성 보장, 순서 보장
UDP: 비연결형, 신뢰성 없음, 빠름
⚠️ "UDP = 신뢰할 수 있는 전송 보장" → 오답! (TCP 특징)
⚠️ "UDP 헤더에 플래그 비트 존재" → 오답! (TCP만 있음)
TCP_NODELAY — 네이글 알고리즘 해제
setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, ...)
IPv4 헤더 필드
Version, IHL, Type of Service, Total Length
Identification, Flags, Fragment Offset
TTL, Protocol, Header Checksum
Source/Destination IP Address
TCP 소켓 시퀀스 ⭐⭐⭐ (최빈출!)
[서버]
socket() → bind() → listen() → accept() → read()/write() → close()
[클라이언트]
socket() → connect() → read()/write() → close()
소켓 주소 구조체 항목:
주소 체계(AF_INET), IP 주소, 포트 번호
⚠️ "ICP 포트 번호" → 존재하지 않는 용어!
기출 문제
Q. TCP 소켓의 서버 측 함수 호출 순서는?
A. socket() → bind() → listen() → accept()
💡 실무에서는?
보안 SI에서 IPS/WAF 같은 패킷 분석 장비가 수만 개 연결을 동시에 처리할 때 epoll이 핵심이에요. TCP_NODELAY는 실시간 패킷 분석 도구에서 지연 최소화를 위해 필수 설정이고, pthread로 스레드 풀을 만들어 처리량을 높이는 구조가 보안 솔루션의 일반적인 아키텍처예요.
핵심 정리
✅ fork()=복제 / exec()=교체 (돌아오지 않음)
✅ 힙=동적할당 / 스택=로컬변수·리턴주소
✅ shmget=생성 → shmat=부착 → shmdt=분리
✅ PIPE=부모자식만 / FIFO=관련없는프로세스도OK
✅ select()=범용(소켓전용아님!)
✅ epoll=2.6부터, 개수제한없음, 리눅스전용
✅ pthread_detach=분리 (종료/감시 아님!)
✅ 조건변수=뮤텍스 잠금 상태로 호출
✅ 배리어=pthread에서 제공함
✅ mutex_lock=데드락 방지 아님!
✅ OSI 3계층=IP / ARP=IP→MAC
✅ UDP=신뢰성없음, 플래그비트없음
✅ TCP서버: socket→bind→listen→accept
✅ "ICP포트번호"=존재하지않음!
다음 편에서는 데이터구조 — 스택·트리순회·정렬로 이어갑니다!
반응형
'자격증 정복 > 임베디드기사(기능사)' 카테고리의 다른 글
| 임베디드기사 필기 12 — 임베디드 소프트웨어 ① 데이터구조(스택·큐·트리순회·정렬·그래프) (0) | 2026.08.17 |
|---|---|
| 임베디드기사 필기 10 — 임베디드 플랫폼 ② 리눅스 커널 프로그래밍(시그널·VFS·RAID·메모리매핑) (0) | 2026.08.14 |
| 임베디드기사 필기 09 — 임베디드 플랫폼 ① OS·프로세스관리·스케줄링·병행성제어 (0) | 2026.08.14 |
| 임베디드기사 필기 08 — 임베디드 펌웨어 ③ 디바이스 드라이버 개발 (0) | 2026.08.12 |
| 임베디드기사 필기 07 — 임베디드 펌웨어 ② OS 포팅 (커널소스트리·리눅스부팅·runlevel·busybox) (0) | 2026.08.11 |