프로그래밍/study 13

Stack / Queue

꽉 차서 더 이상 자료를 넣을 수 없는 경우(put,push 할 수 없는 경우)를 오버플로우(Overflow), 비어 있어 자료를 꺼낼 수 없는 경우(get,pop 할 수 없는 경우)를 언더플로우(Underflow)라고 한다. Stack 스택(Stack)은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)로 되어 있다. 자료를 넣는 것을 '밀어넣는다' 하여 푸시(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 하는데, 이때 꺼내지는 자료는 가장 최근에 보관한 자료부터 나오게 된다. Queue 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조(LIFO - Last In First Out)으로 되어 있다. 자료를 넣는 것을 ..

Array / List

Array 인덱스(Index)를 통해 데이터에 접근하는 것이 특징. 데이터 접근이 용이하다(Index로 바로 접근) 크기가 고정되어 있기때문에 데이터 추가/삭제가 어렵다. 빈 엘리먼트가 허용된다. 중복 엘리먼트가 허용된다. List 순서(Sequence)가 있는 엘리먼트의 모임. 열거(Enumerate)하여 값을 찾아 데이터 접근이 불편하다. 크기가 고정되어 있지 않기때문에 데이터 추가/삭제가 용이하다. 빈 엘리먼트는 허용하지 않는다(값에 Null을 넣을수는 있음). 중복 엘리먼트는 허용한다. ArrayList 자바에서 제공하는 Array와 List의 장점을 모두 가진 자료구조. 인덱스를 사용하여 데이터에 접근이 가능한 Array의 장점. add, get API를 통해 자료의 추가 삭제가 가능한 List..

HTTP

HTTP(HyperText Transfer Protocol, 문화어: 초본문전송규약, 하이퍼본문전송규약)는 WWW 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. TCP와 UDP를 사용하며, 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이 각각 발표되었다. HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다. HTTP를 통해 전달되는 자료는 ..

프로그램, 프로세스, 스레드

프로그램 - 사용자가 원하는 일을 처리할 수 있도록 프로그래밍 언어를 사용하여 올바른 수행절차를 표현해 놓은 명령어들의 집합 프로세스 : - 간단하게 말하면 '실행 중인 프로그램' - 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 됨 - 프로세스는 데이터와 메모리등의 자원과 쓰레드로 구성 스레드: - 쓰레드란 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것을 말한다.

[OS]동기화

용어정리 상호배제: 동시에 접근 하지 않는것 임계영역: 두 개 이상의 스레드에 의해서 공유되는 메모리 공간에 접근하는 코드영역 스레드 동기화 기법 뮤텍스: lock을 가지고 있을 경우에만 공유 데이터에 접근 가능하게 하는 락킹 매커니즘 (갯수가 1인 세마포어) 세마포어: 세마포어는 동시에 리소스에 접근할 수 있는 '허용 가능한 Counter의 갯수'를 가지고 있는 매커니즘 모니터: Mutex(Lock)와 Condition Variables(Queue라고도 함)을 가지고 있는 동기화 매커니즘 wait, notify 등은 컨디션 베리어블 역할 자바에서 상호배제를 해결하기 위한 구현체로 싱크로나이즈드 키워드 http://www.jpstory.net/2015/03/mutex-semaphore-monitor/

[OS]Busy-Waiting

B스레드의 작업을 마칠 때 까지 기다려야 하는 A스레드가 있다. A는 B가 끝 날 때까지 아무 일도 하지 않고 기다리는데 (실제로는 아무일도 하지 않기보단 접근이 가능한지 무한 체크한다.) 이를 바쁜 대기라 한다. 뮤텍스나 세마포어 등을 이용하기엔 오버헤드가 큰 상황에서 간단히 사용할 수 있다. 스핀락은 임계구역에 진입이 불가능할 때 진입이 가능할 때 까지 루프를 돌면서 재시도 하는 방식으로 구현된 락으로 바쁜 대기의 한 종류 바쁜대기를 하지 않고 스레드를 멈춘다음 접근이 가능할 때 깨우는 Signal 방식이있다.