컴퓨터 기초81 3.주소체계와 데이터 정렬 #.ip 와 port ip는 인터넷 프로토콜의 약자로 인터넷 상에서 데이터를 송수신할 목적으로 컴퓨터에게 부여하는 값이다. 반면 port 번호는 컴퓨터에게 부여하는 값이 아닌, 프로그램상에서 생성되는 소켓을 구분하기 위해 소켓에 부여되는 번호를 뜻한다. #.인터넷 주소의 종류 ip 주소는 IPv4 와 IPv6로 나뉜다. 둘의 차이점은 IP 주소 표현에 사용되는 바이트 크기에 있다. IPv4는 4바이트(32비트) 주소체계이고, IPv6는 16바이트(128비트) 주소체계이다. IPv4 기준의 4바이트 IP 주소는 네트워크 주소와 호스트(컴퓨터) 주소로 나뉘며, 주소의 형태에 따라서 A,B,C,D,E 클래스로 분류가 된다. "IP 주소 = 네트워크 주소 + 호스트 주소" 네트워크 주소란 네트워크의 구분을 위한.. 2020. 8. 5. 2.소켓의 타입과 프로토콜의 설정 #.프로토콜이란 무엇인가? 프로토콜은 컴퓨터간에 통신(대화)을 하기 위해 필요한 통신 규약, 규칙, 약속이다. #프로토콜 체계(protocol Family) #.소켓 함수 int socket(int domain, int type, int protocol); -반환 값 정상(fd >0), 실패(-1) -ERR_NO EAFNOSUPPORT : Address Family를 지원하지 않음. EMFILE : 프로세스에서 더 이상 fd 생성 불가 ENFILE : 시스템에서 더 이상 fd 생성 불가 -매개변수 domain : Address Family ( AF_INET, AF_INET6 ...) type : SOCK_STREAM(TCP), SOCK_DGRAM(UDP) protocol : IPPROTO_TCP, IPP.. 2020. 8. 4. 1.네트워크 프로그래밍과 소켓의 이해 #.네트워크 프로그래밍이란? 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것이 네트워크 프로그래밍이다. #.그렇다면 왜 소켓이라는 표현을 사용하나? 우리는 전력망으로 부터 전기를 공급받기위해서 소켓을 꽂는다. 즉, 가전기기의 소켓은 전력망으로의 연결에 사용된다. 마차가지로 멀리 떨어져 있는 컴퓨터와 데이터를 송수신하려면 인터넷이라는 네트워크 망에 연결해야 한다. 그리고 프로그래밍에서의 소켓은 네트워크 망의 연결에 사용되는 도구다. #.전화기 비유 전화를 걸려면 전화기가 있어야하듯, 컴퓨터끼리 통신을 하려면 소켓(전화기)가 필요하다.(socket 함수로 생성) 전화기에 전화번호가 할당되는것 처럼, 소켓에도 소켓의 주소정보(ipv4, tcp, ip 주소, 포트 등..).. 2020. 8. 3. 19.메시지큐, 공유 메모리, 세마포어 - ipc #.키와 식별자 시스템 V IPC를 사용하려면 IPC의 객체를 생성해야 하는데, 이를 위해 공통적으로 사용하는 기본 요소가 키와 식별자이다. #.키생성 방법 -키로 IPC_PRIVATE를 지정한다 IPC_PRIVATE를 키로 지정해 생성된 식별자를 서버와 클라이언트 모두 알 수 있게 해야 한다. fork 함수로 생성된 부모-자식 프로세스 간 통신에서 유용하게 사용할 수 있다. -ftok 함수로 키를 생성한다. ftok 함수는 경로명과 숫자값을 받아서 키를 생성한다. 따라서 서버와 클라이언트가 같은 경로명과 숫자값을 지정하면 공통 식별자를 생성할 수 있다. *상수 : IPC_PRIVATE *키 생성 : key_t ftok(const char *path, int id); *IPC 정보 검색 : ipcs [-.. 2020. 7. 21. 18.파이프 #.파이프 파이프는 두 프로세스 사이에서 한 방향으로 통신할 수 있도록 지원한다. 종류 *이름있는 파이프 *이름없는 파이프 #.이름없는 파이프 부모-자식 프로세스 간에 통신할 수 있게 해준다. 부모 프로세스에서 fork 함수를 통해 자식 프로세스를 생성하고, 부모 프로세스와 자식 프로세스 간에 통신하는 것이다. (자식 프로세스가 출력한 내용을 부모 프로세스에서 읽을 것인지 둘 중 한 방향을 선택해야 한다.) *간단한 파이프 생성 FILE *popen(const char *command, const char *mode); int pclose(FILE *stream); *복잡한 파이프 생성 int pipe(int fildes[2]); #.파이프 생성: pipen(3) #include FILE *popen(c.. 2020. 7. 20. 17.메모리 매핑 #.메모리 맵 유닉스 시스템이 제공하는 통신 기능은 크게 두가지로 구분할 수 있다. 1.동일한 시스템 안에 있는 프로세스 사이에서 통신을 수행하는 것 2.두번째는 서로 다른 시스템에서 수행하고 있는 프로세스 사이에서 통신으로 데이터를 주고 받는 것. 프로세스 간 통신 : 동일한 유닉스 시스템 안에서 수행 중인 프로세스끼리 데이터를 주고받는 것 예) 파이프(pipe) 같은 특수 파일을 이용하거나, 메모리 매핑이나 공유 메모리 같은 메모리 영역을 이용하는 방법이 있다. 또한 메시지 큐, 공유 메모리, 세마포어 등 유닉스 시스템 V에서 제공하는 IPC 방법이 있음. 네트워크를 이용한 통신 : 유닉스 시스템에서 네트워크를 이요한 통신은 TCP/IP 프로토콜을 기본으로 하고 있으며, 소켓 라이브러리를 이용한다. .. 2020. 7. 20. 16.스레드 #.프로세스와 스레드 앞에서 Fork() 함수로 프로세스를 복사하는 법을 다루어보았는데. 이방법은 자원의 효율성이 떨어진다. 프로세스의 code, data, stack, file I/o, signal table 의 정보가 모두 복사되기 때문이다. 코드의 일부만 병렬로 실행시키고 싶을때는 낭비가 아닐 수 없다.그래서 스레드의 개념이 나왔다. 스레드는 한프로세스안에서 자원을 공유하면서 빠르게, 효율적으로 작업을 처리 할 수 있다. 프로세스는 독립적인자원을 가지는 반면에 스레드는 stat, memory등 자원을 공유한다. 그리고 프로세스는 자신만의 주소공간을 가지지만 스레드는 주소공간을 공유한다. 프로세스는 IPC를 이용해야만 통신이 가능하다. 그리고 스레드의 문맥교환은 프로세스의 문맥교환 보다 빠르다. 하지.. 2020. 7. 16. [유닉스 프로그래밍] 시스템정보 다루기 연습문제 #참고. [운영체제 실습] 7.시스템 정보 다루기 - (로그인, 패스워드 정보) [운영체제 실습] 8.시스템 정보 다루기 - (그룹, 시간) 1.uname 함수를 사용해 myname 명령을 만든다. myname 명령은 시스템의 호스트명, 운영체제 릴리즈 및 버전, 하드웨어 아키텍처 정보를 출력한다. myuname의 옵션은 다음과 같다. 2.sysinfo 함수를 사용해 myuname을 구현하라. 3.사용자가 입력한 로그인 id의 길이가 시스템의 최대 로그인명 길이보다 긴지 확인하는 프로그램을 작성하라. 4.파일명을 명령행 인자로 받아 해당 파일의 소유자명과 그룹명을 출력하는 프로그램을 작성하라. 5.사용자명을 입력받아 해당 사용자의 기본 그룹과 2차 그룹을 모두 검색해 출력하는 프로그램을 작성하라. 6.사.. 2020. 7. 15. [유닉스 프로그래밍] 디렉토리 관련 연습문제 *참고 [운영체제 실습] 6.파일과 디렉토리 1.파일의 정보를 추출하는 프로그램을 작성하라. 정보를 알고 싶은 파일의 이름은 명령행 인자로 받는다. 예) 2.입력받은 파일의 접근 권한을 출력하고, 접근 권한을 변경하는 프로그램을 작성하라. 문자모드 기능을 구현한다. 예)./mychmode g+w a.c 3.입력받은 파일의 접근 권한을 출력하고, 접근 권한을 변경하는 프로그램을 작성하라. 숫자모드 기능을 구현한다. 예)./mychmode 0777 a.c 4.디렉토리가 비어 있는지 확인 후 메시지를 출력하고, 비어 있으면, 해당 디렉토리를 삭제하는 프로그램을 작성하라. 5.디렉토리명을 명령행 인자로 입력받아 디렉토리를 생성하고, 작업 디렉토리를 새로 생성한 디렉토리로 이동시키는 프로그램을 작성하라. 6. ’.. 2020. 7. 14. 이전 1 ··· 3 4 5 6 7 8 9 다음