분류 전체보기 290

경쟁상태, 교착상태, 라이브락 (Race Condition, Deadlock, Livelock)

경쟁상태 (Race Condition)둘 이상의 입력이나 조작이 동시에 일어나 의도하지 않은 결과를 가져오는 경우를 말합니다.- 파일 또는 변수와 같은 공유 자원을 접근하는 하나 또는 그 이상의 프로세스들의 다중 접근이 제대로 제어되지 않은 것을 말합니다.- 프로세스들 끼리 하나의 자원을 갖기 위해 싸우는 것, 하나의 자원을 동시에 요청 라이브락 (Livelock)한 프로세스가 이미 자원을 점유한 상태에서 다른 프로세스가 그 자원을 사용하기 위해 무한정 대기상태에 빠지는 것을 라이브락이라 합니다.- 지극히 정상적인 동작이지만 분명 문제가 있는 동작입니다. 교착상태 (DeadLock)프로세스들이 더 이상 진행을 못하고 영구적으로 블록되어 있는 상태로, 시스템 자원에 대한 경쟁 도중에 발생할 수도 있고 프로..

Basics/OS 2014.11.11

세마포어와 뮤텍스 - 동기화 기법

운영체제와 프로그래밍 언어 수준에서 병행성을 제공하는 기법으로, 세마포어와 뮤텍스가 있습니다.- 동기화 기법이라고 볼 수 있습니다.- 세마포어와 뮤텍스 이외에도 모니터, 이벤트 플래그, 메시지, 스핀락 등이 있지만 나중에 포스팅 할 수 있도록 하겠습니다. 동기화시스템의 자원은 한정적인데 이 한정적인 자원에 여러 스레드가 동시에 접근해서 사용하려하면 문제가 발생할 수도 있습니다. 이런 문제를 방지하기 위해 스레드들에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정해주는 기법입니다. 임계구역 (Critical Section)공유자원에 접근하는 프로세스 내부의 코드 영역으로 어떤 한 프로세스가 이 영역을 수행중일 때 다른 프로세스가 같은 영역을 수행한다면 문제가 발생할 수 있습니다. 상호배제 (Mutua..

Basics/OS 2014.11.11

배열과 연결리스트

배열과 연결리스트 배열은 - 스택 영역에 자료를 저장하고 컴파일시 공간을 확보하게 됩니다. - 자료를 순차적으로 저장하고 인덱스의 번호로 접근이 가능합니다. + 자료의 접근과 저장이 빠릅니다. - 한번 확보한 배열의 크기를 변경하기가 어려워 메모리가 낭비되고 비효율적일 수 있습니다. - 배열의 내부 요소를 정렬하고자 할 때 연결리스트에 비해 빠릅니다. + 인덱스 번호로 바로 접근해서 요소를 찾아내고 정렬하기 때문입니다. - 내부 데이터의 탐색이나 정렬을 자주한다면 배열을 사용하는 편이 좋습니다. + 접근하기가 연결리스트에 비해 빠르기 때문 (인덱스) 연결리스트는 - 힙 영역에 자료를 저장하고 필요할 때마다 메모리를 확보해 사용합니다. - 매번 데이터를 저장할 때마다 데이터를 위한 메모리를 확보해야 하므로..

배열 (Array)

배열(Array)의 개념 배열은 여러개의 동일한 데이터 타입의 데이터를 한번에 만들 때 사용됩니다. 만일, 6개의 정수를 저장할 공간이 필요한 경우, 배열이 없다면 int a1, a2, a3, a4, a5, a6; 으로 선언해야하지만, 배열이 지원된다면 간단하게 int a[6]; 으로 선언될 수 있습니다. 배열은 인덱스 번호를 기준으로 작업을 할 수 있기 때문에 효율적으로 루프를 설정하여 여러 상황에서 간단한 코드를 이용하여 결과를 나타낼 수 있습니다. - C언어에서는 배열의 인덱스는 0부터 시작 - a[6] = a[0] ~ a[5] 까지 6개 2차원 배열 2차원 배열은 1차원 배열이 여러개 모여서 이루어집니다. 2차원 배열에서 가로줄은 행, 세로줄을 열이라고 합니다. int a[3][4]; a[0][0..

연결 리스트 (Linked List)

연결리스트(Linked List)란?동적으로 크기가 변할 수 있고 삭제나 삽입시에 데이터를 이동할 필요가 없는 자료구조가 연결리스트입니다. - 데이터와 링크로 구성되어있고 링크가 데이터들을 연결하는 역할을 합니다. - 요런 형태입니다. 연결리스트는 노드로 구성되어있는데, - 노드 : 데이터 필드, 링크 필드로 구성 - 데이터 필드 : 실제 저장할 데이터가 있는 공간 - 링크 필드 : 다른 노드를 가리키는 포인터를 저장 배열의 경우 중간에 데이터를 삽입하려면 삽입하려는 위치에 있는 데이터와 그 이후에 있는 데이터들을 모두 한 칸씩 뒤로 움직여야하는데, 연결리스트는 그럴 필요가 없습니다. - 삽입하려는 위치의 링크만 변경해 주면 됩니다. 단순 연결 리스트 - 위의 연결 리스트가 단순 연결 리스트 - 데이터 ..

OSI 7계층

OSI 7계층의 모델 개요와 목적1977년 국제 표준화 기구(ISO, International Standards Organization) 위원회에서 제정한 표준 네트워크 구조를 위한 개방형 시스템 간 상호접속(OSI, Open System Interconnection)에 관한 규정입니다.컴퓨터 네트워크 프로토콜 디자인과 통신을 계층을 나누어 규칙으로 설명한 것으로, 컴퓨터와 컴퓨터 사이를 연결하고 서로 다른 컴퓨터나 정보통신 시스템 간의 연결 및 원활한 정보 교환을 위한 표준화된 절차입니다.- 6년 이상 개발되어 1983년에 완성된 X.200으로 알려진 국제적 네트워크 표준 OSI 7계층 프로토콜의 구성7개의 계층으로 구성됩니다.7 - 응용 계층6 - 표현 계층5 - 세션 계층4 - 전송 계층3 - 네트..

Basics/Network 2014.11.10

객체 지향 프로그래밍 (Object-Oriented Programming)

객체 지향 프로그래밍 (Object-Oriented Programming) 일종의 프로그래밍 방법론으로 프로그램을 구성하는 함수와 변수를 묶어서 객체를 만들고 객체 단위로 프로그래밍 하기 위한 방법입니다. 객체 지향 프로그래밍의 장점 - 모듈간의 독립성 증대 + 하나의 프로그램은 여러가지 기능으로 구성 -> 각각의 기능들은 모듈로 구현 + 독립성이 높을 수록 유지보수, 개발이 쉬워짐 + 객체 지향 프로그래밍에서는 모듈화의 단위가 객체 단위가 된다 + 독립적인 기능을 지원하는 객체를 구현하고 객체들을 모아서 프로그램을 개발하는 것이 객체 지향 프로그래밍의 방식 + 객체마다 고유의 기능이 정해져 있기 때문에 특정 객체에서 문제가 발생하면 그 객체만 수정하면 된다. + 객체의 구현이 변경되더라도 객체의 인터페..

Basics/Programming 2014.11.10

C++ 가상 함수 (virtual) - 가상 함수의 원리

가상함수의 원리가상 함수는 실행 시간에 호출될 함수를 결정합니다.- 그럼 어떻게 실행 시간에 객체의 클래스형에 따라 재정의된 가상 함수를 찾아 호출할 수 있는 것일까요? C++는 가상 함수를 처리하기 위해 가상 함수를 갖는 클래스마다 가상 함수 테이블을 생성합니다.- 또한, 가상 함수를 갖는 클래스의 객체마다 가상 함수 테이블 포인터라는 숨겨진 멤버 변수를 생성합니다.- C++ 컴파일러가 가상 함수를 갖는 클래스에 대해 가상 함수 테이블을 생성하고 가상 함수 테이블을 갖는 클래스의 객체를 생성하면 객체의 멤버 변수를 할당하기 전에 먼저 가상 함수 테이블의 주소를 저장하는 가상 함수 테이블 포인터가 할당됩니다.- 바로 이 가상 함수 테이블 포인터와 가상 함수 테이블이 가상 함수를 호출할 때 이용되는 것입니다.

C++ 가상 함수 (virtual) - 가상 소멸자

가상 소멸자클래스에 가상 함수를 정의할 때 주의할 점은 소멸자도 가상함수로 만들어야 한다는 점입니다.동적으로 생성한 파생 클래스 객체를 기본 클래스 포인터로 가리키고 있을 때 동적으로 생성한 객체를 해제하려면 기본 클래스 포인터로부터 delete 해야 합니다.  delete pShape;는 pShape가 Shape 포인터이므로 Shape 클래스의 소멸자를 호출합니다.- delete pShape;는 항상 기본 클래스인 Shape 클래스의 소멸자만 호출됩니다.- pShape가 실제로는 Rectangle 클래스 객체의 주소를 저장하므로 pShape로 delete할 때 Rectangle의 소멸자가 호출되어야 합니다.- 이를 위해 Shape 클래스의 소멸자를 가상함수로 선언하면 됩니다.동적으로 생성한 파생 클래스..

C++ 가상 함수 (virtual) - 동적 바인딩

동적 바인딩기본 클래스의 포인터나 레퍼런스로 가상 함수를 호출하면 기본 클래스의 포인터나 레퍼런스가 어떤 클래스의 객체를 가리키는가에 따라 호출될 함수가 결정됩니다,- 실행 시간에 호출될 함수를 결정하는 것을 동적 바인딩(Dynamic Binding)이라고 합니다.- 반면, 컴파일 시간에 호출될 함수를 미리 결정하는 것을 정적 바인딩(Static Binding)이라고 합니다.  특징정적 바인딩동적 바인딩바인딩 시기컴파일 시간실행 시간구분일반 함수가상 함수장점동적 바인딩에 비해 처리속도가 빠르다프로그램의 융통성이 크다단점프로그램의 융통성이 작다정적 바인딩에 비해 처리속도가 늦다 가상함수를 제외한 모든 함수는 정적 바인딩으로 처리됩니다.- 정적 바인딩은 컴파일 시간에 호출될 함수를 미리 정해두는 방법입니다...