카테고리 없음
시스템 프로그래밍 - 1. 시스템 프로그래밍의 개요
machine-archive
2025. 3. 8. 22:30
1. 강의 개요
시스템 프로그래밍(System Programming)은 운영체제(OS)와 직접 상호작용하는 소프트웨어를 개발하는 과정입니다.
이 강의에서는 C/C++을 활용한 리눅스 기반 시스템 프로그래밍을 실습하며, 운영체제의 내부 동작 원리를 익힙니다.
📌 강의 기본 정보
- 사용 언어: C, C++ (필요 시 Java도 언급됨)
- 실습 환경: Linux (Unix 기반)
- 주요 학습 대상:
- 운영체제 개념 (프로세스, 스레드, 메모리 관리, 동기화 등)
- Unix/Linux 환경에서의 시스템 프로그래밍
- C/C++을 활용한 시스템 호출(System Call)
- 참고자료:
- 8권의 서적을 언급하지만, 주요 교재는 "Operating Systems Concepts"
- 대부분의 개념은 **인터넷 검색(Google)**을 통해 학습 가능
2. 강의 커리큘럼
한 학기 동안 기본 개념 → 시스템 프로그래밍 실습 → 운영체제 심화 개념 적용의 순서로 진행됩니다.
주차학습 내용
1주차 | 강의 소개 (시스템 프로그래밍의 필요성) |
2주차 | 유닉스 및 리눅스 기초 (기본 명령어 및 환경설정) |
3~4주차 | C 언어 기초 및 복습 (파일 입출력, 포인터, 메모리 관리) |
5~7주차 | 프로세스 및 스레드 개념 (생성, 관리, 동기화) |
8주차 | 중간고사 |
9~10주차 | CPU 스케줄링 알고리즘 |
11~13주차 | 동기화 (세마포어, 뮤텍스 등) |
14~15주차 | 프로세스 간 통신 (IPC: 파이프, 메시지 큐, 공유 메모리) |
16주차 | 기말고사 |
3. 시스템 프로그래밍 개념
📌 운영체제와 컴퓨터 시스템 구조
운영체제(OS)는 하드웨어와 응용 프로그램을 연결하는 핵심 역할을 합니다.
+-------------------------------+
| 유저 애플리케이션 | ← 크롬, 파워포인트 등 실행
+-------------------------------+
| 시스템 콜 인터페이스 | ← 커널과 애플리케이션의 API
+-------------------------------+
| 운영체제 커널 | ← OS의 핵심 (파일 시스템, 프로세스 관리)
+-------------------------------+
| 하드웨어 | ← CPU, 메모리, 디스크 등
+-------------------------------+
| 유저 애플리케이션 | ← 크롬, 파워포인트 등 실행
+-------------------------------+
| 시스템 콜 인터페이스 | ← 커널과 애플리케이션의 API
+-------------------------------+
| 운영체제 커널 | ← OS의 핵심 (파일 시스템, 프로세스 관리)
+-------------------------------+
| 하드웨어 | ← CPU, 메모리, 디스크 등
+-------------------------------+
운영체제의 주요 기능
✅ 프로세스 관리 (fork(), exec(), exit())
✅ 파일 시스템 관리 (open(), read(), write())
✅ 메모리 관리 (페이징, 세그멘테이션)
✅ 디바이스 제어 (드라이버, I/O 관리)
4. 리눅스 운영체제와 시스템 프로그래밍
강의에서는 리눅스 기반 시스템 프로그래밍을 중심으로 실습이 진행됩니다.
📌 리눅스 개요
- 리눅스는 유닉스 기반 운영체제
- 1991년 리누스 토발즈가 개발
- 다양한 배포판 존재 (Debian, Ubuntu, Fedora 등)
- 멀티유저, 멀티태스킹 지원
- 리눅스 시스템 프로그래밍의 주요 개념
- 파일 시스템 조작: ls, pwd, cat, grep, chmod
- 프로세스 관리: ps, top, kill, nohup
- 시스템 호출 (System Call): open(), write(), fork(), exec()
5. 주요 학습 개념
(1) 프로세스 및 스레드 관리
📌 프로세스 개념
프로세스 관련 주요 시스템 콜
- fork(): 부모 프로세스가 자식 프로세스를 생성
- exec(): 새로운 프로그램 실행
- exit(): 프로세스 종료
- wait(): 자식 프로세스 종료 대기
스레드(Thread)
- 하나의 프로세스 내에서 여러 개의 실행 흐름 존재
- pthread_create(), pthread_join() 활용하여 멀티스레딩 구현
(2) CPU 스케줄링
📌 스케줄링 개념
운영체제는 CPU 자원을 효과적으로 할당하기 위해 다양한 스케줄링 알고리즘을 사용합니다.
알고리즘특징
FIFO | 먼저 도착한 프로세스를 먼저 실행 |
SJF | 실행 시간이 가장 짧은 프로세스를 먼저 실행 |
Round Robin | 각 프로세스에 동일한 시간 할당 |
멀티레벨 큐 | 우선순위를 기준으로 여러 개의 대기열 관리 |
(3) 동기화 (Synchronization)
📌 동기화 기법
멀티스레드 및 멀티프로세스 환경에서 공유 자원에 대한 동기화 문제가 발생할 수 있습니다.
- 뮤텍스 (Mutex): 한 번에 하나의 프로세스만 접근 가능
- 세마포어 (Semaphore): 카운터 기반 동기화 메커니즘
- 모니터 (Monitor): 동기화된 객체
(4) 프로세스 간 통신 (IPC)
📌 IPC 기법 비교
IPC 방식특징
파이프 (Pipe) | 부모-자식 프로세스 간 데이터 전달 |
메시지 큐 (Message Queue) | 프로세스 간 메시지 전달 |
공유 메모리 (Shared Memory) | 동일한 메모리 공간을 여러 프로세스가 공유 |
소켓(Socket) 프로그래밍 | 네트워크를 통한 프로세스 간 통신 |
6. C 프로그램 실행 과정
📌 C 프로그램 실행 흐름
- 편집(Edit): 코드 작성 (.c 파일)
- 전처리(Preprocess): #include, #define 등 전처리 실행
- 컴파일(Compile): 기계어로 변환 (.o 파일 생성)
- 링크(Link): 라이브러리와 연결하여 실행 파일 생성 (a.out)
- 로딩(Load): 실행 파일을 메모리에 적재
- 실행(Execute): CPU가 명령어를 수행
7. 결론 및 학습 전략
📌 효과적인 학습법
- 리눅스 실습 (터미널 명령어, 시스템 프로그래밍 경험)
- C 프로그래밍 심화 학습 (시스템 콜, IPC 활용)
- 운영체제 이론 학습 (스케줄링, 동기화, 메모리 관리)
- 실제 프로젝트 수행 (멀티스레드, 소켓 프로그래밍 실습)
🚀 시스템 프로그래밍 실습을 많이 하면서 이해하는 것이 핵심입니다! 🚀