자격증 정복/임베디드기사(기능사)

임베디드기사 실기 09 — 커널 프로그래밍 ① (시스템 콜·pthread·뮤텍스/세마포어/스핀락·교착상태)

올드 IT직장인 2026. 10. 31. 02:50

임베디드기사 실기 09 — 커널 프로그래밍 ① (시스템 콜·pthread·뮤텍스/세마포어/스핀락·교착상태)

출제기준 3-2: 임베디드 커널 프로그래밍하기 (전반부)
뮤텍스 vs 세마포어는 2015와 2023에 똑같이 나왔고, 스핀락은 2025에 새로 등장했어요.
"소유권"이라는 단어 하나가 핵심입니다!


📎 필기 시리즈의 프로세스·스레드·동기화 편과 함께 보면 좋아요. (링크 추가 예정)


실기 출제 포인트 ⭐⭐⭐

키워드 핵심 내용 빈도 기출
시스템 콜 사용자 프로그램 ↔ 커널 인터페이스, 분류 ⭐⭐⭐ 2016 Q1, 2019 Q6, 2024 Q15
세마포어 정수 변수 S, P(wait)/V(signal) ⭐⭐⭐ 2018 Q12, 2022 Q4
뮤텍스 소유권 있음, 잠근 스레드만 해제 ⭐⭐⭐ 2015 Q7, 2016 Q9, 2023 Q14
스핀락 busy waiting, 짧은 임계구역 ⭐ 2025 Q20
교착상태 4가지 발생 조건 ⭐⭐ 2017 Q15, 2024 Q6
pthread API create / join / detach / exit ⭐⭐ 2018 Q18
임계구역·상호배제 용어 정의 ⭐⭐ 2018 Q12

 

 

키워드 박스 — 답안에 반드시 들어가야 할 단어

시스템 콜  : 커널과 사용자 애플리케이션 사이의 인터페이스
뮤텍스     : 소유 가능, 소유주가 해제 책임 (Lock을 건 스레드만 Unlock)
세마포어   : 소유 불가(소유 개념 없음), 정수 S, P 연산(대기)/V 연산(신호)
스핀락     : Busy-waiting, Context Switching 없음, 짧은 대기에 유리
교착상태   : 상호 배제 / 점유와 대기 / 비선점 / 환형 대기
pthread_create : POSIX 스레드 생성 함수

시스템 콜 (System Call) ⭐⭐⭐

기출 (2016 Q1 = 2024 Q15 동일) 리눅스 계층구조 중 Kernel과 User Application 사이에 위치하는, 운영체제가 제공하는 인터페이스는?
→ System Call (시스템 콜)

 

User Application
      ↓  (시스템 콜 인터페이스)
System Call Handler
      ↓
    Kernel
      ↓
   Hardware

 

시스템 콜 분류

기출 (2019 Q6) 시스템 콜 서비스 중 (프로세스) 생성, 삭제 등을 수행하는 것은?
→ 프로세스 제어 (Process Control)

분류 역할 대표 시스템 콜
프로세스 제어 생성·종료·대기·로드 fork(), exec(), exit(), wait(), kill()
파일 조작 생성·삭제·열기·닫기·읽기·쓰기 open(), close(), read(), write(), unlink()
장치 관리 장치 요청·해제·제어 ioctl()
정보 유지 시간·프로세스 정보 조회 getpid() 등
통신 프로세스 간 통신 pipe(), socket() 등

 

⚠️ 함정: "생성·삭제"라는 단어가 파일 생성/삭제와 헷갈릴 수 있어요.

      문제가 프로세스 생성·삭제를 말하는지, 파일 조작을 말하는지 먼저 확인!


스레드 생성 — pthread ⭐⭐

기출 (2018 Q18) POSIX 표준 환경에서 스레드를 생성할 때 사용하는 함수는?
→ pthread_create

#include <pthread.h>

void *worker(void *arg)
{
    /* 스레드가 할 일 */
    return NULL;
}

int main(void)
{
    pthread_t tid;
    pthread_create(&tid, NULL, worker, NULL);  // 스레드 생성
    pthread_join(tid, NULL);                   // 종료 대기
    return 0;
}
// 컴파일: gcc -pthread main.c -o app
함수 기능
pthread_create 스레드 생성
pthread_join 스레드 종료를 기다림
pthread_detach 스레드를 분리 (종료 시 자원 자동 회수)
pthread_exit 스레드 종료
pthread_cancel 다른 스레드에 취소 요청
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine)(void *), void *arg);
// thread: 스레드 ID 저장 / attr: 속성(NULL=기본) / start_routine: 실행 함수 / arg: 전달 인자

동기화 기본 용어 ⭐⭐

기출 (2018 Q12) 스레드 간 동기화 기법 빈칸 A, B, C를 채우시오.

둘 이상의 스레드가 동시에 접근해서는 안 되는 공유 자원은 ( A )이다. 한 순간 공유 자원에 대해 하나의 프로세스만 접근하는 방법은 ( B )이다. 상호배제 기법 중 대기를 의미하는 P 연산과 진입을 의미하는 V 연산을 사용하는 것은 ( C )이다.

→ (A) 임계구역(Critical Section) / (B) 상호배제(Mutual Exclusion) / (C) 세마포어(Semaphore)

 

용어 정의
경쟁 상태 (Race Condition) 여러 프로세스가 동시에 같은 데이터에 접근할 때 접근 순서에 따라 결과가 달라지는 현상
임계구역 (Critical Section) 경쟁 상태가 발생할 수 있는 코드 영역
상호배제 (Mutual Exclusion) 한 프로세스가 공유 자원을 쓰는 동안 다른 프로세스가 못 쓰게 제어

세마포어와 뮤텍스 ⭐⭐⭐

세마포어 (Semaphore)

기출 (2022 Q4) 상호 배제 기법 중 하나이며, 정수 값을 변수로 초기화하고 두 개의 연산으로만 접근 가능한 특수한 변수를 이용하는 것은?
→ 세마포어

세마포어 = 정수 변수 S (동시 접근 가능한 개수)
P(S) : S가 0보다 크면 S를 1 감소(진입), 아니면 대기   (wait)
V(S) : S를 1 증가시키고 대기 중인 프로세스를 깨움      (signal)

 

뮤텍스 (Mutex)

기출 (2016 Q9) 스레드 간 상호배제 구간을 정의하기 위한 동기화 객체는?
→ 뮤텍스 (Mutex, Mutual Exclusion)

#include <pthread.h>
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_lock(&lock);     // 임계구역 진입 전 Lock 획득
/* 공유 자원 접근 */
pthread_mutex_unlock(&lock);   // 임계구역을 나올 때 Lock 반환 (Lock을 건 스레드가 해제)

 

뮤텍스 vs 세마포어 ⭐⭐⭐ (2015 Q7 = 2023 Q14 동일)

기출 뮤텍스와 세마포어의 차이점은?

모범 답안: 뮤텍스는 소유할 수 있고 소유주가 그에 대한 책임(잠근 스레드가 해제)을 가진다. 세마포어는 소유할 수 없고, 최대 허용치만큼 여러 스레드·프로세스의 접근을 허용하며 커널이 관리한다.

 

구분 뮤텍스 세마포어
소유권 있음 (Lock 건 스레드가 Unlock) 없음
값 0/1 (잠김/풀림) 정수 S (여러 개 허용 가능)
용도 상호배제 (한 번에 하나) 접근 허용 개수 제어, 순서 동기화
접근 객체(Key)를 소유한 쪽만 최대 허용치만큼 동시 접근

 

⚠️ 함정

- 서술형은 "소유 가능 여부"가 채점 포인트 → 반드시 소유권 문장을 쓰기
- 세마포어를 값이 1인 이진 세마포어로 쓰면 뮤텍스처럼 동작하지만, 소유권 개념은 없다
- 뮤텍스 = 상호배제 객체 / 세마포어 = 신호·개수 제어, 용도로도 구분

스핀락 (Spinlock) ⭐

기출 (2025 Q20) 빈칸 선택: 스핀락이란 특정 자원에 대한 접근을 제어하기 위한 동기화 기법으로 (Sleep / Busy-waiting) 형태로 동작한다. 자원이 해제될 때까지 루프를 돌며 상태를 확인하기 때문에 Context Switching이 (발생하고 / 발생하지 않고), 대기 시간이 짧은 경우에 Mutex보다 오버헤드가 (크다 / 작다).

→ Busy-waiting / 발생하지 않고 / 작다

 

구분 스핀락 뮤텍스
대기 방식 Busy-waiting (루프를 돌며 확인) Sleep (대기 큐에서 잠듦)
문맥 교환 발생하지 않음 발생
유리한 상황 대기 시간이 짧을 때 대기 시간이 길 때
CPU 사용 대기 중에도 계속 사용 대기 중 CPU 양보

 

⚠️ 스핀락은 오래 기다리면 CPU를 낭비해요.

      그래서 "짧은 임계구역"에서만 유리하다는 조건을 같이 기억하세요.

참고: 같은 동기화 계열인 Completion 변수(wait_for_completion / complete)는 7편에서 정리했어요.


교착상태 (Deadlock) ⭐⭐

기출 (2017 Q15) 교착상태가 발생할 수 있는 4가지 조건은?

→ 상호 배제 / 점유와 대기 / 비선점 / 환형 대기

 

조건 설명
상호 배제 (Mutual Exclusion) 자원을 한 번에 한 프로세스만 사용
점유와 대기 (Hold and Wait) 자원을 가진 채 다른 자원을 기다림
비선점 (No Preemption) 다른 프로세스의 자원을 강제로 빼앗을 수 없음
환형 대기 (Circular Wait) 프로세스들이 원형으로 서로의 자원을 기다림

 

기출 (2024 Q6) 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태는?
→ 점유 대기 (Hold and Wait)

교착상태는 4가지 조건이 "모두 동시에" 성립해야 발생
→ 하나라도 깨면 예방 가능
예) 모든 스레드가 락을 항상 같은 순서로 획득 → 환형 대기 조건 제거

 

⚠️ 함정: 4가지 중 하나만 써도 부분 점수일 수 있어요.

      4개를 모두 정확한 용어로 쓰고, "점유 대기"와 "환형 대기"를 구분하세요.


기출 문제 모음

Q. Kernel과 User Application 사이에 위치하는 운영체제 제공 인터페이스는? (2016·2024)
A. System Call

 

Q. 시스템 콜 서비스 중 프로세스 생성·삭제를 수행하는 분류는? (2019 Q6)
A. 프로세스 제어

 

Q. POSIX에서 스레드를 생성하는 함수는? (2018 Q18)
A. pthread_create

 

Q. 정수 변수와 P·V 연산만으로 접근하는 상호배제 기법은? (2022 Q4)
A. 세마포어

 

Q. 뮤텍스와 세마포어의 차이점은? (2015·2023)
A. 뮤텍스는 소유할 수 있고 소유주가 책임을 지며, 세마포어는 소유할 수 없다.

 

Q. 스핀락의 대기 방식은? (2025 Q20)
A. Busy-waiting (문맥 교환 없음, 짧은 대기에 유리)

 

Q. 교착상태의 4가지 조건은? (2017 Q15)
A. 상호 배제, 점유와 대기, 비선점, 환형 대기


💡 실무에서는?

  • 시스템 콜 추적 — 서버 장애 분석에서 strace로 프로세스가 호출하는 시스템 콜을 따라가면 어디서 멈췄는지 바로 보여요.
  • 락 경합과 교착 — 애플리케이션이 멈췄을 때 스레드 덤프나 gdb로 락 대기 상태를 확인하는 게 교착상태 진단의 시작이에요. 락 획득 순서를 통일하는 것이 가장 흔한 예방책입니다.
  • 스핀락 vs 뮤텍스 — 커널 내부, 인터럽트 컨텍스트처럼 잠들 수 없는 곳에서는 스핀락이 쓰이고, 사용자 공간에서는 뮤텍스가 일반적입니다.
  • 프로세스 관리 — fork()/exec()로 프로세스가 만들어지는 흐름을 알면 좀비 프로세스나 리소스 누수를 이해하기 쉬워요.

핵심 정리

✅ 시스템 콜 = 커널과 사용자 프로그램 사이 인터페이스 / 분류: 프로세스 제어·파일 조작·장치 관리 …
✅ pthread_create(생성) / pthread_join(대기) / pthread_detach / pthread_exit
✅ 임계구역 = 경쟁 상태 발생 코드 영역 / 상호배제 = 한 번에 하나만 접근
✅ 세마포어 = 정수 S, P(wait)/V(signal), 소유권 없음
✅ 뮤텍스 = 소유권 있음, 잠근 쪽이 해제 → 뮤텍스 vs 세마포어 = "소유 가능 여부"
✅ 스핀락 = Busy-waiting, 문맥 교환 없음, 짧은 대기에 오버헤드 작음
✅ 교착상태 4조건 = 상호 배제 / 점유와 대기 / 비선점 / 환형 대기

 

다음 편에서는 커널 프로그래밍 ② 메모리·파일시스템·소켓(출제기준 3-2)으로 이어갑니다!

 

궁금한 점은 댓글로 남겨주세요!

반응형
개인정보처리방침  |  블로그 소개