Public/tip & tech 122

프로세스간 통신 UDS

UDS UDS(Unix Domain Socket)은 내부 프로세스들 끼리 TCP 또는 UDP 프로토콜을 이용하여 통신할 수 있도록 도와주는 소켓입니다. 이 소켓을 이용하시면 기존의 TCP/IP, UDP/IP에서 사용하던 함수로 같은 방법을 사용하여 프로세스들끼리 통신할 수 있어 매우 편리하며, 이점이 장점입니다. 말씀 드린 바와 같이 TCP/IP, UDP/IP와 같은 함수를 사용하고 다만 필요한 변수값만 바꾸어 주면 됩니다. 예를 들어 소켓을 생성해 보겠습니다. TCP/IP와 UDP/IP에서 처럼 socket() 함수를 이용합니다. 우선 #include 대신에 #include 를 사용합니다. 자, socket() 함수를 호출해 보겠습니다. int sock; sock = socket( PF_FILE, SO..

Public/tip & tech 2009.12.11

reentrant (재진입성) 함수와 쓰레드안전(MultiThread-safe)

* 이 글은 C언어 시스템 프로그램에서 주로 사용되는 reentrant(재진입성) 함수와 멀티쓰레드 안전(Multi-threads-safety)의 차이와 기능에 대해서 알아보는 글입니다. (참고: "멀티쓰레드 안전"은 매뉴얼 표기시 MT-safe, MT-safety, Thread-safe라고 표기합니다.) 우선 책에 애매모호하게 짧게 나와서 이를 종종 질문해오시는 분들이 많아서 이렇게 긴글을 쓰게 되었습니다. 매번 설명하는것도 힘들고 해서 다음부터는 해당 링크만 참조시켜드릴 요령으로 작성하게 되었습니다. 그럼 우선 논란이 된 "Advanced 리눅스 시스템 프로그래밍"책의 해당 내용을 적어보도록 하겠습니다. * 원자성과 쓰레드 - 안전, 재진입성에 대해서 원자성(atomicity)이 보장되는 코드(or ..

Public/tip & tech 2009.10.16

sockaddr, sockaddr_in 구조체

sockaddr 구조체 소켓 주소를 표현하는 구조체다. 아래 정의를 보면 주소 체계와 주소 두가지 정보만 갖고 있는 단순한 구조로 되어있다. 원래 소켓 자체가 TCP/IP만을 목적으로 만들어진 것이 아니어서, 다양한 주소 체계에 맞게 범용 목적으로 사용하기 위해 이런 구조를 가지고 있다. struct sockaddr{ sa_family_t sa_family; // 소켓의 주소체계. PF_INET= IPv4 주소체계. char sa_data[14]; // 해당 주소체계에서 사용하는 주소 정보. } sockaddr_in 구조체 IPv4 주소체계에서 사용하는 구조체다. 소켓 프로그램은 범용 주소 구조체로 sockaddr을 사용하지만, 주소체계의 종류에 따라 별도의 전용 구조체를 만들어 사용하는게 아무래도 편리..

Public/tip & tech 2009.08.17

[TCP/IP 소켓 프로그래밍] 15. 소켓과 표준 입출력

15-1. 표준 입출력 함수의 장점 표준 입출력 함수의 장점 이식성이 좋아진다. - 모든 시스템은 ANSI 표준 C를 지원한다. 효율성을 높일 수 있다. - 표준 입출력 함수에 의한 버퍼를 제공받는다. (표준 입출력버퍼, 소켓 버퍼) - 소켓 생성 버퍼 목적 : 프로토콜의 완성을 위한 것. - 표준 입출력 버퍼 목적 : 성능 향상 파일 포인터와 파일 디스크립터 파일 포인터 - 표준 입출력 함수 호출을 위해서 필요한 파일 포인터. = FILE 구조체의 포인터. 파일 디스크립터를 이용한 시스템 입출력 - 시스템 입출력 함수 사용 시 필요 - 정수값이다. ※ 소켓 기반의 표준 입출력 함수 사용을 위해 파일 디스크립터를 기반으로 파일 포인터를 생성. 15-2. 표준 입출력 함수의 사용 파일 디스크립터 -> 파일..

Public/tip & tech 2009.08.14

[TCP/IP 소켓 프로그래밍] 14. Multicast & Broadcast

유선 : 고객에게 서비스를 제공. 멀티캐스트 방식(가입이 필요) 안테나 방송 : 서비스를 지정된 채널로 제공. 브로드캐스트 방식(가입 필요 없음) 14-1. 멀티캐스트(Multicast) 멀티캐스트 전송 방식. UDP를 기반으로 하는 전송 방식. 멀티캐스트 그룹(클래스 D에 속하는 IP주소)을 기반으로 멀티캐스트 패킷을 주고 받음. 하나의 멀티캐스트 패킷은 라우터를 통해서 다수의 호스트에 전송. (한 번만 방송하면 가입자 모두 시청 가능.) (정보를 단방향으로 제공할 때 주로 사용.) 라우팅(Routing)과 TTL(Time To Live) 라우팅 : 라우터에 의해서 패킷이 경로를 찾는 과정 TTL 거쳐갈 수 있는 라우터의 수(홉)를 의미. 이 값이 0이 되면 패킷은 더 이상 전달되지 못하고 소멸된다. ..

Public/tip & tech 2009.08.14

[TCP/IP 소켓 프로그래밍] 13. 고급 입출력 함수

13-1. recv & send 입출력 함수 read & write 함수와 달리 데이터 입출력 방법에 있어서 옵션 부여. #include #include int recv(int sock, void *buf, int len, unsigned int flags); int send(int sock, const void * buf, int len, unsigned int flags); 옵션의 종류와 의미 - MSG_DONTROUTE (send 함수 호출시에만 사용하는 옵션) 데이터 전송 시 라우팅 테이블(라우터에 있음)을 참조하지 않음. => Local network 내에서만 패킷을 전송하겠다는 뜻. - MSG_DONTWAIT (send, recv 함수 모두에 사용하는 옵션) not blocking 입출력 기능..

Public/tip & tech 2009.08.14

[TCP/IP 소켓 프로그래밍] 12. 프로세스간 통신(IPC)

12-1. I/O 멀티플렉싱 기반의 서버 하나의 전송로를 여러 사용자가 동시에 사용해서 효율성을 극대화 하는 것. 전송로를 공유. 전송로를 공유하기 위해서는 서로 약속이 필요하다. TDMA : 자료 전송 시간을 일정한 시간 폭으로 나누어서 함께 공유하는 방식 FDMA : 주파수 대역 폭을 나누어서 함께 공유하는 방식 I/O 멀티플렉싱 클라이언트와의 입/출력을 담당하는 프로세스를 하나로 묶어버리는 것. 프로세스 = 고속의 전송로. multitasking(멀티태스킹) 예시 multiplexing(멀티플렉싱) 예시 ※ 데이터 입출력 및 접속 모두를 하나로 묶어서 처리한다. ※ 멀티플렉싱 서버가 멀티태스킹 서버보다 성능이 좋다. -> context switching이 없음. 멀티 프로세스 vs 멀티 플렉싱 멀티..

Public/tip & tech 2009.08.14

[TCP/IP 소켓 프로그래밍] 11. 프로세스간 통신(IPC)

11-1. 프로세스간 통신(Inter-Process Communication) 프로세스간 통신의 정의 독립된 프로세스 간에 데이터를 주고 받는 행위를 의미 프로세스간 통신의 문제점 독립된 프로세스는 (특정 시스템콜을 하지 않는한) 공유 메모리가 존재하지 않기 때문에 데이터를 주고 받는 것이 불가능. 해결책 : 독립된 프로세스들이 통신할 수 있도록 '파이프'를 제공. 파이프 생성함수 #include int pipe(int fd[2]); 파이프는 커널 객체이다. fd[1]은 파이프 입구, fd[0]은 파이프 출구로 사용한다. 리턴 : 성공시 0, 실패시 -1 파이프의 생성과 프로세스간 통신 파이프의 특징 1. 파이프는 fork 함수에 의해서 복사되지 않는다. -> 파이프의 입출력을 의미하는 파일 디스크립터가..

Public/tip & tech 2009.08.14

[TCP/IP 소켓 프로그래밍] 10. 멀티태스킹 기반의 서버구현

10-1 다중 접속 서버의 구현 방법들 ※ 클라이언트의 (여러명)다중 접속을 허용(concurrent server). 리눅스 기반의 다중 접속 서버 구현 방법들 1. 프로세스 생성을 통한 멀티태스킹(Multitasking) 서버의 구현 2. select 함수에 의한 멀티플렉싱(Multiplexing) 서버의 구현 3. 쓰레드 기반으로 하는 멀티쓰레딩(Multithreading) 서버의 구현 10-2. 프로세스의 생성 프로세스에 대한 이해 1. 실행되고 있는 프로그램의 기본 단위 2. 생성된 프로세스는 운영체제에 의해 할당된 고유한 ID를 가진다. 3. 하나의 프로그램 내에서 여러 개의 프로세스가 동시에 실행 될 수 있다. ps -u : 어떤 프로세스가 수행되고 있는 지 보여준다. (shell 명령) pi..

Public/tip & tech 2009.08.14