본문 바로가기

유닉스

(14)
[네트워크] 동기 I/O와 비동기 I/O의 비교 동기 I/O와 비동기 I/O의 비교동기 실행과 비동기 실행의 차이점은 처음에는 약간 혼동될 수 있습니다. 기본적으로 입출력 동기화에는 동기 I/O와 비동기 I/O(또는 오버랩 I/O) 두 가지가 있습니다. 동기 I/O 처리에서는 스레드가 행동에 들어가면 I/O 요청이 완료될 때까지 기다려야 합니다(프로그램은 프로세스가 종료될 때까지 대기 상태에 '빠지고', 이를 빠져나갈 길은 없습니다). 비동기 환경에서 같은 행동이 일어나면 스레드는 커널의 도움을 받아 I/O 작업을 처리합니다. 실제로 스레드는 요청을 커널에 즉시 전달하고 계속해서 다른 작업을 처리합니다. 커널은 작업이 완료됐을 때 스레드에 신호를 보내고, 스레드는 현재 작업을 중단하고 I/O 작업의 데이터를 필요한대로 처리하는 것으로 이 신호에 답합니..
[네트워크] 블로킹과 논블로킹 메커니즘 블로킹 모드어떤 시스템 콜을 호출했을때 네트워크 시스템 동작이 완료할때까지 그 시스템 콜에서 프로세스가 멈춥니다.소켓 생성시 디폴트는 default 모드입니다.listen(), connect(), accept(), recv(), send(), read(), write(), recvfrom(), sento(), close()block 될 수 있는 소켓 시스템 콜입니다.I/O시 처리될 때까지 기다려야하기 때문에 비동기적인 작업 수행 불가능하게 됩니다.일대일 통신을 하거나 프로그램이 한가지 작업만 하면 되는 경우는 blocking 모드로 프로그램을 작성할 수 있습니다. 논블로킹 모드소켓 관련 시스템 콜에 대하여 네트워크 시스템이 즉시 처리할 수 없는 경우라도 시스템콜이 바로 리턴되어 응용 프로그램이 block..
[시스템프로그래밍] 주요 정리 유닉스 시스템 프로그래밍 개요 1. 프로그래밍 표준유닉스 시스템 프로그래밍 관련 표준으로는 ANSI C, IEEE의 POSIX, X/Open 그룹의 XPG3, XPG4, SVID, SUS가 있습니다. 2. 유닉스 시스템 프로그래밍의 이해유닉스 시스템이 제공하는 파일 시스템이나 사용자 정보, 시스템 시간 정보, 네트워킹 등 다양한 서비스를 이용해 프로그램을 구현할 수 있도록 제공되는 프로그래밍 인터페이스를 시스템 호출이라고 하며, 이러한 시스템 호출을 사용해 프로그램을 작성하는 일을 유닉스 시스템 프로그래밍이라고 합니다. 3. 시스템 호출과 라이브러리 함수 시스템 호출은 기본적으로 C언어의 함수 형태로 제공됩니다. 시스템 호출은 커널의 해당 모듈을 직접 호출해 작업을 수행하고 결과를 리턴합니다. 라이브러리..
[네트워크] 소켓 프로그래밍 활용 소켓 프로그래밍 기초에서는 TCP/IP 프로토콜이 무엇인지 살펴보고 이를 이용해 네트워크 프로그래밍을 하는 데 필요한 기본 개념을 다뤘습니다. TCP와 UDP의 차이점과 IP주소와 포트 번호의 역할도 알아보았습니다. 또한 TCP/IP 프로토콜 기반 프로그램 작성에 필수적인 소켓 인터페이스 관련 함수와 구조체를 살펴보고 간단한 프로그램도 작성해봤습니다. 네트워크를 통해 데이터를 주고받으며 동작하는 네트워크 프로그램은 일반적으로 서버와 클라이언트로 역할을 구분할 수 있습니다. 서버는 클라이언트의 요청에 따라 다양한 서비스를 제공하는 프로그램으로, 보통 데몬(daemon) 프로세스라고 합니다. 예를 들어, 브라우저를 통해 웹사이트에 접속할 경우 서버에는 웹 서비스를 제공하는 HTTP 데몬이 동작하고 있어 사용..
[네트워크] 소켓프로그래밍 기초 01. IP 주소와 포트 번호 TCP/IP 프로토콜을 이용해 통신하려면 IP 주소가 있어야 합니다. 또한 인터넷에서 동작하는 각종 서비스를 구분하기 위한 포트 번호를 지정해야 합니다. 이 절에서는 IP 주소와 포트번호의 기본 개념을 살펴보고, 관련 함수의 사용법을 배웁니다. IP 주소와 호스트명IP 주소는 인터넷을 이용할 때 사용하는 주소로, 점(.)으로 구분된 32비트 숫자로 표시합니다. (예: 192.168.100.51) IP 주소를 네트워크 주소(인터넷 주소) network address(internet address)라고도 합니다. IP 주소는 A~C 클래스로 구분됩니다. 시스템은 주소를 숫자로 구분하는 것이 효율적이지만, 사람은 주소를 이름으로 구분하는 것이 더 편합니다. 따라서 시스템에는 IP..