Operating System [2]: 프로세스 (Processes)
·
Computer Scinece/Computer Architecture & OS
1. Process 프로세스는 실행 중인 프로그램으로, 단순히 저장된 파일 형태의 프로그램과 다르다. 프로그램은 그저 디스크에 저장된 명령어 목록 (passive entity)일 뿐이지만, 실행되면 메모리에 올라가고 CPU가 이를 처리 (active entity)하면서 프로세스로 변한다. 예를 들어, 컴퓨터에 카카오톡이 설치되어 있다고 해도 실행하기 전까지는 단순한 파일에 불과하지만, 실행 버튼을 누르면 메모리에 로드되면서 프로세스가 되어 CPU와 메모리 등의 자원을 사용하게 된다. 프로세스는 프로그램 카운터를 통해 어떤 명령을 실행할지 관리하며, 운영체제가 이를 제어한다.1.1 Process in MemoryMemory Layout 메모리 레이아웃: 프로세스가 실행될 때 메모리에서 특정 구조로 구성됨텍..
Operating System [1]: 운영 체제 구조 (Operating System Structures)
·
Computer Scinece/Computer Architecture & OS
1. 개요운영체제는 사용자가 컴퓨터를 편리하게 사용할 수 있도록 도와주는 소프트웨어다. 운영체제의 가장 기본적인 역할은 사용자와 하드웨어 사이의 중재자(intermediary) 역할을 하는 것이다. 운영체제가 없으면 사용자는 하드웨어를 직접 조작해야 하는데, 이는 매우 비효율적이고 복잡하다. 운영체제는 이러한 복잡성을 해결하여, 사용자가 보다 쉽게 프로그램을 실행하고 데이터를 처리할 수 있도록 도와준다. 운영체제의 핵심 기능으로는 프로세스 관리, 메모리 관리, 저장 장치 관리, 파일 시스템 관리, 입출력 장치 관리 등이 있다. 예를 들어, 여러 개의 프로그램이 동시에 실행될 때 운영체제는 각 프로그램이 CPU를 얼마나 사용할 것인지 조정하며(스케줄링), 메모리를 효율적으로 할당해 충돌이 발생하지 않도록 ..
Digital Design [1] : 디지털 시스템
·
Computer Scinece/Computer Architecture & OS
디지털 시스템은 정보를 0과 1의 이진 값으로 표현하며, 컴퓨터, 스마트폰, 통신, 의료 등 다양한 분야에서 활용된다. 아날로그와 달리 이산적인 신호를 사용하여 높은 신뢰성과 빠른 연산 속도를 제공한다. 이진수는 디지털 시스템의 기본 연산 단위로, 십진수 대신 2진법을 사용하여 데이터를 저장하고 처리한다. 또한, 8진수와 16진수는 긴 이진수를 간결하게 표현하는 방식으로 활용된다. 디지털 시스템과 이진수의 개념은 현대 기술 발전의 핵심이며, 컴퓨터 공학 및 IT 분야에서 필수적인 기초 지식이다. 1. Digital Systems and Binary Numbers1. 이진 체계 (Binary system)이진수는 디지털 시스템에서 정보를 표현하는 기본적인 방식으로, 0과 1 두 개의 숫자만을 사용한다. 이..
Programming Principles [8] : 정렬 알고리즘 (Sortion Algorithms)
·
Computer Scinece/Programming Principles
계산 복잡도 분석은 문제를 해결할 수 있는 모든 알고리즘의 효율성을 평가하고, 해당 문제의 하한(Ω)을 결정하는 과정이다. 예를 들어, 행렬 곱셈 문제의 일반 알고리즘은 Θ(n3)의 시간복잡도를 가지며, 개선된 알고리즘으로는 쉬트라쎈 알고리즘 (Θ(n2.81))과 위노그라드 알고리즘 (Θ(n2.38))이 존재한다. 하지만, 이 문제의 계산 복잡도 하한은 Θ(n2)로 알려져 있으나, 이만큼 효율적인 알고리즘은 아직 발견되지 않았다. 이는 하한보다 효율적인 알고리즘을 만드는 것이 불가능함을 의미하며, 예를 들어 3×3 행렬 곱셈에서는 기존 방식으로는 27번의 연산이 필요하지만, 개선된 알고리즘은 이를 줄일 수 있음을 보여준다. 계산 복잡도에서 문제의 복잡도 하한이 Ω(f(n))인 경우, 시간 복잡도가 Θ(f..
Programming Principles [7] : 탐색 알고리즘 (Search Algorithms)
·
Computer Scinece/Programming Principles
1. 백트레킹 (Back Tracking) 백트래킹(backtracking) 알고리즘은 탐색 문제를 해결하는 기법으로, 상태공간트리를 깊이우선탐색(DFS) 방식으로 탐색하면서 유망하지 않은 노드(non-promising node)를 가지치기(pruning) 하여 탐색 범위를 줄인다. 이 알고리즘은 탐색 중간에 해답이 나올 가능성이 없는 경로를 제거해 효율성을 극대화한다. 더보기깊이 우선 탐색 (Depth-First Search, DFS)  깊이우선탐색(Depth-First Search; DFS)은 트리나 그래프 구조에서 루트 노드(또는 시작 노드)부터 시작하여, 자식 노드를 깊게 탐색한 후 더 이상 자식 노드가 없을 때 부모 노드로 되돌아오는 방식으로 진행하는 탐색 알고리즘이다. 이는 주로 재귀적으로 구..
Programming Principles [6] : 최적화 알고리즘 (Optimization Algorithms)
·
Computer Scinece/Programming Principles
1. 동적 계획법 (Dynamic Programming) 지금까지 알고리즘의 기본 원리와 분할 정복 알고리즘에 대해 배웠다. 분할 정복 알고리즘은 하향식(top-down) 접근 방식을 통해 문제를 해결하며, 나누어진 부분 문제들 간에 상관관계가 없는 경우에 적합하다. 그러나 피보나치 수열 계산과 같은 경우, 분할된 문제들이 서로 연관되어 있어 같은 항 f(i)를 여러 번 계산하게 된다. 이로 인해 효율성이 저하되므로, 분할 정복법은 피보나치 알고리즘과 같은 연관된 문제를 해결하는 데 적합하지 않다.  동적 계획법(dynamic programming)은 상향식(bottom-up) 접근 방식을 사용하는 알고리즘으로, 문제를 나눈 후 각 부분 문제를 먼저 해결하는 방식이다. 이 방법은 인덱스를 효과적으로 설정..
Programming Principles [5] : 재귀 알고리즘 (Recursive Algorithm)
·
Computer Scinece/Programming Principles
지금까지 C++ 문법을 통해 프로그래밍 언어의 기본적인 구문과 기능을 익히고, 객체지향 프로그래밍을 통해 소프트웨어의 구조와 설계를 이해했으며, 자료구조를 활용하여 데이터를 효율적으로 관리하는 방법을 배웠다. 이제는 알고리즘을 학습하여 데이터를 활용해 실제로 문제를 해결하는 방법을 익힐 차례다. 이를 통해 논리적 사고를 더욱 발전시키고, 최적화 기술을 적용하여 보다 효율적이고 유지보수 가능한 소프트웨어를 개발할 수 있을 것이다.1. 기초 알고리즘1. 순차검색 알고리즘 (Sequential Search)순차검색(Sequential Search) 알고리즘은 배열이나 리스트와 같은 자료 구조에서 원하는 값을 찾기 위해 처음부터 끝까지 순차적으로 하나씩 검사하는 방법이다. 이 알고리즘은 데이터가 정렬되지 않아도..
Programming Principles [4] : 자료 구조 (Data Structures) (정리 중)
·
Computer Scinece/Programming Principles
1. List 리스트는 요소들이 순서대로 배열된 데이터 구조로, 각 요소는 특정한 위치를 가지며 선형적인 관계를 형성한다. 리스트에서 선형 관계(Linear relationship)란 각 요소가 특정한 순서로 정렬되어 있으며, 첫 번째 요소를 제외한 모든 요소는 하나의 이전 요소(Predecessor)를 가지고 있고, 마지막 요소를 제외한 모든 요소는 하나의 다음 요소(Successor)를 가지는 것을 의미한다. 예를 들어, 리스트 [A, B, C, D]에서 B는 A의 후속 요소이며, C의 선행 요소가 된다. 리스트의 길이(Length)는 포함된 요소의 개수를 나타내며, 리스트의 상태에 따라 변할 수 있다. 예를 들어, 리스트 [10, 20, 30]의 길이는 3이지만, 새로운 요소 40을 추가하면 길이가..
Programming Principles [3]: 자료 구조 (Data Structures)
·
Computer Scinece/Programming Principles
1. 자동 할당 (Automatic Allocation)저장 위치: STACK할당 시점: 함수 호출 시해제 시점: 함수 종료 시크기 변경: 불가 (고정)장점: 간편, 자동 해제단점: 메모리 크기 제한 있음1. 데이터 추상화 (Data Abstraction)1.1 추상화 (Abstraction)추상화는 복잡한 시스템에서 핵심적인 부분만을 남기고 불필요한 세부 사항을 제거하는 개념이다. 너무 추상적인 설명은 실질적인 정보가 부족하고, 너무 구체적인 설명은 불필요한 정보를 포함하여 비효율적일 수 있다. 따라서 적절한 수준에서 핵심 정보만을 남기는 것이 중요하다. 프로그램 역시 추상화의 한 형태로, 프로그램이 무엇을 해야 하는지는 설명하지만, 내부적으로 어떻게 동작하는지는 숨긴다. 자동차를 운전할 때, 운전자는..
Programming Principles [2] : 객체지향 프로그래밍 (Object-Oriented Programming)
·
Computer Scinece/Programming Principles
기존의 절차지향 프로그래밍은 데이터와 함수가 분리되어 있어 프로그램의 구조가 복잡해지고 유지보수가 어려워지는 단점이 있었다. 이러한 문제를 해결하기 위해 객체지향 프로그래밍(OOP)이 등장하였으며, 이는 객체를 중심으로 소프트웨어를 구성하는 방법이다. OOP는 데이터를 포함한 객체를 통해 관련된 기능을 묶어 관리함으로써 코드의 재사용성과 모듈화를 촉진하고, 프로그램의 이해도를 높인다. Unity를 예를 들면, Player라는 클래스를 정의하고 이 클래스에 체력이나 점수같은 멤버 변수들을 포함시키고 TakeDamage()와 IncreaseScore()와 같은 멤버 함수를 통해 플레이어의 상태와 행동을 관리할 수 있다. 이러한 방식으로 각 객체는 자신만의 속성과 기능을 가지게 되어, 복잡한 게임 시스템을 보..