본문 바로가기

개인공부121

Chapter 13 - 다양한 입출력 함수들 13-1 : send & recv 입출력 함수 리눅스에도 send(), recv() 함수가 존재함 #include ssize_t send(int sockfd, const void *buf, size_t nbytes, int flags); // 성공시 전송된 바이트 수, 실패시 -1 반환 ssize_t recv(int sockfd, void *buf, size_t nbytes, int flags); // 성공시 수신한 바이트 수(단, EOF 전송시 0), 실패시 -1 반환 윈도우의 send(), recv() 함수와 자료형 이름 외에는 차이가 없음 send(), recv() 함수 모두 마지막 매개변수로 데이터 송수신시 적용할 옵션정보가 전달됨 옵션정보는 비트로 사용되기 때문에 비트 OR 연산자를 이용해 둘 .. 2023. 2. 24.
Chapter 12 - IO 멀티플렉싱(Multiplexing) 12-1 : IO 멀티플렉싱 기반의 서버 프로세스의 생성에는 많은 연산 및 메모리가 필요함 또한 별도의 메모리를 점유하기 때문에 상호간의 데이터 전송에 불편 멀티플렉싱 : 하나의 통신채널을 통해 둘 이상의 데이터를 전송하는데 사용되는 기술 서버에 멀티플렉싱 기술을 도입하여 필요한 프로세스의 수를 줄일 수 있음 12-2 : select 함수의 이해와 서버의 구현 select() 함수를 사용하여 멀티플렉싱 서버를 구현할 수 있음 여러개의 파일 디스크립터를 동시에 관찰 가능 정확히는 소켓의 관찰항목인 이벤트(event)를 관찰 수신한 데이터를 지니고 있는 소켓의 존재여부 블로킹되지 않고 데이터의 전송이 가능한 소켓 탐색 예외상황이 발생한 소켓 탐색 파일 디스크립터 설정 관찰하고자 하는 파일 디스크립터들을 이벤.. 2023. 2. 24.
Chapter 11 - 프로세스간 통신(Inter Process Communication) 11-1 : 프로세스간 통신의 기본 개념 프로세스들은 서로 별개의 메모리 공간을 점유하기 때문에 프로세스간 통신은 별도로 마련된 방법을 통해서만 이뤄질 수 있음 두 프로세스간 파이프(Pipe)를 생성하여 통신 가능 파이프는 소켓과 마찬가지로 운영체제에 속하는 자원으로 fork() 함수로 복사되지 않음 #include int pipe(int filedes[2]); // 성공시 0, 실패시 -1 반환 배열에 담기는 두개의 파일 디스크립터는 각각 파이프의 입구와 출구로 사용 fork() 함수로 입구 또는 출구에 해당하는 파일 디스크립터를 자식 프로세스에 전달 단, 이 때 파이프가 복사된 것이 아닌 파이프의 입출력에 사용되는 파일 디스크립터가 복사된 것에 유의 pipe() 함수 사용 예제 // pipe1.cpp.. 2023. 2. 24.
Chapter 10 - 멀티프로세스 기반의 서버구현 10-1 : 프로세스의 이해와 활용 다중접속 서버의 구현 모델 멀티프로세스 기반 서버 : 다수의 프로세스를 생성하는 방식으로 서비스 제공 멀티플렉싱 기반 서버 : 입출력 대상을 묶어서 관리하는 방식으로 서비스 제공 멀티쓰레딩 기반 서버 : 클라이언트의 수만큼 쓰레드를 생성하는 방식으로 서비스 제공 Windows에서는 멀티프로세스 기반의 서버 구현을 지원하지 않음 프로세스(Process) : 메모리 공간을 차지한 상태에서 실행중인 프로그램 모든 프로세스는 운영체제로부터 프로세스 ID를 부여받음 1번은 운영체제가 시작되자마자 실행되는 프로세스에 할당 따라서 프로세스 ID는 2 이상의 정수 형태를 띔 ps 명령어로 PID를 확인할 수 있음 프로세스의 생성에는 fork() 함수를 사용 #include pid_t.. 2023. 2. 24.