공부 32

5장 CPU 성능 향상 기법

CPU의 성능을 높히는 방법 클럭 속도 향상 클럭은 헤르츠(Hz)단위로 측정한다. 클럭 속도를 높이면 빨라지지만 발열이 심각하게 높아져 한계가 있다. 코어와 멀티코어 기존에 있는 1개의 CPU를 여러개로 확장한다. 이를 멀티코어 CPU라고 한다. 코어마다 처리할 명령어들을 적절하게 분배하느냐에 따라 연산속도가 크게 달라진다. 스레드와 멀티 스레드 스레드 : 실행 흐름의 단위 하드웨어적 스레드 스레드 : 하나의 코어가 동시에 처리하는 명령어 단위 2코어 4스레드는 한번에 네개의 명령어를 처리할 수 있는 CPU이다. 이를 멀티스레드 프로세서 또는 멀티스레드 CPU라고 한다. 소프트웨어적 스레드 스레드 : 하나의 프로그램에서 독립적으로 실행되는 단위 하나의 프로그램의 여러 부분이 동시에 실행될 수도 있는데 이..

4장 CPU의 작동 원리

ALU CPU 내부에서 계산을 담당하는 부분이다. 받는 정보 피연산자, 제어신호 레지스터를 통해 피연산자를 받는다. 제어 장치로부터 수행할 연산을 알려주는 제어 신호를 받는다. 내보내는 정보 연산 수행 결과값, 플래그 연산을 수행한 결과값을 일시적으로 레지스터에 내보낸다. 이유 : 연산할 때 마다 결과를 메모리에 저장하면 메모리에 자주 접근하면 느리기에 레지스터에 보내서 임시 저장한다. 플래그 연산에 대한 추가적인 결과 정보를 내보내야 하는 경우가 있는데 이러한 연산 결과에 대한 추가적인 상태 정보를 플래그라고 한다. 플래그 종류는 다양하게 있는데 이러한 플래그들은 플래그 레지스터에 저장된다. 제어장치 제어장치는 제어 신호를 내보내고 명령어를 해석하는 부품 컴퓨터 부품들을 관리하고 작동시키기 위한 일종의..

3장 명령어

컴퓨터는 0과 1만을 이해한다. 하지만 2진수로만 이용하여 컴퓨터에게 명령어를 실행시키면 사람이 사용하기 어렵다. 그렇기에 고급언어라는 것을 만들어서 컴퓨터에게 명령을 시킨다. 고급언어를 컴퓨터가 이해할 수 있는 저급언어로 변환한다. 컴퓨터가 이해할 수 있는 저급언어에는 단순히 0과 1로 만들어져 있는 기계어가 있으며 기계어를 사람이 조금 더 이해하기 쉽게 변환한 어셈블리어가 있다. 이러한 저급언어는 하드웨어와 밀접한 관계를 가진 개발자들이 사용하며 개발한다. 정리 고급언어 -> 저급언어 변환이 필요 고급언어 : 사람들이 이해하기 쉬운 언어 기계어 : 0과 1의 명령어 비트로 이루어진 언어 어셈블리어 : 0과 1로 표현된 기계어를 읽기 편한 형태로 변역한 언어 컴파일 방식, 인터프린터 방식 대표적인 컴파..

2장 데이터

정보단위 컴퓨터는 0또는 1밖에 이해를 못한다. 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 한다. 바이트를 제외한 다른 단위들은 이전 단위를 1000개 묶어 표현한다. 1바이트(byte) = 8bits 1킬로바이트(kB) = 1000바이트 1메가바이트(MB) = 1000킬로바이트 1기가바이트(GB) = 1000메가바이트 1024개를 묶어 표현한 단위는 KiB, MiB, GiB이다. 워드(word) 워드란 CPU가 한번에 처리할 수 있는 데이터 크기를 의미한다. 인텔의 x86 CPU는 32비트 워드 CPU(1워드가 32비트)이고 x64 CPU는 64비트 워드 CPU(1워드가 64비트)이다. 이진법 0과 1만으로 모든 숫자를 표현하는 방법을 이진법이라 한다. 이진법으로 표기한 수를 이진수,..

1장 컴퓨터 구조 시작하기

컴퓨터 구조를 공부하는 이유? 입출력만 집중하는 개발을 넘어 문제 해결, 성능, 용량, 비용 문제까지 고려하는 월클 개발을 위하여!컴퓨터 구조 컴퓨터가 이해하는 정보 데이터 숫자, 문자, 이미지, 동영상과 같은 정적 정보 명령어 데이터를 움직이고 컴퓨터를 작동시키는 정보 컴퓨터의 네 가지 핵심 부품 CPU ALU(산술논리연산장치) : 컴퓨터 내부에 수행되는 계산은 대부분 ALU에서 수행한다. 제어장치 : 제어 신호라는 전기 신호를 내보내고 명령어를 해석하는 장치이다. 레지스터 : CPU 내부의 작은 임시 저장 장치이다. 여러 레지스터가 존재하고 각기 다른 이름과 역할을 가지고 있다. 메모리 현재 실행되는 프로그램의 명령어와 데이터를 저장하는 부품이다. 프로그램이 실행되려면 반드시 메모리에 저장되어 있어야..

9장 트리

트리 트리는 노드와 가지로 구성되어 있다. 각 노드는 가지를 통해 다른 노드와 연결된다.루트 트리의 가장 위에 있는 노드를 루트노드라고 한다. 루트트리는 한개만 존재한다.리프 가장 아래쪽에 있는 노드를 리프라고 한다. 리프는 단말 노드(terminal node), 외부노드(external node)라고도 한다. 리프노드는 더이상 뻗어 나갈 가지가 없는 마지막 노드를 말한다.비단말 노드 리프를 제외한 노드를 비단말 노드(non-terminal node)라고 한다. 다른 말로는 내부 노드(internal node)라고도 불린다.자식 어떤 노드와 가지로 연결되어 있는 아랫쪽 노드를 자식이라 한다. 자식은 여러개 존재할 수 있다. 리프는 자식이 없다.부모 어떤 노드와 가지로 연결되어 있는 위쪽 노드를 부모라고 ..

공부/자료구조 2023.03.09

8장 연결 리스트

리스트란? 순서가 있는 데이터를 늘어놓은 자료구조를 말한다. 종류로는 선형리스트와 연결리스트가 있다. 1. 단순 배열 연결리스트 단순 배열로 연결 리스트를 만들 경우 삽입, 삭제할 때마다 뒤에 데이터를 모두 옮겨야 하므로 효율적이지 않다.2. 포인터를 이용한 연결 리스트 연결 리스트에서 각각의 원소를 노드라고 한다. 이 노드는 데이터와 다음 노드를 가르키는 포인터로 이뤄져 있다. 그래서 일반적인 경우 이러한 방법으로 연결 리스트를 구현한다.class Node: def __init__(self, val): self.val = val self.next = None def printNode(node): while node is not None: print(node.val, end = ' ') n..

공부/자료구조 2023.03.06

7장 문자열 검색

문자열 검색이란? 어떤 문자열안에 다른 문자열이 있는지 검사하고 포함되어 있다면 어디에 위치하는지 찾아내는 것을 말한다.1. 브루트 포스법 선형 검색을 단순하게 확장한 알고리즘이라 단순법이라고 한다.원리 만약 텍스트 apple에서 패턴 ple을 검색하는 방법이다. 첫번째 시작부분인 a에서부터 패턴의 총 개수인 3개를 검사한다. 다르다면 한칸 이동하여 반복 수행한다. 만약 패턴이 모두 맞다면 시작하는 인덱스를 출력하며 종료한다. 2. KMP법 브루트 포스법은 틀린 패턴이 있으면 한칸만 이동하고 다시 검색을 한다. 하지만 KMP법은 버리지 않고 활용하는 알고리즘이다.원리 버리지 않고 활용을 하지만 몇번째 문자열부터 다시 검사를 할지 판단하는 표를 만들어 재활용이 가능하다는 장점이 있으나 보이어 무어법보다 느..

공부/자료구조 2023.03.02

6장 정렬 알고리즘 - 2

5. 셸 정렬 단순 삽입 정렬의 장점을 살리고 단점을 보완하여 더 빠르게 정렬하는 알고리즘기존의 문제점 삽입할 위치가 멀리 떨어져 있으면 이동 횟수가 많아진다. 개선방법 정렬할 배열의 원소를 그룹으로 나눠서 각 그룹별로 정렬을 수행한다. 그 후 정렬된 그룹을 합치는 작업을 반복하여 원소의 이동 횟수를 줄인다. 원리 4- 정렬, 2- 정렬, 1-정렬 즉, 배열 전체에 적용을 시킨다. 이를 h-정렬이라 한다. 배열에서 h만큼 떨어진 원소를 그룹시켜 각 그룹별로 정렬을 수행한다. h를 4, 2, 1로 감소시키며 정렬을 수행한다. h값을 효율적으로 선택하는 법 h를 효율적으로 선택해야 각 그룹을 선택할 때 보다 충분히 섞일 수 있다. 그렇기에 h값이 서로 배수가 안되도록 선택해야 한다. h의 값을 1부터 선택해..

공부/자료구조 2023.02.27

6장 정렬 알고리즘 - 1

정렬이란? 값의 대소관계에 따라 데이터 집합을 일정한 순서로 바꾸어 늘어놓는 작업을 말한다. 작은 데이터를 앞쪽부터 늘어놓은 것을 오름차순 큰 데이터를 앞쪽부터 늘어놓은 것을 내림차순이라 한다. 정렬 알고리즘에서 교환, 선택, 삽입은 핵심 개념이다.1. 버블 정렬 이웃한 원소를 비교하여 작은값을 앞으로 큰값을 뒤로 교환하는 정렬을 말한다.코드 구현 arr = [6,4,3,7,1,9,8] for i in range(len(arr)): for j in range(len(arr)-i-1,i,-1): if arr[j-1] > arr[j]: arr[j], arr[j-1] = arr[j-1], arr[j] 2. 세이커 정렬(버블 정렬 개선) 정렬이 거의 완료된 배열을 버블정렬하면 빠르게 완료하기가 어렵다. 가장 큰..

공부/자료구조 2023.02.23