서론현대의 컴퓨터 시스템의 주된 관심사 중 한 가지는 시스템내의 자원들을 얼마나 효율적으로 사용하는가 하는 것이다. 이러한 목적을 달성하기 위하여 대부분의 시스템에서는 동시에 수행되고 있는 프로세스들이 시스템내의 자원들을 동적으로 공유하도록 하는데, 이러한 상황에서는 불가피하게 자원의 경쟁이 생긴다. 필자는 이와 관련된 데드록(Deadlock) 현상과 해결방법에 대해 알아보도록 하고자 한다.본론1. 데드록(Deadlock)의 정의데드록(Deadlock)이란 프로세스들의 집합이 더 이상 진행을 하지 못하고 영구적으로 블록되어 있는 상태를 의미한다. 즉, 프로세스가 전혀 발생할 가능성이 없는 사건을 기다리는 경우 그 프로세스는 데드록 현상에 놓여 있다고 한다. 예를 들면 프로세스 A와B는 원하는 작업을 처리하기 위하여 자원1과 자원2를 모두 필요로 한다.
1. DFS/BFS 알고리즘에 대해서 조사하시오.서론컴퓨터의 발전으로 인해 정치, 공학, 과학, 문화 등 많은 분야에서 데이터들이 증가하고 있다. 특히 트위터, 페이스북, 인스타그램, 카카오톡과 같은 소셜 네트워크 서비스의 대중화로 인해 이들이 쏟아내는 데이터는 급격히 증가하고 있다. 기업들은 이러한 사회 연결 망 분석을 통해 가치가 있는 정보를 추출하여 추천 시스템, 마케팅, 소비 패턴 파악 등 다양한 비즈니스 전략에 활용하고 있다. 이때, 일반적으로 사회 연결망은 그래프로 표현되며 이것은 현재 사회의 모든 정보들이 그래프로 표현된다는 것이기도 하다. 본문에서는 오늘날의 모든 것을 표현할 수 있는 그래프와 그래프를 탐색하는 알고리즘에 대해 살펴볼 것이다.본론1. 그래프그래프는 연결되어 있는 객체간의 관계를 표현할 수 있는 자료구조로 정점과 간선들의 집합으로 구성되는데 G=(V, E)로 표시 한다. V(G)는 그래프G의 정점들의 집합을, E(G)는 그래프 G의 간선들의 집합을 의미한다. 또한 정점의 차수는 그 정점에 부속된 간선들의 수이다. 그래프는 위상 순서, 최단 경로, 작업 네트워크 등에 이용된다.2. 그래프 표현 방법2.1 인접 행렬(Adjacency Matrix)각 정점들 간의 연결을 행렬로 표현한 것이다. 인접 행렬 M은 n x n정방행렬로서 n은 그래프 내의 정점 수이다. 행렬의 (i, j)원소 Aij가 1이면 정점 Vi와 Vj가 인접해 있는 것이고, Aij가 0이면 정점 Vi와 Vj는 인접하지 않은 것이다.[그림1] 그래프를 인접 행렬로 표현한 모습2.1.1 인접 행렬의 문제점인접 행렬로는 n(n-1)개의 간선을 표현 할 수 있다. 그러나 실제로 그래프 내의 간선 수는 이보다 훨씬 적기 때문에 대부분의 행렬 원소는 0의 값을 가진다. 따라서 완전 그래프처럼 간선이 많은 경우를 제외하고는 상당량의 메모리장소가 낭비되는 문제가 있다. 이러한 문제를 해결하기 위해 인접리스트를 사용한다.2.2 인접 리스트(Adjacency list)각각의 정점에 대한 인접한 정점들을 연결리스트로 표현한 것이 인접 리스트이다. 인접리스트에는 n개의 연결 리스트가 존재하는데 여기서 n은 그래프 내의 정점 수 이다. 어떤 리스트 내에 정점의 노드가 들어있으면 그 정점들은 연결된 것이고, 들어있지 않으면 연결되지 않은 것이다.[그림2] 그래프를 인접 리스트로 표현한 모습2.2.1 인접 리스트의 장단점인접 리스트는 연결된 정점들만 리스트로 관리하기 때문에 인접 행렬을 사용하는 경우처럼 연결되지 않은 정점을 표현하기 위한 메모리 장소를 낭비하지 않는다는 장점이 있다. 하지만 인접 리스트는 하나의 연결을 표시하기 위해 정점 정보뿐만 아니라 링크 정보까지 사용되므로 간선의 수가 상대적으로 많은 경우 인접 행렬을 사용할 때보다 메모리 장소 낭비가 심해질 수 있다는 문제점이 있다.3. 그래프 탐색 알고리즘3.1 깊이 우선 탐색(Depth First Search)깊이 우선 탐색(DFS)은 트리나 그래프에서 한 루트로 탐색하다가 최대한 깊숙이 들어가 확인 후 다시 돌아가 다른 루트를 탐색하는 방법으로 탐색 공간에 대한 아무런 정보 없이 순서만 정해 놓고 탐색을 수행한다. 깊이 우선 탐색에서는 그래프 및 트리에서 재 탐색인 경로에 해당하는 부분과 그 경로 상에 있는 완전히 확장되지 않은 노드에 대한 정보만을 저장하면 된다. 깊이 우선 탐색 알고리즘은 인접 행렬을 이용한 재귀 호출을 사용하거나 단순한 스택 배열로 구현한다.3.1.1 깊이 제한(Depth bound)과 백트래킹(Backtracking)탐색 과정이 시작 노드에서 한 없이 깊이 진행되는 것을 막기 위해 깊이 제한을 사용한다. 깊이 제한에 도달할 때까지 목표 노드가 발견되지 않으면 하위 노드가 목표 노드에 도달할 가능성을 점검 한 후, 가능성이 없다고 판단이 되면 그 노드의 부모 노드로 되돌아간 다음 자식 노드에 대한 점검을 계속하는 탐색 방법을Backtracking이라 한다.3.1.2 스택을 이용한 깊이 우선 탐색의 절차① 트리의 시작 노드를 탐색 공간 스택에 삽입하여 탐색을 시작한다.② 탐색 공간 스택에서 노드를 제거하고, 그 노드의 자식 노드들을 탐색 공간 스택에 삽입한다.③ 이 노드가 목표 노드인 경우에는 탐색이 종료된다. 그렇지 않으면 다음으로 진행한다.④ 탐색 공간 스택의 (자식) 노드들 중에서 탐색하지 않은 노드로 탐색이 진행되며, 자식 노드가 없는 경우에는 부모 노드로 되돌아가서 탐색을 계속한다.⑤단계 ②로 진행한다.예를 들어 밑에 [그림3]을 보며 설명해 보면, 우선 도서관에서 직접 갈 수 있는 곳은 병원과 초등학교이다. 이때 갈림 길이 나오면 오른쪽 길을 택한다고 하자. 그러면 처음에 병원을 간다. 그 다음 병원에서 공원과 학교를 갈 수 있는 갈림길을 만나고 규칙에 따라 공원으로 간다. 공원에서는 더 이상 갈 수 있는 길이 없어 그 전 상태인 병원으로 Backtracking하여 병원에서 지난번에 택하지 않았던 길인 중학교 쪽으로 간다. 중학교에서도 갈림길을 만나 규칙에 따라 오른쪽 길을 택하면 목적지인 대학교에 도착하게 된다.[그림3] 깊이 우선 탐색에 의한 지도 탐색 모습[그림4] 깊이 우선 탐색 순서(1-2-4-8-5-6-3-7)3.1.3 깊이 우선 탐색의 장단점장점은 단지 현 경로상의 노드들 만을 기억하면 되므로 저장 공간의 수요가 비교적 적고, 목표 노드가 깊은 단계에 있을 경우 해를 빨리 구할 수 있다는 점이다. 하지만 얻어진 해가 최단 경로가 된다는 보장이 없다. 이는 목표에 이르는 경로가 다수인 문제에 대해 깊이 우선 탐색을 해에 다다르면 탐색을 끝내 버리므로, 이때 얻어진 해는 최적이 아닐 수 있다. 또한 목표 노드가 하나인 경우, 그 부분이 탐색 과정에서 나중에 확장된다면 목표 노드가 아주 가까이 있더라도 방대한 탐색 공간을 방문하게 된다는 단점이 있다.3.2 너비 우선 탐색(Breadth First Search)너비 우선 탐색(BFS)은 시작 정점을 방문한 후 시작 정점에 인접한 모든 정점들을 우선 방문하는 방법이다. 너비 우선 탐색 알고리즘은 시작 노드에 모든 가능한 연산자를 적용하고, 그 노드의 모든 자식 노드들에 대해 가능한 연산자를 적용하는 식으로 상태 공간 트리를 만들어낸다. 탐색은 시작 노드에서부터 왼쪽에서 오른쪽으로 균일하게 진행된다. 또한 더 이상 방문하지 않은 노드가 없을 때까지 미 방문 노드들에 대해 너비 우선 탐색을 적용한다. 너비 우선 탐색은 목표 노드가 찾아지면 목표 노드까지의 최단 경로가 찾아진다는 특성이 있으며 인접 리스트와 큐로 구현이 가능하다.3.2.1 큐를 이용한 너비 우선 탐색의 절차① 트리의 시작 노드를 탐색 공간 큐에 삽입하여 탐색을 시작한다.② 탐색 공간 큐에서 노드를 제거하고, 그 노드의 자식 노드들을 탐색 공간 큐에 삽입한다.③ 이 노드가 목표 노드인 경우에는 탐색이 종료된다. 그렇지 않으면 다음으로 진행한다.④ 탐색 공간 큐의 노드들 중에서 탐색하지 않은 노드로 탐색이 진행된다.⑤ 단계 ②로 진행한다.예를 들어 밑에 [그림5]을 보며 설명해 보자면, 우선 도서관에서 직접 갈 수 있는 곳은 병원과 초등학교이다. 이때 갈림 길이 나오면 오른쪽 길을 먼 택해 병원을 가보고, 아니므로 왼쪽 길을 택해 초등학교를 방문한다. (도서관 입장에서는 병원이 오른쪽이고 초등학교가 왼쪽이지만 지도를 보는 입장에서는 병원 왼쪽이고 초등학교가 오른쪽이므로 왼쪽에서 오른쪽으로 진행한다고 할 수 있다.)그 다음 공원과 중학교, 상가 이 순서로 방문한다. 그 다음 자식 노드인 대학교를 방문하여 목표 노드에 도달하게 된다.[그림5] 너비 우선 탐색에 의한 지도 탐색 모습[그림6] 너비 우선 탐색 순서(1-2-3-4-5-6)3.2.2 너비 우선 탐색의 장단점장점은 시작 노드에서 목표 노드까지의 최단 경로를 보장한다는 것이고 단점은 저장해야 하는 그래프 및 트리의 크기가 목표 노드의 깊이에 따라 지수적으로 증가하여 많은 저장 공간이 필요로 하게 한다. 또한 해가 존재하지 않는다면 유한 그래프의 경우네는 모든 그래프를 탐색한 후에 실패로 끝나고 무한 그래프의 경우에는 결코 해를 찾지도 못하고 끝내지도 못한다는 점이다.(참고)서적:-최윤철, ICT 융합시대의 컴퓨터 과학, 생능출판사논문:-김병조, 탐색 트리에 기반한 정보 수학 영재의 사고력 신장을 한 교수-학습 모형 개발 43쪽, 동의대학교 대학원 전산통계학과-이현진 조용연 김상욱, FlashGrap에서 너비우선탐색 알고리즘의 성능 개선 방안, 한국정보처리학회 2016년도 춘계학술발표대회저널:-이세일, 타일맵에서 A* 알고리즘을 이용한 유닛들의 길찾기 방법 제안, 韓國컴퓨터情報學會論文誌웹사이트:- Hyperlink "http://blog.eairship.kr/268?category=431859" http://blog.eairship.kr/268?category=431859 Hyperlink "http://blog.eairship.kr/268" 알고리즘 4-1강. 깊이 우선 탐색(Depth First Search)- Hyperlink "http://blog.eairship.kr/269?category=431859" http://blog.eairship.kr/269?category=431859 Hyperlink "http://blog.eairship.kr/269" 알고리즘 4-2강. 너비 우선 탐색(Breadth First Search)- Hyperlink "http://wanna-b.tistory.com/64?category=763448" http://wanna-b.tistory.com/64?category=763448 그래프 탐색 알고리즘: DFS, BFS
1. 전통적인 소프트웨어 라이프사이클인 폭포수 모델에 대해서 조사하시오.2. 소프트웨어 공학 방법론에 대해서 비교 분석하시오서론소프트웨어공학은 소프트웨어의 품질을 보다 향상시키고, 소프트웨어 생산성과 작업 만족도를 증대시키는 것에 목적을 둔다. 이러한 궁극적인 목표는 최소의 비용으로 계획된 일정보다 가능한 빠른 시일 내에 소프트웨어를 개발하는 것이다. 하지만 대부분의 프로젝트에서 소프트웨어의 개발 일정과 소요 비용을 예측하는 것은 항상 부정확한 실정이다. 또한 처음 개발하는 비용보다도 유지 보수하는 비용이 훨씬 크다. 그렇기 때문에 유지 보수에 대한 비용을 줄이려면 처음 설계할 때부터 체계적으로 진행해야 하는 것이 중요하다. 이러한 이유로 소프트웨어 공학 분야에서는 프로그램의 개발 방법론이나 설계 방법론, 개발 도구와 같은 소프트웨어 개발 환경들을 연구하고 있다. 본문에서는 소프트웨어 개발 방법론 중 가장 전통적인 라이프 사이클인 폭포수 모델을 자세히 서술하고, 여러 소프트웨어 공학 방법론들의 종류 및 특징을 통해 비교 분석을 할 것이다.본론1. 소프트웨어 라이프 사이클(Software Life Cycle)소프트웨어 개발에는 기본적으로 요구분석으로 시작하여 설계와 구현, 테스트를 거쳐 설치를 하게 되고 계속적인 유지보수를 진행하게 된다. 개발된 소프트웨어는 계속적으로 변경이 되고, 새로운 기능이 추가되어 쓰이다가 그 기능을 다하면 소멸되는 것이다. 이렇게 소프트웨어는 단계적으로 진행이 되기 때문에 다른 시각에서는 생명이 있다고 본다. 소프트웨어가 자라나고 있는 단계들을 소프트웨어 생명 주기 즉, 소프트웨어 라이프 사이클이라고 한다.[그림1] 전통적인 소프트웨어 라이프 사이클폭포수 모델(Waterfall Model)폭포수 모델은 소프트웨어 개발을 할 때 널리 사용되는 전통적인 소프트웨어 라이프 사이클 모델이다. 폭포수라는 명칭은 소프트웨어 라이프 사이클에 기반하고 있는 소프트웨어 개발 기법으로 한 번 떨어지면 거슬러 올라갈 수 없는 폭포수와 같이 소프트웨어 개발가기 어려우며, 규모가 크고 복잡한 시스템에는 적합하지 않다. 또한 원칙적으로는 병행되어 진행되거나, 거슬러 반복 진행되어서는 안되나 실제 프로젝트에 적용하다보면 불가피하게도 피드백을 통해 거슬러 반복되는 경우가 많이 있다. 이러한 단점을 보완하기 위하여 모델을 변형하거나 단계 통합 또는 새로운 단계 추가 등이 시도되고 있다.2.1.1 폭포수 개발 단계2.1.1.1 계획 단계- 문제를 정의한 후 프로젝트 영역을 결정한다.- 작업 분할 구조도(WBS)를 이용하여 세부 작업을 결정한다.- CPM(Critical Path Method)을 이용해 작업 순서를 결정한다.- 간트 차트(Gantt chart)를 이용해 일정표를 작성한다.- 기능 점수(FP:) 등을 이용해 프로젝트에 소요되는 비용을 산정한다.- 계획 단계의 최종 산출물인 '개발 계획서'를 작성한다.2.1.1.2 요구 분석 단계- 기존 시스템을 분석하고, 인터뷰 등을 통해 사용자의 요구 사항을 수집한다.- 사용자가 요구하는 기능적 요구 사항과 비기능적 요구 사항을 파악하다.- 각 방법론에 따른 표기법을 이용해 정리된 요구 사항을 표현한다.- 객체지향 방법론에서는 유스케이스 다이어그램을 작성한다.- 요구 분석 단계의 최종 산출물인 '요구 분석 명세서'를 작성한다2.1.13 설계 단계설계 단계는 크게 전체적인 시스템 구성을 나타내는 상위 설계(아키텍처 설계)와 각 모듈(컴포넌트, 자료구조, 알고리즘)의 세부 내용을 설계하는 하위 설계로 나뉜다.2.1.1.3.1상위 설계- 개발하려는 소프트웨어의 전체 구조를 볼 수 있는 아키텍처를 설계한다.- 아키텍처의 품질 속성을 결정한다.- 아키텍처의 스타일을 결정한다.- 설계 패턴을 결정한다.2.1.1.3.2 하위 설계- 모듈 간의 결합도와 모듈 내의 응집력을 고려해 각 모듈의 세부 내용을 설계한다.- 객체지향 방법론에 따라 설계를 한다면 설계 원리, 클래스 간의 관계, 클래스 설계 원칙을 고려한다.2.1.1.4 구현 단계구현은 코딩을 하는 단계이다. 코딩을 할 때는 가능한 4단계: 프로토타입의 수정과 보완이 이루어진다. 시스템 설계자는 사용자가 요구한 모든 제안사항과 이에 따르는 보완작업을 하게 된다. 프로토타입이 수정된 후에는 3단계로 돌아간다. 사용자가 만족할 때까지 3단계와 4단계는 계속 반복된다.5단계: 가장 중요한 단계로 평가는 고객과 개발자가 함께해서 개발될 소프트웨어의 요구사항을 정제하는 데 중요한 정보로 활용한다.[그림2] 원형 프로토타입 모델프로토타입은 사용자 자신이 원하는 것이 무엇인지 구체적으로 모르는 경우와 복잡한 업무 기능을 요하는 경우에 적합한 모델로 가장 큰 장점은 아이디어의 강력한 쌍방향 커뮤니케이션을 통해 아이디어를 스케치하고 다양한 사람의 참여와 영감을 불러일으킬 수 있다는 데 있다. 이러한 과정을 통해 개발 주기에 획기적 단축을 가져오게 되고 사용자의 요구사항을 정확히 파악해 사용자의 만족도를 증가시킬 수 있다. 그러나 프로토타이핑의 핵심 장점인 효율적 커뮤니케이션이 단점으로 부각될 수도 있다. 시스템의 유지 보수나 기기의 업데이트에 필수적인 시스템의 문서화 과정이 지나치게 축소되거나 생략될 수 있다. 단기적으로 볼 때는 이런 문서들이 별로 도움이 되지 않을 수 있으나 장기적으로 시스템의 수정과 보수가 필요할 때, 시스템에 관련된 문서가 없다면 유지 보수에 부가적인 노력이 필요해 결국 비용이 훨씬 많이 들 수 있다. 즉, 프로토타이핑의 장점인 언제든지 변경이 가능한 유연성이 향후 시스템의 변경이나 업데이트에서는 시간과 비용을 요구하게 되는 것이다.2.3 나선형 모델(Spiral Model)나선형 모델의 개발 방식은 프로토타입 모델에서 최종 프로토타입을 만들어 버리지 않고, 이것을 계속 개발하여 최종 완성시키는 진화적 프로토타입 모델 절차를 따른다. 진화적 프로토타입 모델과 조금 다른 점은 위험 분석 단계가 추가되었다는 것이다. 나선형 모델은 초기 요구 분석 후 프로토타입 개발 이전에 위험 분석 단계를 거친다. 이렇게 만들어진 프로토타입을 사용자가 평가한 후, 개발자가 추가 또는 수정 요구를 받아개발된 프로토타입을 사용자가 확인하고 추가 및 수정될 요구 사항이 있으면 이를 반영한 2차 프로토타입을 만들도록 한다. 또 개발된 2차 프로토타입을 평가하여 추가 및 수정될 요구 사항이 있으면 이를 반영한 3차 프로토타입을 만들도록 한다. 이와 같이 사용자가 만족할 때까지 n번 반복하여 더 이상의 추가 및 수정 요구가 없으면 최종 제품을 만든다.[그림3] 나선형 모델2.4 단계적 개발 모델 (phased development)단계적 개발 모델에서는 개발자가 먼저 릴리스 1을 개발하여 사용자에게 제공하면 사용자가 개발된 릴리스 1을 사용한다. 사용자가 릴리스 1을 사용하는 동안 개발자가 다음 버전인 릴리스 2를 개발한다. 이처럼 개발과 사용을 병행하는 과정을 반복하여 진행하면서 완료한다. 단계적 개발 모델은 릴리스를 구성하는 방법에 따라 점증적 개발 방법과 반복적 개발 방법으로 나눌 수 있다.[그림4] 단계적 개발 모델2.4.1 점증적 개발 방법(Incremental Development)소프트웨어 개발에서 점증적 방법은 중요하다고 생각되는 부분부터 차례로 개발한 후 그 일부를 사용하면서 개발 범위를 점차 늘려가는 방식이다. 예를 들어 대학에서 사용하는 종합정보시스템을 개발할 경우, 가장 중요한 교무/학사 관련 시스템을 먼저 개발하여 사용한다. 그러다가 회계 업무를 비롯한 다른 부서의 업무 시스템을 차츰 개발해 나가는 방식이다.2.4.2 반복적 개발 방법(Iterative Development)사용자 요구 사항의 일부분, 제품을 일부분을 반복적으로 개발하여 최종제품을 완성하는 방법으로 증분형 개발 모델과 진화형 개발 모델이 있다.2.4.2.1 증분형 개발 모델폭포수 모델의 변형으로 증분을 따로 개발 후 통합하는 방법으로 즉, 프로토타이핑의 반복 개념을 선형 순차 모델의 요소들에 결합시킨 것이다. 증분형 개발 모델의 첫 번째 점증은 핵심 제품과 몇 사람 만으로 구현이 가능하고 대형 프로젝트일 경우 증분 별 개발자를 할당하여 병행 개발 후 통합할 수 도 있다.. 이우가 있기 때문에 지적재산권 문제와 관련해서 매우 중요한 문제를 야기할 수 있다. 또한 오픈소스 소프트웨어 개발 프로젝트가 존재하는지의 여부, 그리고 현재의 상황이 어떠한지를 파악하기가 어렵다.2.6 애자일 방법론 (Agile Method)애자일 모델은 고객의 요구에 민첩하게 대응하고 그때 그때 주어지는 문제를 풀어나가는 방법론을 말한다. 폭포수 모델은 요구 사항의 변화에 유연하게 대처하기 어렵다는 문제를 가지고 있다. 따라서 가볍고 비교적 변화를 수용하기 쉬운 방법론이 필요하게 됐는데 이것이 익스트림 프로그래밍(XP), 스크럼(Scrum), 크리스털(Crystal)과 같은 방법론들이다. 이중에서 익스트림 프로그래밍과 스크럼에 알아 볼 것이다.2.6.1 익스트림 프로그래밍(XP)단순성, 의사소통, 피드백, 용기 등의 원칙에 기반해서 “고객에게 최고의 가치를 가장 빨리 전달”하도록 하는 경량 방법론으로 XP는 고객이 원하는 소프트웨어를 고객이 원하는 시기에 제공하는 것을 목표로 하며, 프로젝트 막바지에도 나올 수 있는 요구사항 변경에 더욱 잘 대처할 수 있도록 한다.나선형 모델을 좀더 극단적으로 적용한 것으로 생각할 수도 있으며, 객체지향 방법론으로 설계/구현되는 시스템에 적용할 수 있다. 다른 애자일 방법론들과 마찬가지로 XP방법론도 고전적인 방법론과는 달리 예측성 보다는 적용성을 더 중요시한다. XP지지자들은 요구 사항이 시시각각 변하는 것이 당연하며 소프트웨어 프로젝트에서는 피할 수 없을 뿐만 아니라 바람직한 측면이라고 본다.XP 방법론은 요구사항 등의 변화가 자주, 많이 있거나 개발자가 소규모(10명 내외)이고 같은 공간을 사용하는 경우에 높은 효과를 볼 수 있다.2.6.2 스크럼(Scrum).스크럼이란, 럭비에서 공이 경기장 바깥으로 나가서 플레이를 다시 시작할 때 전술 대형을 만들고 빠르게 서로 공을 주고 받으며 달려나가는 형상을 말한다. 이러한 상황의 경기 진행 방식에서 착안된 스크럼은 현실 적응적이고, 기민하며, 자기 조직적이며 쉴 틈이 별로 없다연구원
1. 주기억장치에 대해 조사하고, 각각의 원리를 설명하시오.주기억장치란, 현재 사용 중인 프로그램과 데이터를 보관하고 있는 장치로 내부 기억장치 또는 1차 기억장치라고도 하며, 크게 ROM과 RAM으로 나눌 수 있다. 또한 중앙처리장치에 의해 제어되며 입력장치를 통해 자료를 입력 받거나 보조기억장치의 자료를 옮겨 받아 기억하는 장치이다. 주기억장치는 프로그램을 기억하는 프로그램 영역과 입력자료를 기억하는 영역, 출력자료를 기억하는 영역, 작업을 실행하여 중간계산결과를 기억하는 작업영역으로 구성된다. 주기억장치의 기억매체로 과거에는 자기코어를 사용하여 코어를 통과하는 전선에 전류를 보내 자화된 방향에 따라 0과 1을 기억하게 하였다. 그러나 현재는 대부분 반도체 기억장치를 사용하는데 반도체 기억 장치에는 ROM과 RAM이 있다. ROM은 읽기만 하는 기억장치로서 전원이 끊어져도 기억된 내용이 지워지지 않는다. RAM은 프로그램이나 자료를 저장할 수 있으나 전원이 꺼지면 기억된 내용이 모두 지워진다.ROM (Read Only Memory)ROM은 영구적, 반영구적으로 데이터를 유지할 수 있는 메모리의 종류이다. Read Only로 하는 것은 다시 재 기록이 불가능하거나 어렵기 때문이다. 그리고 비록 전원이 나가도 ROM에 저장된 데이터를 유지할 수 있기 때문에 비 휘발성 메모리라고 한다.또한 자신의 기본적인 프로그램에서 예를 들면 전원을 켰을 때 내장 메모리를 확인하거나 주변장치를 초기화하고 DOS 읽기 등을 수행한다. 이와 같은 일을 수행하기 위해서는 전원을 끄더라도 그 내용이 지워지지 않는 메모리가 필요하다. 더 자세히 예를 들면 PC에 전원을 켜면 프로세서는 자동적으로 어드레스FFF0h로 점프해 프로세서가 무엇인지 말할 것을 찾는 메모리를 기다린다. 이 위치는 RAM 공간 첫 번째 메가바이트의 끝에서 16바이트의 끝부분이다. 이 위치가 일반적인 메모리에서 매핑되었다면 ROM 또한 RAM처럼 랜덤으로 액세스가 가능하며 일반적으로 컴퓨터의 가장 기본적인 운영체제면 메모리의 모든 내용은 지워진다. 그렇기 때문에 RAM에 저장된 데이터는 전원을 끄기 전에 보조기억장치에 기억을 시켜야 한다. RAM은 전원 공급이 계속 되는 동안 기억된 내용을 계속 유지할 수 있는 SRAM과 전원 공급 외에도 주기적으로 재충전을 해주어야 내용을 기억하는 DRAM으로 나뉜다.SRAM (Static RAM)플립플롭을 집적한 것으로 전원이 들어오는 동안에는 계속 내용을 유지하는 특성이 있어 별도의 재생회로가 필요없는 RAM이다. DRAM과달리 캐패시터회로를 사용하지 않고 래치회로를 사용하기 때문에 재생회로가 필요없고, 일반적인 DRAM보다 빠르게 동작하며 주변 제어회로를 간단하게 구성한다. 재생이 필요없는 이유는 SRAM는 트랜지스터로 기억소자를 구성하고 있기 때문에 전원이 차단되지 않으면 기록된 데이터가 지워지지 않고 매우 빠르다. 하지만 회로가 복잡하여 집적도가 낮고, 값이 매우 비싸다는 단점이 있다. 따라서 SRAM은 빠른 속도의 CPU와 연동되는 캐시 메모리로 주로 사용이 된다. 때로 모바일 장치나 슈퍼컴퓨터 같이 고속의 메모리를 요구하는 컴퓨터의 주기억장치로 사용된다.(1) Async SRAM (Asynchronous SRAM)비동기 SRAM으로 386에 L2 캐시로 장착한 이래로 가장 오랫동안 사용한 캐시 램이다. 비동기 SRAM은 간단한 트릭으로 CPU의 클럭에 의존하는 DRAM보다 엑세스를 더 빠르게 할 수 있지만 여전히 속도는 20,15,12 ns에 머무르고 있다. 비동기 SRAM이라는 이름에서 알 수 있듯 CPU와 메모리 사이에서 캐시 역할을 할 정도로 충분히 빠르지 않아서 CPU는 캐시 램에서 데이터를 얻기 위한 시간이 DRAM에서 데이터를 얻는 시간보다는 짧다는 단점이 있다.(2) Sync SRAM (Synchronous Burst SRAM)동기버스트 SRAM으로 데이터의 동기화와 버스트가 동시에 가능하며 현재 일반적인 버스 속도인 66MHz까지 지원할 수 있는 가장 빠른 메모리이다. 동기 버스트 SRAM은 데이터를 실질적이터 접근, 출력까지의 처리를 3개의 파이프 라인으로 분담하여 처리함으로서 각각의 클럭에 동기하여 처리가 가능하다. 그러므로 초기 출력은 약간 느릴 수 있지만 그 이후부터는 월등히 빠른 속도로 처리가 가능하게 된다. 그리고 SDRAM은 속도 향상과 메모리에 로드된 데이터 보호를 위해서 전원을 공급해 주는 딜레이를 없애버렸다. 속도는 EDO DRAM보다 훨씬 빠르다.(4) EDRAM (Enhnaced RAM)DRAM은 DRAM과 메인보드에 L2캐시에 사용되는 SRAM를 대신해서 사용한다. 일반적으로 35ns의 DRAM 안에 15ns의 SRAM 256바이트가 들어있으며, 내장된 SRAM으로 인해 한 번에 256바이트에 달하는 페이지 메모리를 유지한다. EDRAM은 15ns 정도의 억세스 속도를 가지며, L2캐시는 SIC 칩에서 대신한다. 일반적으로 시스템 성능은 40%정도 증가하며, EDRAM은 각각의 쓰기 통로를 별도로 가지고 있다.(5) RDRAM (Rambus DRAM)미국 반도체 회사인 램버스사가 개발한 메모리로 250MHz라는 매우 빠른 속도로 작동하는 초고속을 실현한 차세대 메모리이다. 하지만 특별한 인터페이스와 컴포넌트 등을 갖추어야 하기 때문에 대중적으로 활용되는 데 한계가 있다. 램버스D램은 PC600, PC700, PC800 등의 규격이 있는데 일반적으로 PC800 규격 제품부터 제 성능을 낸다. 속도가 빨라 성능은 우수하지만 가격이 비싼 것이 단점이다. .SDRAM과 비슷한 RIMM모듈방식을 지원하지만 핀수가 다르기 때문에 SDRAM을 장착할 수 있는 메인보드의 소켓과는 맞지 않다.(6) DDR SDRAM (Double Data Rate Synchronous Dynamic Random Access Memory)DDR SDRAM은 삼성에 의해 개발된 것으로 SDRAM의 속도를 개선한 RAM이다. 이론적으로는 RAM의 속도를 적어도 200 MHz까지 향상시킬 수 있다. RDRAM과 비교해 동등한 성능에 가격은 저렴하다. 그리고 시스템 클록의 상승단어들의 수를 알 수 있도록 구성되어야 한다. 또한 사이클 훔침이라해서 CPU가 주기억 장치를 엑세스하지 않는 동안에 시스템의 버스를 사용하는 기능이 필요하다.- CPU를 휴지(idle) 상태에 있도록 하는 일반적인 방법(특별한 제어신호를 통하여 버스를 disable시키는 방법이다.)버스 요구(bus request,BR)DMA 제어기가 CPU에게 버스제어를 포기하도록 요청하는 신호이다. 신호가 활성화되면 CPU는 현재의 명령실행을 끝내고, 주소버스, 데이터버스, Read와 Write 제어 라인을 고저항 상태로 설정한다.CPU는 버스승인 출력(bus grant,BG)을 통하여 버스가 고저항 상태임을 표시한다.요청신호를 낸 DMA가 버스의 제어를 장악하고 메모리전송을 수행한다.DMA전송이 완료되면 버스요구를 disable하고, CPU가 버스승인을 disable하여 정상으로 복귀한다.DMA 대량 전송(burst transfer):DMA 제어기가 메모리 버스를 제어하고 있는 동안 여러 개의 메모리 워드로 구성된 블럭이 지속적으로 전송하고 자기 디스크 같은 고속의 장치를 위해 사용한다.- 사이클 스틸링(cycle stealing)에 의한 전송 방법DMA 제어기가 한번에 한 데이터 워드를 전송하고 버스의 전송을 CPU에게 반환, CPU측에서는 자신의 동작의 지연 없이 한번의 메모리 사이클을 DMA에게 양보한다. 주기억장치의 데이터 블록을 디스크에 저장하는 DMA과정을 살펴보면,1. CPU가 DMA 컨트롤러에게 명령을 보냅니다.2. DMA 는 CPU로 BUS REQ 신호를 보낸다3. CPU가 DMA에세 BUS GRANT 신호를 보낸다4. DMA가 메모리에서 데이터를 읽어 디스크에 저장한다5. 전송할 데이터가 남아 있으면, 위의 과정 반복한다6. 모든 데이터 전송이 끝나면, CPU에게 INTR신호를 보낸다하지만 이런 DMA제어기를 이용한 I/O 데이터 전송의 문제는 지원에 한계가 있으며, 버퍼링을 위한 내부 기억장치가 따로 필요 하는 단점이 있다.3. 병렬처리와 파이프라이닝에처리를 통하여 수행 동작 수를 증가시키는 두 측면에서 시도되었다. 회로속도의 향상은 반도체 기술발전에 힘입어 많은 성과를 가져 왔고, 병렬처리의 기술은 입출력프로세서(I/O processor), 인터리브드 메모리(interleaved memory), 캐쉬(cache) 메모리, 다중 기능장치(multiple functional unit), 파이프라인 기능장치(pipelined functional unit) 등이 이용되었으며, 명령 룩-어헤드(instruction look-ahead), 명령 파이프라이닝(instruction pipelining), 데이터 파이프라이닝(data pipelining)등의 기법도 사용되었다. 그리고 이들과 같은 기법 외에도 데이터흐름(dataflow)모델이나 리덕션 머신(reduction machine)등의 접근 방법으로 성능을 향상시키려고 시도하고 있다. 병렬처리는 하나의 작업을 여러 개의 타스크들로 나누어 각 타스크들을 시스템상의 여러 프로세서들에게 각각 배정하는 것이다. 각 타스크들은 서로 의존관계인지 독립적인 관계인지에 따라 순차적으로 또는 병렬적으로 처리된다.(1)병렬처리 구조- 다중 장치 구조프로세서를 여러 개 설치하여 동시에 여러 작업들을 병렬로 처리할 수 있도록 하는 구조동일한 장치가 공간적으로 여러 개 존재하여 여러 장치가 동시에 동일한 처리 과정으로 실행 되므로 공간적 병렬성을 가짐- 파이프 라인 구조여러 작업들이 각기 다른 실행 단계에서 병렬 처리될 수 있도록 하는 구조연속적인 작업들의 각기 다른 단계를 병렬로 수행하므로 시간적 병렬성을 가짐(2)병렬처리 유형-SISD (Single Instruction, Single Data)제어장치와 프로세서를 각각 하나씩 갖는 구조한 번에 한 개씩의 명령어와 데이터를 처리하는 단일 프로세서 시스템명령어가 순서대로 실행되지만 실행 과정은 여러 개의 단계들로 나누어 중첩시켜 실행 속도를 높이도록 파이프라이닝르로 되어 있는 것이 보통임-SIMD (Single Instruction M회)
주관식 2-3. 한글 문자를 표현하는 표준 방식에는 어떠한 것들이 있는지 조사하여 장단점을 기술하라.초창기 컴퓨터는 “전자식 계산기”라 불리며 계산기 용도에 초점이 집중되어 있어 문자에 대한 수요가 없었다. 하지만 오늘날 문자는 숫자 못지않게 자주 나타나는 데이터이기 때문에 문자를 표현하는 것에 대한 수요가 당연히 늘어났다. 그리하여 미준 표준국 ANSI에서 제정한 ASCII코드가 개발되며 영어권 국가에서는 문자를 컴퓨터로 표현할 수 있었다. 그러나 한국, 중국, 일본 등 다른 문화권 국가들의 언어는 1바이트인 ASCII코드로는 표현이 불가능했다. 우리나라는 한글을 컴퓨터로 표현하고자 하는 연구를 진행하였고 마침내 조합형, 완성형 한글코드 그리고 유니코드가 제정되었다.조합형 한글코드조합형 한글코드는 가장 초창기의 한글코딩 방식이다. 조합형은 초성, 중성, 종성을 독립된 문자로 보고 각각에 비트를 할당하여 자음과 모음의 조합으로 글자를 표현한다. 조합형 한글코드의 장점은 한글의 문자 체계원리를 그대로 컴퓨터에 옮겨왔기 때문에 한글을 표현하는데 가장 좋은 형식이라는 점과 확장성이 좋다는 점이다. 이에 비해 단점은 정렬 시에 (가~하)한글이 순서대로 정렬되지 않고 다른언어와의 호환성이 약하다는 점이다.N바이트조합형 한글코드한글의 자음과 모음을 영문자 하나하나에 대응시키고, Escape문자처럼 문자의 시작과 끝에 Shift In (^N) 과 Shit Out (^O)를 추가해 한글과 영어를 구분한다. 이 방식은 자음과 모음 단위로1바이트씩 사용하여 데이터 길이가 가변적이고, 처리하기 어려운 단점이 있다.3바이트조합형 한글코드초성, 중성, 종성에 1바이트씩 할당해서 사용하는 방식이다. 중성과 종성이 없는 글자를 표현하기 위해서 채움 문자(Fill Code)가 정의되어 있다. N바이트조합형에 비해 한글이 3바이트로 고정되어 있어 더 편리하다는 장점이 있다..2바이트조합형 한글코드초성, 중성, 종성에 5비트씩 할당하고, MSB를 1로 설정해 한글을 표시하는 방식이다(만약 MSB가 0이면 영문과 숫자를 표시한다). 초기에는 여러 기업들이 자신들만의 조합형 방식을 만들어 사용했지만 시간이 지나면서 삼보컴퓨터의 상용조합형(KSSM)이 표준처럼 사용되었다.완성형 한글코드조합형처럼 초성, 중성, 종성을 조합시켜 문자를 만들어 내는 방식이 아니라, ‘가’, ‘각’, ‘간’ 등 한글의 한 글자 한 글자를 독립된 문자로 인식하고 각 글자에 코드를 부여해서 사용하는 방식을 말한다. 완성형코드의 장점은 한글문자를 정렬할 수 있다는 점이며, 단점은 표현 불가능한 문자가 있다는 점이다. 하지만 이 단점은 확장 완성형 코드와 유니코드가 나오면서 완화되었다. 마이크로 소프트에서 윈도우 95부터 완성형 한글코드를 채택하면서, 조합형보다는 완성형 코드가 더 널리 사용된다.2바이트완성형 한글코드2바이트를 이용해 완성된 음절을 코드와 일대일로 대응시키는 방식으로, KSC-5601표준안으로 채택되었다. 기존의 ASCII코드와 겹치지 않기 위해 코드영역은 0xA1A1 부터 0xFEFE 까지로 제한되어 총 8836개의 글자를 표시할 수 있다. 하지만 실제로 한글에 사용하는 코드로는 2350자밖에 없었다. 이는 1990년 MBC드라마 '똠방각하'를 한글로 표기하지 못하면서 문제가 불거졌는데, 이 문제를 해결하기 위해 확장완성형이 고안되었다.확장완성형 한글코드2바이트완성형의 문제를 해결하기 위해 마이크로소프트에서 새로운 코드 페이지를 고안해내는데 그것이 바로 확장완성형 한글코드이다. 사실 코드페이지 자체는 IBM에서 처음으로 CP949 (Code Page 949)로 지정을 하였으나, 시간이 지나 마이크로소프트에서 이를 약간 변형하여 MS949를 만들었다. CP949(MS949)는 앞서 만들어진 2바이트완성형 한글코드와의 호환성을 유지하기 위해, 2바이트완성형에서 사용된 코드 영역은 그대로 두고, 남는 공간에 빠진 문자 8821자를 채워 넣어 윈도우95 운영체제에 한글 포맷으로 채택하게 된다. 호환성을 유지한다는 점에서 장점이 있지만, 남는 공간에 남은 문자들을 채워 넣은 방식이라, 조합형 한글코드와 마찬가지로 문자의 정렬 순서가 뒤죽박죽이라는 문제가 있다.유니코드한글에서는 이와 같이 조합형, 완성형과 같은 코드들이 만들어 졌지만, 중국, 일본, 러시아 등과 같은 나라에서도 자신들의 언어를 코드화 하려는 작업들이 일어났다. 그렇게 되면서 같은 코드에 서로 다른 언어의 문자들이 할당되는 경우가 있었고, 이는 문자간의 호환을 불가능하게 만들었다. 이와 같은 불편함을 해소하고자 유니코드가 만들어졌다. 유니코드 1.0 은 1991년 8월에 만들어졌고, 그 후 5년이 지난 1996년에 유니코드 2.0이 나오면서 한글이 유니코드에 추가되었다. 유니코드의 가장 큰 장점은 다른 언어간의 호환이 가능하다는 점이고, 단점으로는 각 나라의 언어에 맞게 코딩이 되는 게 아니라 모든 언어를 포함하다 보니, 각 언어의 관점으로 봤을 때는 비효율성이 조금 있을 수 있다는 점이다. 예를 들어, 한글의 경우에는 조합형이 한글에 가장 좋은 형태이지만, 기술적인 요인과 환경적인 요인 때문에 확장완성형과 유니코드가 사용되고 있다.유니코드 5.2에서 한중일의 통합한자와 한글의 고어, 한글 자음과 모음의 원문자 등이 추가되어 사실상 한글의 역사를 볼 때 포함될 수 있는 모든 문자들이 포함되어 있다.주관식 2-7. 원주율 π =3.14159를 8비트 정규화 부동소수점으로 나타내라. 단, 부동소수점 표현에서 부호를 1비트, 지수를 3비트 그리고 맨티사를 4비트로 배정한다.정규화 부동소수점컴퓨터에서는 실수를 부동소수점실수로 변환하여 표현한다. 하지만 부동소수점실수는 나타내는 방식이 여러가지이다. 예를 들어 2진수 101.10을 부동소수점 실수로 표현하면 0.10110x23, 1.0110x22, 10.110x21 등 여러가지가 가능하다. 이러한 문제점을 해결하기 위하여 컴퓨터에서는 모든 부동소수점실수를 정규화 부동소수점실수로 나타낸다. 정규화란 예를 들어 101.10을 0.10110x23으로 나타내어 실수 표현에서 소수점 다음에 항상 1이 나오도록 표현하는 것은 말한다. 실수를 정규화 부동소수로 표현하여 부호, 지수, 가수(맨티사)를 구할 수 있다.부동소수점 형식 (32비트)-부호부 (1비트) : 양수는 0, 음수는 1이다.-지수부 (부호가 있는 정수, 8비트) : 제일 앞의 1비트는 부호를 정하고, 나머지 7비트로 표시한다.-정규화된 가수부 (부호가 없는 정수, 23비트) : 제일 앞의 비트는 정규화되었으므로 1이다.-자름: 가수부의 자릿수가 부족하여 삭제하는 것을 자름이라고 한다.원주율을 정규부동소수점으로 표현원주율π =3.14159을 8비트 정규화 부동소수점으로 나타내 보자. 소수점 위는 (3.)10=(11)2이고, 소수점 아래는 (0.14159)10=(1*************)2이다. 즉(3.14159) 10=(11. 1*************) 2이며, 이를 정규화 하면 0.*************111x22이다. 지수의 2를 이진법으로 바꾸면 10이다. 따라서 8비트 정규화된 부동소수점수로 나타낸다면 맨 앞의 비트 부호는 0(양)이고, 지수부 부호는 0(양)이며, 지수부 나머지 비트는 10, 맨티사는1111이된다(원래 맨티사는 *************111이지만 맨티사의 자릿수가 부족하여 1111로 자름현상이 나타난다). 이것을 결합하면 00101111이 된다.00101111부호 지수 맨티사*참고서적: ICT융합시대의 컴퓨터과학(최윤철)웹사이트: Hyperlink "https://namu.wiki/w/%ED%95%9C%EA%B8%80%20%EC%9D%B8%EC%BD%94%EB%94%A9" https://namu.wiki/w/%ED%95%9C%EA%B8%80%20%EC%9D%B8%EC%BD%94%EB%94%A9 (한글 인코딩) Hyperlink "http://www.korean.go.kr/nkview/nklife/1990_2/21_9.html" www.korean.go.kr/nkview/nklife/1990_2/21_9.html (완성형 한글 부호의 제정 배경과 보완 방안) Hyperlink "http://tapito.tistory.com/529" http://tapito.tistory.com/529 (한글 및 한국어 정보 처리 코드(한국어 정보처리의 과제)_전상훈) Hyperlink "http://edps5091.tistory.com/entry/%EA%B5%90%EC%9C%A1%EC%9E%90%EB%A3%8C-float-double-%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90-%ED%98%95%EC%8B%9D-IEEE-754-%ED%91%9C%EC%A4%80" http://edps5091.tistory.com/entry/%EA%B5%90%EC%9C%A1%EC%9E%90%EB%A3%8C-float-double-%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90-%ED%98%95%EC%8B%9D-IEEE-754-%ED%91%9C%EC%A4%80 (부동소수점 형식) Hyperlink "http://namsieon.com/233" http://namsieon.com/233 (부동소수 표현)