본문 바로가기

전체 글56

데이터베이스 시스템 개요 목표 1.데이터베이스 시스템에 대해 알아본다.2.파일시스템과 비교하여 DBMS의 장점을 알아본다.3.DBMS의 발전 과정을 알아본다. 4.DBMS 언어에 대해 알아본다. 데이터베이스 시스템 개요 데이터베이스 스키마란 전체적인 데이터베이스 구조를 뜻하며 자주 변경되지 않는다. 데이터베이스의 모든 상태를 미리 정의하며 내포(intension)이라고 부른다.반면 데이터베이스 상태란 특정 시점의 데이터베이스 내용을 뜻하며 시간에 다라 달라진다. 외연(extension)이라고 부른다. 시스템 카탈로그는 저장된 데이터베이스 스키마 정보를 유지하는 역할을 한다. DBMS란 사용자가 새로운 데이터베이스를 생성하고 데이터베이스 구조를 명시하고 데이터를 효율적으로 질의하고 수정할 수 있으며, 시스템의 고장이나 권한이 없는.. 2018. 10. 27.
메모리 관리 전략(1) 목표1.메모리 관리 전략의 배경에 대해 알아본다.2.스와핑에 대해 이해한다.3.연속 메모리 할당 기법에 대해 이해한다.4.내부 단편화와 외부 단편화에 대해서 이해한다. 메모리 관리 전략그동안 CPU가 여러 프로세스에 의해 어떻게 공유되고 스케쥴링 알고리즘이 어떻게 동작하는지 살펴보았다. 그러나 성능을 향상시키기 위해서는 주 메모리에 여러개의 프로세스가 올라와 있어야 한다. 즉, 여러 프로세스들이 동시에 주 메모리를 공유해야 하는 상황이다. 메모리 관리 알고리즘은 단순 하드웨어 방식, 페이징, 세그먼트 등 다양하며 장, 단점이 있다. 메모리 관리 전략의 배경에 대해서는 여러가지가 있지만 논리 대 물리주소 공간은 짚고 넘어가자. 논리 대 물리주소 공간CPU가 생성하는 주소를 논리 주소, 메모리가 취급하는 주.. 2018. 10. 27.
프로세스 동기화(뮤텍스,세마포어,임계구역) 목표1.프로세스 동기화에 대해 간략히 이해한다.2.Critical Section(임계구역)을 이해한다. 2.세마포어에 대해서 이해한다.1.뮤텍스에 대해서 이해한다.3.뮤텍스와 세마포어의 차이에 대해 이해한다. 프로세스 동기화 프로세스는 서로 메세지를 보내고 프로세스 내부에서는 쓰레드끼리 자원을 공유하면서 '동기화'에 대한 문제가 항상 발생할 수 있다. 즉 공유된 자원에 여러 프로세스, 여러 쓰레드가 동시에 접근하면서 문제가 발생하게 된다. 유저 동기화 방법과 커널 동기화 방법이 있는데 유저 동기화는 Critical Section(임계영역) , 커널 동기화는 Mutex , Semaphore 가 있다. Critical Section(임계구역)OS에서 임계구역은 상당히 중요한 부분이다. 멀티 프로세스 환경에서.. 2018. 10. 26.
DeadLock(교착상태) 목표1.데드락의 개념에 대해서 이해한다.2.데드락의 발생 조건에 대해서 이해한다. 3.데드락을 예방할 수 있는 방법에 대해서 이해한다.4.데드락이 회피 할 수 있는 방법에 대해서 이해한다.5.데드락을 탐지 및 치료(?) 할 수 있는 방법에 대해서 이해한다. DeadLock(교착상태)데드락이란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있는 상태이기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다. 예를 들어 사다리가 있고 두 사람이 각각 위 아래쪽에 위치해있다고 가정해보자. 각자 반대방향으로 움직이려고 한다면, 두 사람은 서로 상대방이 사다리를 비켜줄 때 까지 하염없이 사다리에서 기다리는것 처럼 다중 프로그래밍에서 교착상태는 흔히 발생할 수 있으며 데드락에 대한 해결방법은 아직 없.. 2018. 10. 25.
CPU 스케쥴링 알고리즘 목표1.스케쥴링의 배경에 대해 이해한다.2.스케쥴링이 일어나는 시점에 대해 이해한다.3.스케쥴링 알고리즘의 평가기준에 대해서 이해한다.4.스케쥴링 알고리즘의 종류와 장,단점을 예시와 함께 이해한다. 스케쥴링이란?프로세스와 쓰레드 포스팅에서 배운거처럼, 한정된 자원으로 최대한 성능을 이끌어내기 위해서는 CPU를 적절하고 효율적으로 사용해야 한다. 따라서 OS는 실행 대기중인 프로세스들에게 자원 배정을 적절히 하여 시스템의 성능을 끌어올릴 수 있다.정책에 따라서 1.CPU이용률을 최대화,2.오버헤드를 최소화,3.모든 프로세스가 공평하게 분배하는 방식이 있다. 선점 스케쥴링(Preemptive Scheduling)OS가 나서서 CPU사용권을 '선점'하고, 특정 요건에 따라 각 프로세스의 요청이 있을 때 프로세.. 2018. 10. 24.
프로세스와 쓰레드의 차이점 목표1.프로세스와 쓰레드의 차이점에 대해 알아본다. 프로세스와 쓰레드의 차이점 위 메모리 구조는 프로세스와 쓰레드의 차이점을 보여준다. 1.프로세스는 새로 생성될 때 마다 새로운 PCB를 생성하여 자칫 overhead가 발생할 위험이 있지만, 쓰레드는 프로세스 내에서 생성되고, 편에서 살펴봤듯이 프로세스 자원을 공유하면서 통신도 가능하므로 경제적이다. 2.프로세스와 쓰레드의 차이점에 대한 질문은 결국 OS가 멀티 프로세스 방식과 멀티 쓰레드로 진행할 경우 자원할당을 어떻게 하고, 어떤 상황일 때 얼마나 더 효과적이겠는가에 대한 질문이기도 하다. 3.멀티 프로세스 방식에 비해 멀티 쓰레드 방식은 프로세스를 생성하여 자원을 할당하는 낭비를 줄일 수 있고, IPC같은 별도의 통신장치를 쓰지 않아도 되며, 스케.. 2018. 10. 24.
쓰레드 목표1.쓰레드에 대해서 이해한다.2.쓰레드의 이점과 단점에 대해서 알아본다.3.다중 쓰레드와 단일 쓰레드의 차이에 대해서 이해한다.4.쓰레드 용법에 대해서 알아본다.5.쓰레드의 상태변환에 대해서 파악한다. 쓰레드란프로세스가 실행중인 프로그램이라면, 쓰레드는 프로세스를 이루는 CPU의 작업 단위 중 하나이다.(경량화 프로세스라고도 한다.light Process)따라서 프로세스는 하나 이상의 쓰레드(작업 쓰레드)를 가지며, 쓰레드는 쓰레드ID(식별자), 프로그램 카운터, 레지스터 집합, 스택으로 구성된다. 쓰레드를 사용함으로써 얻는 이점1.사용자 응답성 증가:응용 프로그램의 일부 기능이 서버 통신이나 다소 긴 처리를 요구하더라도, 쓰레드로 구현함으로써 다른 기능들은 block되지 않고 계속 실행 가능하다.2.. 2018. 10. 24.
프로세스(Process) 목표 1.프로세스의 정의2.프로세스의 구성3.메모리 상의 프로세스의 형태4.프로세스 상태 변화5.리눅스에서 프로세스 생성과 종료6.프로세스 간 통신 프로세스란?프로그램의 실행 instace를 말한다.(비공식적으론 실행중인 프로그램이다) 프로그램은 보조기억장치나 메모리에서 실행을 기다리고 있는 데이터와 명령어 등의 모음이라면, 프로그램이 실행되면 비로소 프로세스가 되는 것이다. 프로세스는 그 자체로 다른 프로세스를 실행시킬 수 있는 좋은 도구이다. 대부분의 환경에서 자바 프로그램은 JVM에서 구동시킬 수 있는데, JVM 또한 자바 코드를 바이트 코드로 컴파일하는 기능을 수행하는 컴파일러이기 때문이다. 프로세스의 구성 프로세스는 운영체제에서 Process Controll Block(PCB)로 표현된다. 다음.. 2018. 10. 24.
9장 그래프 *그래프의 첫 단원에는 대개 쾨니히스베르크의 다리라고 해서, 7개의 다리를 한 번씩만 건너서 모든 섬을 찍는 법은? 같은 인트로로 시작한다.*그러나 수학자 오일러는 그런 방법이 없다고 단언했다. 왜 그랬을까?*한붓그리기는 연결되어 있는 선이 홀수개인 점이 아예 없거나, 두개만 있는 도형에서만 가능하다.*그래프란 정점의 집합을 V, 간선의 집합을 E, 그리고 그래프를 G라고 했을때 G = (V,E)이다.*간선으로 연결된 두 점을 인접(adjacent)하다고 표현한다.*사이클(cycle)이란 어느 한 정점을 두 번 이상 거치도록 되어 있는 경우이다.*정점 사이의 인접 관계를 나타내는 방법은 인접행렬과 인접리스트, 두 가지 방법이 있다.*인접행렬은 정점의 개수X정점의 개수의 행렬을 만들어 두 정점이 인접한 경.. 2018. 10. 22.
8장 해쉬 *해쉬(hash)의 사전적 의미는 "잘게 자른 고기를 양파나 감자와 같은 다른 재료와 함께 튀겨 한 덩어리로 만든 요리", 여기서는 데이터를 입력받으면 해시함수를 통해 다른 형태로 데이터를 얻는다 정도 생각하자.*데이터를 담을 테이블을 미리 크게 확보한 후, 입력받은 데이터를 해시하여 테이블 내의 주소를 계산하고 이 주소에 데이터를 담는 것, 이것이 해시 테이블의 기본 개념이다. 여러 해시함수를 살펴보자.1.나눗셈법-해시함수 중에서도 가장 간단한 방법이다. 입력값을 테이블 크기로 나누고, 그 나머지를 인덱스로 활용하는 방법이다. -2의 제곱수 사이에 있는 소수를 테이블 크기로 활용했을때 가장 성능이 좋다.예제를 보자. typedef struct tagNode{ KeyType Key; ValueType V.. 2018. 10. 21.
7장 우선순위 큐와 힙 *우선순위 큐는 새 요소에 우선순위를 부여해서 큐에 삽입하고 가장 높은 우선순위를 갖는 요소부터 빠져나오도록 한다. *힙이란 힙 순서 속성(Heap Order Property)을 만족하는 완전 이진 트리이다. ->완전 이진 트리란 가장 높은 높이의 원소들을 제외하고 왼,오른 자식들이 모두 채워져 있는 트리를 말한다. -힙 순서 속성이란, 모든 노드는 부모 노드보다 큰 값을 가진다. (루트는 예외) *힙의 루트노드는 최소값 노드라는걸 항상 보장한다. Heap의 삽입 연산의 순서를 알아보자. 1.힙의 최고 깊이의 가장 우측에 새 노드를 우선 삽입한다.(완전이진트리 유지) 2.삽입한 노드가 부모노드보다 작아질 때 까지 부모노드와 계속 교환해나간다. void HEAP_Inser(Heap *heap , Eleme.. 2018. 10. 21.
객체지향 프로그래밍의 특징 목표 객체지향의 4가지 특징을 이해한다. 1.Abstraction(추상화) 공통된 속성이나 행위를 추출하는 작업. 사물들의 공통된 특징, 즉 추상적 특징을 파악해 인식의 대상으로 삼는 행위이다. 구체적인 사물들의 공통적인 특징을 파악해서 하나의 개념으로 다루게 된다. 각 개체의 구체적인 개념이 아닌 추상적인 개념에 접근해야 향후 유연한 설계가 가능하다. ex) 아우디, BMW, 벤츠는 모두 자동차라를 공통적인 특징을 지닌다. 2.Encapsulation(캡슐화) 캡슐화는 낮은 결합도를 유지할 수 있도록 설계하는 객체지향의 특징이다. *응집도(Cohesion):모듈 안의 요소들이 얼마나 밀집하게 묶여있는지, 관련이 있는지를 말한다. *결합도(Coupling):모듈이 다른 모듈애 얼마나 의존적인지를 나타낸다.. 2018. 10. 19.
6장 탐색 순차탐색 *순차탐색은 정렬되지 않은 데이터 집합 속에서 원하는 데이터를 찾거나, 구현이 간단해서 데이터의 크기가 적은 곳에서 자주 쓰인다. *자기구성순차탐색이란 자주 사용되는 항목을 데이터의 앞 쪽에 배치하여 탐색 효율을 높인다. -전진 이동법: 탐색이 되면 가장 앞에(헤드에) 위치시킨다. -전위법:탐색된 항목을 바로 이전 항목과 교환한다. ->점진적으로 자주 탐색되는 항목은 앞쪽으로 모이게 된다. -계수법:원소별 탐색 횟수를 저장해놓고, 탐색 횟수별로 원소의 위치를 재구성하는 방식이다. 이진탐색 *탐색 범위를 1/2씩 줄여나가는 방식이다. *단, 미리 정렬되어 있어야한다. 탐색과정 1.데이터 집합의 중앙에 있는 요소를 고른다. 2.중앙 요소의 값과 찾고자 하는 값을 비교한다. 3.목표값이 더 크면 오른.. 2018. 10. 18.
객체지향 프로그래밍의 설계원칙 목적객체지향 프로그래밍의 5대원칙 'SOLID'를 이해한다. *nextree의 객체지향에 관한 포스팅을 거의 필사하듯 따라서 쓰고 추가적인 기술적 설명을 덧붙였습니다. http://www.nextree.co.kr/p6960/ 1.Single Responsbility Principle, SRP (단일책임원칙)클래스는 단 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다. 어떤 변화에 의해 클래스를 변경해야 하는 이유는 단 하나여야 한다. SRP를 적용하여 리팩토링을 하면 책임 영역이 확실해지기 때문에 한 책임의 변경에서 다른 책임의 변경으로 연쇄작용에서 자유로울 수 있다. 또한 책임을 적절히 분배함으로써 코드의 가독성 향상, 유지보수 용이하나는 장점도.. 2018. 10. 17.
객체지향 프로그래밍의 정의와 탄생배경 목적:객체지향 프로그래밍의 정의에 대해 이해한다.객체지향 프로그래밍의 탄생한 배경에 대해 이해한다. 정의객체지향 프로그래밍(Object-Oriented Programming , OOP)는 컴퓨터 프로그래밍의 패러다임의 하나이다. 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러개의 독립된 단위, 즉 '객체'들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 멧지를 주고받고 데이터를 처리할 수 있다.객체지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프웨어 개발에 많이 사용된다. 또한 프로그래밍을 더 배우기 쉽게 하고 소프트웨어 개발과 보수를 간편하게 하며, 보다 직관적인 코드 분석을 가능하게 하는 장점을 갖고 있다. 그러나 지나친 프로그램.. 2018. 10. 17.
아이패드를 사다. 거의 일년전부터 벼르던 아이패드를 최근에, 최근도 아니지. 6개월은 넘었던것 같다. 애플펜슬을 쓸 수 있는 아이패드 6세대가 출시되면서 이번에 구매하게 되었다.Y가 내 6새대로 그림을 그리기 전까지는 사실 프로3세대로 환승할 계획이었다. 그렇다. 무려 2세대도 아니고 출시 예정인 3세대를... Y는 꽤나 집중해서 평소 그려보고 싶어했던 강아지들이나 짧은 만화 따위를 그려냈고, 나는 그 완성작을 보면서 프로로 갈아타려는 마음이 정말이지 싹 사라지고 말았다. '그래 프로는 이런 애들을 위한 것들이지, 쓴 글씨를 제대로 알아보지도 못하면서 프로는 무슨...' 사실 당연히 그림을 그릴려고 산 것은 아니고, 메모용과 뷰어용(이북과 pdf와 유튜브), 그리고는 뭐 기껏해봐야 서핑이었겠지. 아무튼 학습용으로 산 거였.. 2018. 10. 16.
5장 정렬 *버블정렬은 한 번 수행할 때 마다 가장 큰 수가 가장 오른쪽으로 차곡차곡 쌓인다.(오름차순으로 정렬시) *버블정렬의 일반화식은 n(n-1)/2 이므로, O(n^2) 이다.void BubbleSort (int DataSet[] , int Length){ int i = 0; int j = 0; int temp = 0; for ( i = 0 ; i DataSet[j+1]) { temp = DataSet[j+1]; DataSet[j+1] = DataSet[j]; DataSet[j] = temp; } } } } *삽입정렬과 버블정렬의 성능은 동일하다. 다만 삽입정렬.. 2018. 10. 15.
4장 트리 *완전이진트리란 차수가 2개이며 왼쪽에서부터 차곡차곡 자식을 가지고 있는 트리를 말한다.*전위순회:루트-왼자식-오른자식 순*중위순회:왼자식-루트-오른자식 순*후위순회:왼자식-오른자식-루트 순*후위순회를 응용하여 트리를 삭제할 수 있다.*분리집합이란 교집합이 존재하지 않는 두 집합을 말한다. 목적은 해당 원소가 그 집합에 속해있는지만 알아보는 것이다. 예를 들어 서점 판매관리 프로그램을 예를 들어보면 기본 자료구조가 가격과 ISBN을 가지고 있다고 가정해보자. 이 때 한시적으로 할인 행사를 진행하려고 하는데 할인행사를 할 때마다 가격을 내리고, 다시 원래 가격으로 돌려놓기가 꽤나 부담스럽다. 이 때 자료구조에 영향을 미치지 않고, 할인행사 집합과, 일반판매 집합을 분리할 수 있다. 따라서 할인행사 집합에 .. 2018. 10. 15.