전체 글 81

알고리즘 복잡도 표현 기법

- 완벽하게 똑같은 코드는 없음 -> 어떤 코드가 좋은 코드냐?에 대한 기준이 필요함 -> 복잡도를 정의해서 비교함 - 시간 복잡도는 알고리즘의 실행 속도 공간 복잡도는 알고리즘이 사용하는 메모리 사이즈 -> 사실상 시간 복잡도로 알고리즘을 평가하는 경우가 많음 - 시간 복잡도는 반복문이 지배함 - 보통은 빅오 표기법을 많이 씀 -> 빅오 표기법은 최악의 실행 시간을 표기함 -> 즉, 최악의 상황이라도 이 정도의 성능을 보장한다는 것임 - 만약 시간 복잡도 함수가 2n2 + 3n이라면? -> 시간 복잡도는 O(n2) - 1부터 n까지의 합은 -> for문을 써서 계산할 수도 있고, (n+1)*n/2로 계산할 수 있음 -> 전자는 O(n), 후자는 O(1) -> 후자가 더 효율적이라고 할 수 있음 - 참고..

알고리즘 2022.04.29

프로세스 개요

1. 프로세스란? - 프로그램은 저장장치에 저장되어 있는 정적인 상태이고, 프로세스는 실행을 위해 메모리에 올라온 동적인 상태임 - 일괄 작업 방식은 한 번에 하나의 작업만 처리하는 것임 -> 반면, 시분할 방식은 CPU가 시간을 쪼개어 여러 프로세스에 적당히 배분함으로써 동시에 실행하는 것처럼 느껴짐 - 현대의 운영체제는 시분할 방식을 기본으로 사용하기 때문에 프로세스가 여러 상태를 오가며 실행됨 - 프로세스 제어 블록(Process Control Block)은 프로그램이 프로세스가 될 때 생성됨 -> 프로세스 제어 블록은 프로세스 구분자(Process Identification), 메모리 관련 정보, 프로그램 카운터와 각종 레지스터 같은 중간값을 관리함 2. 프로세스의 상태 - 프로세스에는 네 가지 ..

OS 2022.04.28

병렬 처리

- CPU의 성능을 향상하는 가장 좋은 방법은 CPU의 클록을 높이거나 캐시의 크기를 늘리는 것임 -> 그러나 CPU의 클록을 높이면 발열 문제가 있기 때문에 현재의 기술로는 5GHz가 넘는 CPU를 개발하기 어려움 -> 캐시의 크기를 늘리는 것도 비용 문제가 발목을 잡아 쉽지 않음 - 따라서 CPU 개발사들은 CPU의 핵심 기능을 가진 코어를 여러 개 만들거나, 동시에 실행 가능한 명령의 개수를 늘리는 방법을 사용함 1. 병렬 처리의 개념 - 병렬 처리는 동시에 여러 개의 명령을 처리하여 작업의 능률을 올리는 방식을 말함 -> 요즘 컴퓨터용 CPU나 스마트폰용 CPU의 사양을 보면 듀얼코어, 쿼드코어라고 쓰여 있는데, 이는 CPU의 주요 기능을 담당하는 코어가 1개가 아니라 2개, 4개라는 뜻임 - 여..

OS 2022.04.28

컴퓨터 성능 향상 기술(2) - 저장 장치의 계층 구조, 인터럽트, 직접 메모리 접근

3. 저장 장치의 계층 구조 - 저장 장치의 계층 구조는 속도가 빠르고 값이 비싼 저장장치를 CPU 가까운 쪽에 두고, 값이 싸고 용량이 큰 저장장치를 반대쪽에 배치하여 적당한 가격으로 빠른 속도와 큰 용량을 동시에 얻는 방법임 - 저장 장치의 계층 구조에서는 CPU와 가까운 쪽에 레지스터나 캐시를 배치하여 CPU가 작업을 빨리 진행할 수 있게 함 -> 또한 메모리에서 작업한 내용을 하드디스크와 같이 저렴하고 용량이 큰 저장장치에 영구적으로 저장할 수 있게 함 - 한편, 저장장치의 계층 구조는 중복되는 데이터의 일관성을 유지하는 것이 문제임 -> 예를 들어, CPU가 캐시에 저장된 데이터를 변경하면 메모리의 해당 주소에 있는 데이터도 갱신되어야 하는데, 변경된 내용을 즉시 반영하지 않고 일정 기간 모았다..

OS 2022.04.28

링크드 리스트(4) - 더블 링크드 리스트 II

- 더블 링크드 리스트에서 데이터를 임의의 노드 앞에 노드를 추가하는 메서드는 기존의 코드(https://bryanlee.tistory.com/47)에 다음 메서드를 추가하면 됨 public boolean insertToFront(T existedData, T addData){ if(this.head == null){ this.head = new Node(addData); this.tail = this.head; }else if(this.head.data == existedData){ Node newHead = new Node(addData); newHead.next = this.head; this.head = newHead; return true; }else{ Node> node = this.head;..

자료구조 2022.04.28

링크드 리스트(3) - 더블 링크드 리스트

- 기존의 링크드 리스트는 데이터를 무조건 처음부터 찾아나가야 함 - 더블 링크드 리스트는 하나의 노드에 2개의 포인터가 존재함 -> 따라서 100개의 노드가 있다면 99번째 노드는 100번째 노드로부터 찾을 수 있음 - 더블 링크드 리스트는 다음과 같이 구현할 수 있음 -> addNode, printAll, searchFromHead, searchFromTail 메소드를 구현할 수 있음 public class DoubleLinkedList { public Node head = null; public Node tail = null; public class Node { T data; Node prev = null; Node next = null; public Node(T data){ this.data = ..

자료구조 2022.04.28

컴퓨터 성능 향상 기술(1) - 버퍼와 캐시

왜 컴퓨터 성능 향상 기술이 필요한가? - 현대 컴퓨터 구조의 가장 큰 문제는 CPU와 메모리, 주변장치의 작업 속도가 다르다는 것임 -> 메인보드 내 메모리와 주변장치는 시스템 버스로 연결되어 있고, CPU 내 레지스터, 산술논리 연산장치, 제어장치는 CPU 내부 버스로 연결되어 있음 -> 이 때, CPU의 속도는 CPU 내부 버스의 속도와 같고, 메모리의 속도는 시스템 버스의 속도와 같음 -> CPU 내부 버스의 속도는 시스템 버스의 속도보다 빠르기 때문에, 메모리를 비롯한 주변장치의 속도가 CPU의 속도를 따라가지 못함 -> CPU에 비하면 메모리가 느린 것은 물론이고, 프로그램과 데이터를 보관하는 하드디스크의 속도는 더욱 느림 -> 따라서 장치 간 속도 차이를 개선하고, 시스템의 작업 속도를 올리..

OS 2022.04.28

CPU와 메모리

1. CPU의 구성과 동작 - CPU는 명령어를 해석하여 실행하는 장치임 -> CPU는 산술논리 연산장치, 제어장치, 레지스터로 구성되며, 이것들의 협업으로 작업을 처리함 (1) 산술논리 연산장치 - CPU에서 데이터를 연산하는 장치가 산술논리 연산장치(Arithmetic and Logic Unit, ALU)임 -> 산술논리 연산장치는 데이터의 덧셈, 뺄셈, 곱셈, 나눗셈 같은 산술 연산과 AND, OR 같은 논리 연산을 수행함 (2) 제어장치 - CPU에서 작업을 지시하는 부분을 제어장치(Control Unit)라고 함 (3) 레지스터 - CPU 내에 데이터를 임시로 보관하는 곳을 레지스터(register)라고 함 - 레지스터의 종류 CPU는 필요한 데이터를 메모리에서 가져와 레지스터에 저장하고, 산술..

OS 2022.04.28

컴퓨터의 기본 구성

1) 하드웨어의 구성 - 컴퓨터는 중앙처리장치(CPU), 메인메모리, 입력장치, 출력장치, 저장장치로 구성됨 -> 이 중에서 중앙처리장치와 메인메모리는 필수 장치로 분류됨 -> 나머지는 주변 장치로 분류됨 - 메인 메모리는 제1저장장치, 하드 디스크나 USB 메모리는 제2저장장치 또는 보조저장장치라고 부름 - CPU는 명령어를 해석하여 실행하는 장치로, 인간으로 치면 두뇌에 해당함 -> 메모리는 작업에 필요한 프로그램과 데이터를 저장하는 장소로, 바이트 단위로 분할되어 있으며, 분할 공간마다 주소로 구분됨 - 메모리는 전자의 이동으로 데이터를 처리하지만, 하드디스크나 CD와 같은 저장장치는 구동장치가 있는 기계이므로 속도가 느림 -> 이렇게 느린 저장장치를 사용하는 이유는 저장 용량에 비해 가격이 싸기 ..

OS 2022.04.28

스프링 입문을 위한 자바 객체지향의 원리와 이해 리뷰(2) (3~5장)

배운 점 3장 자바와 객체 지향 - 클래스는 분류에 대한 개념이고, 객체는 실체이다. - 추상화는 곧 모델링이다. - 클래스는 스태틱 영역에, 객체는 힙 영역, 객체 참조 변수는 스택 영역에 할당된다. - 상속은 재사용과 확장의 의미를 담고 있다. - 상속은 is a kind of 관계이다. - 다형성의 가장 기본은 오버라이딩과 오버로딩이다. 5장 객체 지향 설계 5원칙 - SOLID - 객체지향의 5원칙(SOLID 원칙)은 응집도(Cohesion)는 높이고, 결합도(Coupling)은 낮추라는 고전 원칙을 객체 지향의 관점에서 재정립한 것이다. - 단일 책임 원칙은 클래스의 분할 뿐만 아니라 속성, 메서드, 패키지, 모듈, 컴포넌트, 프레임워크 등에도 적용할 수 있는 개념이다. - 개방 폐쇄 원칙의 가..

2022.04.26