VEDA 복습/리눅스, 리눅스 프로그래밍

VEDA 41일차 - POSIX 스레드, 스레드 동기화

잡학다식을꿈꾼다 2025. 5. 15. 17:11
반응형

 

1. C => HW(embedded)

    1. firmware(= startup + main() )

    2. bootloader + RTos { = os + app }

    3. u-boot + os(kernel) + drivers + (middleware) + apps

 

2. embedded system comprehension

    PC ====> BOARD (PC와 다르게 보드에서의 개발은 환경이 다르다!)

 

3. embedded c

    on bard.

    => "volatile"

    => "pointer --> devices(SFR)", "restrict"

    => bit operations

 

4. Datastructure and Algorithm : 실제로도 중요 + 코딩테스트

 

6. RTos

 

7. Linux

    1. how to use?(linux 시스템에 대한 이해)

    2. device driver(hard) => 책에서는 마지막에 있다. synchronization, kthread

    3. linux system programming - process, systemcall(open, rw, close), IPC, synchronization => app(+ device control)

    4. network programming

 

OSI 7 Layer

레벨(Level)  계층(Layer)  내용(Description)
7 응용 계층 (Application Layer) 사용자가 네트워크에 접근할 수 있도록 지원하며, 이메일, 파일 전송, 웹 브라우징 등 애플리케이션 서비스 제공
6 표현 계층 (Presentation Layer) 데이터의 형식 변환, 암호화/복호화, 압축/해제 등 데이터를 표준 형식으로 변환하여 응용 계층에 전달
5 세션 계층 (Session Layer) 통신하는 두 시스템 간의 연결(세션)을 설정, 유지, 종료하며, 세션의 동기화와 대화 제어 기능 수행
4 전송 계층 (Transport Layer) 신뢰성 있는 전송을 보장하며 오류 검사, 흐름 제어, 세그먼트 분할/재조립; 대표적으로 TCP, UDP 포함
3 네트워크 계층 (Network Layer) 패킷 전달 및 경로 설정(라우팅), 논리 주소(IP) 관리, IP, ICMP, 라우팅 프로토콜 등 포함
2 데이터 링크 계층 (Data Link Layer) 물리 계층과 네트워크 계층 사이의 데이터 전송을 담당하며, MAC 주소 기반 프레임 전송 및 오류 검출
1 물리 계층 (Physical Layer) 전기적, 기계적, 절차적으로 실제 물리 매체를 통해 비트 단위의 데이터 전송 (케이블, 허브, 전압 등 포함)

 

phy칩 : 물리계층을 담당하는 칩

 

네트워크 통신 모습

네트워크 주소 : 망 전체의 주소(큰 주소)

호스트 주소 : 네트워크 안에 속해 있는 기기의 주소

IP : 네트워크 상에서 식별자

PORT : 프로세스 또는 서비스 간 식별자

MAC : 네트워크 카드 등 기기 간 식별자

 

두 지표를 이용하여 별 개의 네트워크에 속해 있는 호스트 간 통신이 가능하다.

TCP : 일반적인 통신

UDP : 정확도를 다소 희생하더라도 빠른 통신이 요구되는 경우 ex) game

 

다중 입출력(Multiplexing) : block으로 설정하자니 무한 대기가 걸릴 수 있고, non-block을 설정하자니 예외 처리를 해주어야 한다. 이 문제를 해결하기 위한 방법이 다중 입출력이다. select, epoll

 

비교 항목 select epoll
등장 시기 오래된 방식 (POSIX 표준) Linux 2.5.44 이후 도입
지원 플랫폼 POSIX 호환 시스템 (Linux, macOS 등) Linux 전용
파일 디스크립터 개수 제한 있음 (FD_SETSIZE, 일반적으로 1024개 제한) 제한 없음 (이론상 커널 설정과 자원에 따라 수만 개 가능)
관심 이벤트 등록 방식 매 호출마다 전체 FD를 사용자 공간에서 전달 epoll_ctl()로 사전 등록, 이후 변경이 없는 한 유지됨
감시 방식 순차적으로 검사(Linear Search) 이벤트 기반(Event-driven, 내부적으로 커널 이벤트 큐 사용)
성능 FD 수 증가 시 성능 저하 (O(n)) 많은 FD 처리 시에도 고성능 유지 (O(1))
사용 방식 select() 호출 시 모든 FD 셋 다시 전달해야 함 epoll_create(), epoll_ctl(), epoll_wait() 구성
이벤트 통지 방식 상태 확인(Polling 방식) 준비된 이벤트만 통지 (Callback 방식에 가까움)
에지/레벨 트리거 지원 지원하지 않음 **레벨 트리거(Level Trigger)**와 에지 트리거(Edge Trigger) 모두 지원
리소스 사용량 많은 FD 감시 시 사용자/커널 공간 복사 비용 큼 커널에 FD 보관, 사용자/커널 공간 간 복사 최소화
예시 사용 환경 소규모 클라이언트 처리용 서버, 학습용 예제 등 대규모 동시 접속 서버 (예: Nginx, Redis, HAProxy 등)
반응형