Server & Client

Server/Client

server 클라이언트의 요청 대기 -> 정보 및 서비스 제공

client 서버에서 제공되는 정보 및 서비스를 이용하는 호스트

서버에 정보 및 서비스의 제공을 요청하고 응답을 기다림

 

socket 네트워크로 입출력을 하기위해 사용자에게 필요한 수단을 제공하는 응용 프로토콜 인터페이스

입출력을 위한 요소

프로토콜, 소스,목적지의 IP, PORT


-Socket = 소켓 생성

-Bind = 소켓에 주소 정보 할당

 

네트워크 바이트 순서

Big-Endian 상위 바이트가 먼저, 네트워크 바이트 순서

Little-Endian 하위 바이트가 먼저, 호스트 바이트 순서

 

inet_addr = Dotted-Decimal Notation -> Big-Endian 32bit

listen = 서버가 클라이언트의 연결 요청 대기

connect = 클라이언트가 서버에 연결 요청

accept = 서버가 클라이언트에게 연결 요청 수락

recv(), send() =receive, send

close = 소켓 연결 종료

select

 

Select = 소켓의 I/O변화를 감지

 

Thread

프로세스의 문제점 : context switch overhead, 프로세스 생성 시간이 김, 동기화 오버헤드

프로세스는 여러 개의 쓰레드를 가질 수 있다.

함수호출 vs 멀티쓰레딩

비슷한 점 = 다른 함수나 쓰레드에서 선언된 변수를 접근할 수 없다.

전역 데이터와 힙영역은 모든 함수와 쓰레드가 공유

 

쓰레드는 쓰레드는 해당하는 스택이 하나씩 있고, 동시에 함수의 수행이 가능하다.

코드, 데이터, 파일은 공유하지만 레지스터와 스택은 개별

 

프로세스는 두 개의 컴포넌트로 나뉘어지는 복잡한 개체

쓰레드의 집합과 자원의 집합

수행 유닛은 쓰레드이며 수행환경을 제공해주고 쓰레드 id가 있다

pthread_self, create, exit, join, cancel(다른 쓰레드 제거), cleanup_push,pop 스택!

쓰레드 동기화

임계영역(critical section) = 둘 이상의 쓰레드가 공유하는 메모리 공간에 접근하는 코드영역

동기화 = 공유된 메모리에 둘 이상의 쓰레드가 동시 접근 막음, 실행순서 컨트롤

자체 동기화(pthread)

-mutex, lock and unlock

-mutex = 임계영역에 들어갈 때 잠그고 나올 때 풀고나옴(init, destroy, lock, unlock)

semaphore

하나 이상의 플레스가 동기화 또는 배제를 위한 목적으로 획득하거나 놓아주는 커널

(프로세스, 쓰레디 모두 적용)

wait, signal 함수로 접근 wait으로 세마포어를 획득하면 토큰이 감소, signal로 세마포어를 놓아주면 토큰의 수가 증가

세마포어가 생성될 때, 토큰도 생성됨

 

binary semaphore = 하나의 공유 자원에 직렬로 접근


세마포어 생성 -> 세마포어 연산 -> 세마포어 제어 -> 공유 자원 사용

semget = 세마포어 생성, 세마포어 설정을 확인

semop = 세마포어 조작, 세마포어 아디를 갖는 세마포어에 대해 연산을 수행

semctl = 세마포어 원소들은 사용되기 전에 semctl로 초기화

'SW > LINUX' 카테고리의 다른 글

IPC (Inter Process Communication)  (0) 2017.09.05
NETWORK (네트워크)  (0) 2017.09.05
GDB  (0) 2017.09.05
버전관리, SVN  (0) 2017.09.05
GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05

IPC (Inter Process Communication)

IPC의 종류

Same host

pipes, FIFOs, semaphores, shared memory

Different host

sockets

 

Communication

process1 -> channel(Same host) -> process3

 

pipe = 하나의 프로세스로부터 데이터 흐름을 다른 프로세스로 연결

한프로세스의 출력을 다른 프로세스의 입력으로 붙이거나 파이프로 연결

파이프 함수는 호출자가 순차적으로 생성된 파일 디스크립터를 통해 접근할수 있는 통신 버퍼 생성

 

Shared memory = 여러 프로세스들이 동일 메모리영역에서 읽고 쓸 수 있도록 제공

연관이 없는 프로세스들이 동일 물리적 메모리에 액세스

동기화 기능이 없어서 공유메모리에 대한 액세스를 동기화 해야함

 

Message Queue = 다른 프로세스들 간에 메시지를 주고받을 수 있는 IPC 메커니즘

파이프를 열고 닫을 필요가 없고, 송신프로세스, 수신프로세스에 대해 독립적으로 존재

 

부모-자식간은 Pipe 다른 부모-자식은 나머지것들

dup = copy fdp dup2 = change fdp

 

FIFO = open을 통해서 연 뒤 READ, WRITEFIFO에 액세스, 권한이 있음

mkfifo = Make FIFO file

unlink = REMOVE FIFO

 

Shared Memory

연관이 없는 두 프로세스가 동일 메모리에 액세스

read/write로 프로세스간 데이터를 주고받음

get key(ftok) -> get SM id(shmget) -> get start address(shmat) -> read/write -> free(remove)(shmdt) -> ipcrm(remove SM)(shmctl)

 

'SW > LINUX' 카테고리의 다른 글

Server & Client  (0) 2017.09.05
NETWORK (네트워크)  (0) 2017.09.05
GDB  (0) 2017.09.05
버전관리, SVN  (0) 2017.09.05
GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05

NETWORK (네트워크)

네트워크


프로토콜이란 컴퓨터와 컴퓨터 사이에서 데이터를 어떻게 주고받을 것인지를 정의한 통신규약


컴퓨터의 주소는 MAC, IP, 호스트 명 이 있다


MAC주소 : 6개의 16진수 (48비트) 제조사번호, 일련번호로 구성


IP주소 : 네트워크부분(네트워크 구분), 호스트 부분(해당 네트워크에서 컴퓨터 식별)으로 구성


호스트 명 : www(호스트 부분) naver.com(네트워크 부분)


포트번호 : 각 서비스를 구분하는 번호



Netstat : 네트워크 상태 정보 출력하기


o -a : 모든 소켓 정보를 출력한다.


o -r : 라우팅 정보를 출력한다.


o -n : 호스트 명 대신에 IP 주소를 출력한다.


o -i : 모든 네트워크 인터페이스 정보를 출력한다.


o -s : 프로토콜별로 네트워크 통계 정보를 출력한다.


o -p : 해당 소켓과 관련된 프로세스의 이름과 PID를 출력한다


 

호스트 이름 확인하기 : hostname, uname -n



Uname : 시스템 정보 출력


o -m : 하드웨어 종류를 출력한다.


o -n : 호스트 이름을 출력한다.


o -r : 운영체제의 릴리즈 정보를 출력한다


o -s : 운영체제의 이름을 출력한다.


o -v : 운영체제의 버전을 출력한다.


o -a : 위의 모든 정보를 출력한다.

 


 

원격 접속하여 파일 송수신 하는 서버 : 텔넷, SSH, FTP


텔넷 : 원격에서 리눅스에 접속하는 프로그램의 이름(서버와 클라이언트 필요) -> xinetd에 의해 동작(open 접속 quit 종료)


SSH : 텔넷과는 달리 모든 통신을 암호화한다 (SSH 데몬 필요)


FTP => vsFTPD(리눅스 FTP 서버)


Get : 파일 하나를 호스트로 가져온다. Mget : 여러 개의 파일을 가져온다


Put : 파일 한 개를 호스트로 보낸다. Mput : 여러 개의 파일을 보낸다.


Hash : 송수신이 진행되고 있는지 표시 bye : 접속 종료

'SW > LINUX' 카테고리의 다른 글

Server & Client  (0) 2017.09.05
IPC (Inter Process Communication)  (0) 2017.09.05
GDB  (0) 2017.09.05
버전관리, SVN  (0) 2017.09.05
GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05

GDB

Bug : 컴퓨터 프로그램의 결함


Logic error : 제어문이나 데이터 형의 잘못된 사용 -> 비정상적인 결과


Compile error : 문법 오류


Runtime error : 프로그램의 실행 도중 발생하는 오류


Link error : 전역변수 정의 및 함수 선언 및 정의가 잘못된 경우


Debugging : 버그를 발견하여 수정하는 것





GDB : 프로그램이 실행될 때 내부에서 어떻게 작동되는지를 확인


           -g 옵션 : 컴파일 되는 실행 파일에 디버깅 정보 삽입



o 사용법


l ß 소문자 L 을 뜻한다.


l 메인 함수를 기점으로 소스 출력


l [행번호] 해당 행 주위의 소스를 보여준다


l [파일명]:[함수명] 특정 파일의 소스를 보여준다


l [함수명] 해당 함수의 소스를 보여준다


l - 출력된 행의 이전 행을 출력


l file.c:func file.c 파일의 func 함수 부분 출력


l file.c:10 file.c 파일의 10행을 기준으로 출력

 

브레이크포인트 : 실행 도중 프로그램에 대한 추가적인 정보를 알아내기 위한 수단


b func func 함수의 시작 부분에 브레이크 포인트 설정


b 10 10행에 브레이크 포인트 설정


b file.c:func file.c 파일의 func 함수에 브레이크 포인트 설정


b file.c:10 file.c 파일의 10 행에 브레이크 포인트 설정


b +2 현재 행에서 2개 행 이후 지점에 브레이크 포인트 설정


b -2 현재 행에서 2개 행 이전 지점에 브레이크 포인트 설정


b *0x8049000 0x8049000 주소에 브레이크 포인터 설정(어셈블리로 디버깅 시 사용)


b 10 if var = 0 10행에 브레이크 포인트를 설정하는데 var 변수 값이 0일때 작동


tb b 명령어로 브레이크를 걸면 gdb가 종료할때 까지 유용하므로 임시로 한번

만 브레이크 포인트를 걸고 싶을때 사용


d : 모든 브레이크포인트를 지움


s : 현재 행 수행 후 정지 함수 호출 시 내부로 들어감


s 5: s5번 입력


n : 형재 행 수행 후 정지, 함수 호출시 함수 수행 후 다음 행으로 감


c : 다음 브레이크포인트를 만날 때까지 계속 진행


u : 현재 루프를 빠져나감


finish : 현재 함수를 수행하고 빠져나감


return : 현재 함수를 수행하지 않고 빠져나감


return123 : 현재 함수를 수행하지 않고 빠져나감, 리턴값은 123


와치포인트 : 어떤 변수 값이 바뀔 때마다 브레이크를 걸 때 사용


- i locals 현재 상태에서의 지역변수와 값 출력


- p : 개별 변수의 출력


- p $[register] 레지스트 값 확인


- i registers 레지스트 값 전체를 출력



n 출력 형식의 지정


o 사용법


p/[출력형식] [변수]


출력형식


t : 2진수


o: 8진수


d:부호있는 10진수


u:부호없는 10진수


x:16진수


f:부동 소수점


c:최초 1바이트의 문자형

'SW > LINUX' 카테고리의 다른 글

IPC (Inter Process Communication)  (0) 2017.09.05
NETWORK (네트워크)  (0) 2017.09.05
버전관리, SVN  (0) 2017.09.05
GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05

버전관리, SVN

버전 관리 : 소스 코드 관리 (동일한 정보에 대하 여러 버전을 관리)


->공동 프로젝트 관리, 프로젝트 백업, 데이터 동기화를 위함


체크 아웃 : 저장소에서 파일을 가져옴


체크인 : 체크아웃한 파일의 수정이 끝나서 저장소에 새로운 버전으로 갱신


가져오기 : 처음으로 저장소에 파일을 복사


저장소 : 파일의 현재 버전과 변경 이력 정보를 저장하는 저장소


CVS : 공동 버전 시스템


Import : 프로젝트 파일 등록


Checkout : 프로젝트 파일 가져오기


Commit : 프로젝트 파일 수정 후 cvs서버에 반영


Update : cvs 서버의 최신 버전을 작업 디렉토리에 반영


Diff : 파일 버전에 따른 차이점 비교


Log : 파일 로그 보기


Annotate : 행별 정보 출력


Tag : 프로젝트 파일에 태깅하기


Rtag : 저장소 디렉토리에 태깅하기


Release : 모듈 release




 

SVN : Cvs 단점 개선(원자적 commit, 빠른 속도, 웹 인터페이스, 디렉토리 버전, 파일이름 변경)


Import : 프로젝트 서버 설정 후 디렉토리 안에 있는 파일을 처음 등록


Checkout : 서버에 있는 파일을 받아오는 명령


Ci : commit(comment를 달아 서버로 업로드)


Up : update(내 폴더에 있는 파일들을 현재 서버에 있는 최신 버전으로 업데이트)


Tag : trunk branches의 특정 시간을 가리키는 포인터


Branch : 새로운 기능을 추가하고 싶을경우! 테스트가 끝나면 merge

'SW > LINUX' 카테고리의 다른 글

NETWORK (네트워크)  (0) 2017.09.05
GDB  (0) 2017.09.05
GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05
리눅스 명령어 - INFO  (0) 2017.09.05

GCC compiler (내부 매크로, Makefile)

GCC

Gnu compiler collection C, C++, objective C, portlan, Java 등 컴파일러를 포함하는 의미

소스파일을 이용해 실행파일을 만들 때까지 필요한 프로그램을 차례로 실행시키는 툴



과정

*.c -> (전처리 ccp) -> *.i -> (컴파일 cc1) -> *.s -> (어셈블 as) -> *.o -> (링크id) -> a.out

소스파일->전처리된 파일->어셈블리어 파일->오브젝트 파일->실행 파일



Option

( -c ) : 오브젝트파일까지만 컴파일 하고 링크하는 과정 생략 (gcc -c c.c ) => c.o


( -o ) : 바이너리 형식의 출력 파일 이름 지정, 없을시 a.out (gcc -o file file.c)


( -I ) : 헤더 파일을 검색하는 디렉토리 목록을 추가(이 옵션이 없으면 해당 파일에서 헤더파일을 검색하지만 있다면,

gcc age -c -l /root 와 같이 경로를 설정함 (대문자 아이)



분리 컴파일

소스가 길 경우 나눠서 코딩한 후 묶어서 컴파일


(gcc main.c hi.c -o test)


Gcc -c main.c// gcc -c hi.c// gcc main.o hi.o -otest          


Make : gcc는 여러 파일중 어떤 파일이 수정된다면, 모든 파일을 다시 컴파일 하고 링크해야 하지만

make는 수정된 파일을 자동으로 알아내 컴파일 하고 수정하지 않은 파일은 기존 오브젝트파일 이용한다.


( , ) 같은 건 사용하지 않고 공백으로 한다. 명령을 시작하기 전에는 TAB, 다른 곳에선 TAB 불가, 순서는 중요하지 않다.



Makefile

test: test1.o test2.o test3.o

gcc -o test test1.o test2.o test3.o

test1.o: test1.c a.h

gcc -c test1.c

test2.o: test2.c a.h b.h

gcc -c test2.c

test3.o: test3.c b.h c.h

gcc -c test3.c




'SW > LINUX' 카테고리의 다른 글

GDB  (0) 2017.09.05
버전관리, SVN  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05
리눅스 명령어 - INFO  (0) 2017.09.05
리눅스 명령어 - USER  (0) 2017.09.05

리눅스 명령어 - PROCESS

   Process



A.    ps : 현재 진행중인 프로세스를 출력한다.


B.     Pstree : 프로세스의 상관관계를 출력한다.


C.    top : 프로세스의 목록을 일정시간(사용자가 지정 가능)마다 갱신하여 출력한다.


D.    Kill (시그널 프로세스) : 입력한 프로세스에 입력한 시그널을 보낸다.


E.     (명령어) & : 해당 명령어를 background에서 실행한다.


F.     jobs : background에서 실행중인 작업을 확인한다.

'SW > LINUX' 카테고리의 다른 글

버전관리, SVN  (0) 2017.09.05
GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05
리눅스 명령어 - INFO  (0) 2017.09.05
리눅스 명령어 - USER  (0) 2017.09.05
리눅스 명령어 - FILE&DIRECTORY  (0) 2017.09.05

리눅스 명령어 - INFO

Info



A.    which (명령어) : 해당 명령어의 위치를 절대경로로 알려준다.


B.     whereis (명령어) : 명령어의 정보가 담긴 파일들의 절대경로를 출력.


C.    grep (패턴 파일명) : 패턴에 맞는 문자열을 찾아서 출력한다.


D.    more : 화면단위로 출력한다.

'SW > LINUX' 카테고리의 다른 글

GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05
리눅스 명령어 - USER  (0) 2017.09.05
리눅스 명령어 - FILE&DIRECTORY  (0) 2017.09.05
리눅스 명령어 기초  (0) 2017.09.05

리눅스 명령어 - USER

USER



A.    users : 현재 시스템에 로긴 사용자 계정 조회


B.     id : 계정정보 출력


C.    finger (사용자이름) : 사용자의 정보를 구함


D.    passwd (사용자이름) : 사용자의 암호를 지정하고 변경함


E.     useradd (사용자이름) : 사용자를 추가한다. (adduser 같다)


F.     userdel (사용자이름) : 사용자의 계정을 삭제한다.

'SW > LINUX' 카테고리의 다른 글

GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05
리눅스 명령어 - INFO  (0) 2017.09.05
리눅스 명령어 - FILE&DIRECTORY  (0) 2017.09.05
리눅스 명령어 기초  (0) 2017.09.05

리눅스 명령어 - FILE&DIRECTORY

Directory & File



A.    ls : 현재 디렉토리에 있는 파일 목록들을 출력

                        i.         -l : 자세히 보기


B.     pwd : 현재 위치한 디렉토리의 경로를 알려줌


C.    du (파일명) : 파일의 크기를 구한다.


D.    df : 디스크 공간과 사용량을 구한다.


E.     tree : 디렉토리의 파일 구조를 출력


F.     touch (파일명) : 새로운 파일을 생성한다. 기존에 있던 파일이라면 갱신시간을 수정


G.   head (파일명) : 텍스트문서의 앞부분을 보여준다

                        i.         -n : 보여줄 라인수를 지정


H.    tail (파일명) : 텍스트문서의 끝부분을 보여준다

                        i.         -n : 보여줄 라인수를 지정


I.       mkdir (디렉토리 ) : 디렉토리를 생성함 (성공시 0, 실패시 -1 리턴)


J.     rmdir (디렉토리 ) : 디렉토리를 지움 (성공시 0 실패시 -1 리턴)


K.     opendir (디렉토리 ) : 디렉토리를 연다 (성공시 해당 디렉토리의 포인터, 실패시 null 리턴)


L.     readdir (디렉토리 포인터) : 포인터가 가리키는 디렉토리 스트림의 항목을 읽음 (성공시 디렉토리의 정보를 담은 struct dirent, 실패시 null 리턴)


M.   close (디렉토리 포인터) : 디렉토리 스트림을 닫음


N.    cd (이동할 디렉토리 경로명) : 입력한 디렉토리로 이동 (chdir명령어와 같다)


O.   rm (파일명) : 입력한 파일을 삭제함

                        i.         -r : 디렉토리를 삭제할 사용

                       ii.         -f : 강제삭제


P.     cp (복사할 파일 대상파일) 파일을 복사한다.


Q.   file (파일명) : 특정 파일의 종류를 알려줌


R.     gzip/gunzip (파일명) : 파일의 압축과 해제


S.     tar : 두개 이상의 파일을 하나의 파일로 결합

                        i.         -x : 묶음을 해제

                       ii.         -c : 파일을 묶음

                      iii.         -v : 묶음/해제 과정을 화면에 표시

                      iv.         -z : gunzip 사용

                       v.         -f : 파일 이름을 지정


T.      chmod (권한 파일명) : 입력한 파일의 접근권한을 변경한다.


U.    chown (사용자이름 파일명) : 파일의 소유권을 변경함


V.    umask : 새로 만들어지는 파일의 default 권한을 지정한다.

'SW > LINUX' 카테고리의 다른 글

GCC compiler (내부 매크로, Makefile)  (0) 2017.09.05
리눅스 명령어 - PROCESS  (0) 2017.09.05
리눅스 명령어 - INFO  (0) 2017.09.05
리눅스 명령어 - USER  (0) 2017.09.05
리눅스 명령어 기초  (0) 2017.09.05

'SW/LINUX'에 해당되는 글 11건

1 2 →