VEDA 41일차 - POSIX 스레드, 스레드 동기화
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 등) |