기본 콘텐츠로 건너뛰기

2014의 게시물 표시

Introduction to Data Structure Using C

윤성우의 열혈 자료구조 자료구조에 대한 기본적 이해 프로그램 = 자료구조(데이터 표현) + 알고리즘(데이터 처리) 자료구조가 결정되어야 그에 따른 효율적인 알고리즘 설계 가능하다. 알고리즘은 자료구조에 의존적이다. 알고리즘의 성능분석 방법 시간 복잡도(Time Complexity) - 속도      연산의 횟수를 통해 알고리즘의 빠르기 판단           데이터 수의 증가에 따른 연산횟수의 변화 정도 판단           탐색 알고리즘에서 시간 복잡도를 결정하는 핵심 연산자는 동등비교(==)이다. 공간 복잡도(Space Complexity) - 메모리 사용량 일반적으로 알고리즘 성능 평가할 때 메모리 사용량보다 실행속도에 초점을 둔다. 일반적인 알고리즘의 평가에는 논란의 소지가 거의 없는 '최악의 경우(worst case)가 선택된다. Big-Oh Notation은 '데이터 수의 증가에 따른 연산횟수의 증가패턴을 나타내는 표기법이다.' 또는 '데이터 수의 증가에 따른 연산횟수 증가율의 상한선을 표현한 것'이다. Recursive 하노이 타워      가장 작은 단위 패턴을 코딩하고 이를 일반화시키면 된다. 리스트 (List)      순차 리스트 (배열 기반)           배열 자료구조 특징인 Index를 통해서 어느 곳이든 바로 이동이 가능하다.           하지만, 프로그램 실행 전에 크기가 결정되어야 한다.           그리고 배열은 메모리의 특성이 정적이므로 메모리 길이 변경이 불가능하다.           정적인 배열은 필요로 하는 메모리의 크기에 유연하게 대처하지 못한다.      연결 리스트 (메모리 동적 할당 기반)           프로그램 실행 중에도 필요할때 마다 필요한 크기만큼 할당, 해제 할 수 있다.           head, tail, cur의 구조체 node가 필요하므로 추가적인 메모리 할당이 필요하다.           자료구조 특성상 항상 처음부터 순차적으로 탐색 할 수

Operating System

Operating System Three Phases of OS History Phase 1       Summary :  H/W 비싸고, 인건비는 저렴        Goal : 어떻게 하면 값비싼 CPU를 효율적으로 사용할 수 있을까 ? Phase 1-1 : Operator as OS 하드웨어(애니악 - 진공관 CPU,마그네틱 코어 Memory)가 매우 비싸고, 그에 반해 인건비가 매우 저렴하기 때문에 CPU Utilization을 최대화 시키는게 목표였다. 초창기 컴퓨터 당시 Operator 역할은 사람이었다. 카드 덱 수령, 카드 덱 시스템에 로딩, 수행결과를 프린트, 결과물을 사용자에 전달 등등 Phase 1-2 : Simple batch monitor Human Operator에 의해 job-to-job 전환 속도가 매우 느린점으로 인해 CPU적 관점으로 컴퓨터 시스템의 비효율성을 극복(Utilization 최대화)하기 위해서 최초의 Operating System Software가 등장했다. I/O machine이 추가 되었다. Phase 1-3 : Batch monitor ( OS + I/O device controller ) 하지만, I/O를 추가한 후, I/O를 하고 있을 때 CPU가 idle하게 되었고, 또 다시 CPU Utilization 문제가 대두되었다. 이와 같은 문제를 해결하기 위해 I/O Channel, I/O device controller가 등장했다. I/O Channel은 CPU를 대신해서 I/O device의 operation을 관장해준다. 그 대신 I/O operation의 시작과 끝만 CPU에게 알려준다. ( Asynchronous I/O 방법으로써 Interrupt mechanism 등장 ) 이러한 mechanism 으로 CPU와 I/O가 서로 overlap되며 사용가능해졌다. Phase 1-4 : Multi-programmed Batch Monitor 하지만, 또 다른 문제점으로는 disk에 어떤 data를 read해달

Computer Architecture

Computer Architecture Why do you want to study Computer Architecture ? Because the design, analysis, implementation concepts are vital to all aspects of computer science and engineering. Because the course will equip you with an intellectual toolbox for dealing with a host of systems design challenges. Course Goals Understand      Interfaces (ex. Abstract Data Type = State + Operations)           Instruction Set Architecture ("The Hardware/Software Interface")      Engineering methodology/Correctness criteria/Evaluation method/Technology trend           The design techniques                        Pipeline                Cache                Multiprocessor                     Cache Coherence                     Synchronization                     Interconnection Network 인터페이스를 이해하기 위해서는 ADT의 operation과 state를 이해해야 한다. 함수를 이해하기 위해서는 함수의 input과 output의 패턴을 이해하면 된다. Engineering methodology Rule 1 : Identify and Optimize the Common Case      주로 일어나는 경우가 무엇인지 관찰한 후, 해당 경우의 Speed를