프로그래밍/개념원리

컴퓨터 네트워크 컴퓨터 간의 통신을 의미한다. 이는 인터넷을 통해 웹 사이트를 보는 것부터, 하드 디스크 안의 파일을 보는 것까지 모두 포함된다. LAN (Local Area Network) 건물 안에서처럼, 특정 지역을 범위로 하는 네트워크다. WAN (Wide Area Network) 인터넷 서비스 제공자(ISP, Internet Service Provider) 등이 제공해주는 광역 네트워크다. WLAN (Wireless Local Area Network) LAN인데 연결선이 없는 버전이다... 프로토콜 컴퓨터 간 통신을 위한 규칙이다. 내가 ---라는 프로토콜로 통신을 시작하면, 받는 쪽에서는 해당 프로토콜을 읽고 통신으로 받는 데이터를 어떻게 다룰지 결정할 수 있게 된다. 당장 인터넷에서 쓰는 H..
가상 메모리 가상 메모리란 사용 가능한 메모리가 실제로 존재하는 메모리보다 큰 것처럼 보이게 하는 기술이다. 프로세스 자체가 차지하는 메모리는 그렇게 크지 않지만, 그 프로세스가 만들어 낼 메모리의 양은 생각보다 거대할 수 있다. RAM이 가진 메모리의 양이 4GB인데, 프로세스에서 8GB만큼의 데이터를 만들어버린다면 할당량을 넘어서기 때문에 제약이 발생하고 만다 제약을 피해서 최대한으로 확보하면? 다른 프로세스들이 메모리를 확보할 수 없게 된다. 그럼 프로세스마다 메모리 할당량을 제한하면? 대규모 데이터나 복잡한 프로그램은 만들 수 없게 된다. 게다가 메모리 할당량을 제한한다는 것은 곧 RAM에 해당 메모리만큼의 용량을 항상 확보해둬야 한다는 것인데, 이는 메모리를 낭비하는 꼴이 된다. 생각해보자, 프..
스레드 스레드는 프로세스 내에서 작업을 수행할 때 사용되는 작업 단위이다. 하나의 응용 프로그램이 여러 프로세스를 가질 수 있고, 하나의 프로세스는 여러 스레드를 가질 수 있다. 병렬적으로 작업을 수행한다는 것이 프로세스와도 일맥상통해서 경량 프로세스(Light Weight Process)라고도 부른다. 스레드의 기능을 쓰지 않겠다고 하더라도, 프로세스에서는 이미 스레드가 하나씩은 동작하고 있다. 이렇게 스레드 하나만으로 동작하는 프로세스를 단일 스레드 프로세스(Single Threded Process)라고 한다. 기본적으로 프로세스끼리는 다른 프로세스의 데이터로 접근할 수가 없다. IPC로나마 간접적으로 프로세스의 데이터에 접근할 수 있는데, 스레드는 프로세스에 귀속되므로 IPC 같은 거 없이 프로세스..
프로세스 (Process) 프로세스는 현재 실행중인 프로그램을 뜻한다. 정확히는 메모리에 올라와 있는 상태에서 실행 중인 프로그램이다. Process 외에도 Task, Job 등의 단어로도 쓰인다. 응용 프로그램 밑에서 여러 프로세스가 동작하기 때문에, 둘의 의미는 다르다. 하나의 PC에서는 정말 많은 프로세스가 실행되고 있다. 우리 눈에는 모든게 동시에 돌아가는 것처럼 보이지만, 사실 이 프로세스들은 하나하나가 순서를 따져가면서 CPU의 연산을 기다리고 있다. 이렇게 프로세스의 작동 순서를 결정하는 것을 프로세스 스케줄링(Process Scheduling)이라 한다. 프로세스의 구조 프로세스는 text(code), data, stack, heap의 네 가지로 구성된다. text(code): 프로세스가 ..
운영체제 (Operating System) 시스템 자원을 관리한다. 여기서 시스템 자원은 컴퓨터의 하드웨어 부분을 말한다. 즉, OS는 CPU, Memory, IO Devices라는 PC의 3요소를 관리한다고 할 수 있다. CPU: 각 프로그램에 얼만큼의 연산량을 할당할지를 담당해준다. Memory: 프로그램을 어느 주소에 저장할지, 어느 정도의 메모리를 확보해줘야하는지를 결정해준다. 저장매체(HDD, SSD): 어떻게, 어디에 저장할지를 정해준다. 키보드, 마우스 등 IO Devices: 들어오는 입력과, 화면이나 다른 수단으로 출력되는 것을 알맞게 변환해준다. 사용자와 컴퓨터간의 상호작용을 지원한다. 우리가 직접 전기신호를 보내줘도 좋겠지만...? OS가 있다면 그냥 몇 번 딸깍딸깍해서 해결할 수 있..
Machine Language: CPU가 제공하는 Instruction Code 컴파일: 프로그래밍 언어로 작성된 프로그램은 컴파일러를 통해 CPU의 Instruction Code로 전환된다. 컴파일을 안하는 언어(파이썬, JS 등): 인터프리터 언어라고도 하며, 이들은 코드를 한 줄씩 기계어로 전환하여 실행시킨다. 한 줄 실행할 때마다 번역 과정이 동반되므로 컴파일 언어에 비하면 상대적으로 느리다. LOD A, [1003h] LOD -> 10h의 Instruction Code A -> Accumulator(가산기)를 나타내는 약자 풀이 -> 1003h에 있는 데이터를 로드하여 Accumulator에 넣으라는 뜻 BEGIN: LOD A, [1005h] 코드를 재작성할 때마다 주소가 바뀌므로 이름을 붙여주..
클럭 클럭은 CPU가 1초마다 발생되는 클럭 주파수의 양을 의미한다. 주파수이므로 헤르츠(Hz) 단위로 표현한다. 우리집 컴퓨터는 3.6GHz인데, 이는 1초에 클럭 신호가 36억번 발생한다는 것을 뜻한다. 간단하게 말해서, 클럭 신호가 발생할 때마다 전류가 흐르고, 그것을 통해 위의 가산기 같은 것들이 작동한다고 생각하면 된다. Oscillator (오실레이터, 발진기) 발진기는 클럭 신호를 발생시키는 데 사용되는 전류 회로다. 플립플롭 (Flip-Flop) 플립플롭은 데이터를 기억시키는데 유용한 논리 회로다. 회로에 전류가 흐르는지를 감지함으로써, 특정 스위치가 켜졌는지 꺼졌는지를 알 수 있게 된다. R-S 플립플롭 입력값으로 Reset과 Set을, 출력 값으로 Q와 !Q를 가지는 플립플롭이다. S에..
개요 컴퓨터는 전기를 끄고 켜는 것의 반복으로 동작한다. 특정 패턴으로 전기를 끄고 켜면, 컴퓨터는 해당 패턴에 맞는 동작을 취하게 된다. 이는 마지 점자와도 비슷하다. 점자를 6개의 장치라고 생각한다면, 컴퓨터는 패턴에 맞춰 어느것이 ㄱ이고 아느것이 ㅍ인지 알 수 있는 것이다. 이렇게 컴퓨터가 알아듣도록 끄고 켜는 장치를 비트(Bit)라고 표현한다. 끄고 켠다! 라는 말답게 비트는 On과 Off의 두 가지 상태로 나뉘며, 이를 알기 쉽도록 1(on), 0(off)의 이진수로 표현하게 된다. 만약 비트로 위의 점자 중 ㅅ을 표현한다면 000001이 될 것이다. 논리 게이트 논리 게이트란 두 가지의 비트를 비교하여 새로운 비트를 도출해내는 일종의 연산자다. AND (논리곱) 단어의 뜻과 마찬가지로, AND..
컴퓨터 컴퓨터는 크게 나누면 하드웨어와 소프트웨어 두 가지로 분류된다. 소프트웨어: 운영체제, 어플리케이션 등 하드웨어: CPU, Memory, Storage, Network 폰 노이만 구조 현재 대부분의 컴퓨터 구조는 폰노이만 구조를 따른다. Memory에 프로그램과 데이터를 저장하는 방식으로, 메모리의 코드나 자료를 하나씩 꺼내 ALU(Arithmetic Logic Unit)단위로 만든 다음 연산하는 방식이다. 이러한 구조가 나오기 전에는, 컴퓨터가 다른 작업을 하고자 할 때 스위치를 설치하거나 전선을 재배치하는 등의 고생을 해야했으나, 이 구조가 나온 뒤로는 소프트웨어만 교체하면 되게 되었다. 3요소가 하는 일 CPU, Memory, IO Device 세 개를 묶어 컴퓨터의 주요 3요소라고 칭한다...
개요 다익스트라(Dijkstra) 알고리즘이란, 그래프의 한 노드에서 모든 노드로의 최단거리를 구하는 알고리즘이다. 주로 간선에 가중치가 매겨져 있는 그래프에서 사용한다. BFS와 비슷하지만, BFS는 모든 노드를 순회하는 것에 초점을 두고 다익스트라 알고리즘은 거리를 구하는 것에 초점을 둔다. 일반적으로 최단 경로 계산에 있어서는 수행 속도가 빠른 알고리즘이지만, 간선의 가중치에 음수가 있다면 사용할 수 없다는 맹점이 있다. 구현 다음과 같은 그래프에서, A로부터 다른 모든 노드들의 최단 거리를 계산하면 옆의 결과가 나온다. 두뇌 CPU를 사용하면 금방 계산이 가능하지만, 현실 CPU는 그리 유연한 사고를 해주지 못한다. 가능한 모든 간선들을 돌면서 가능한 모든 경우의 수를 계산하는 것이다. 그저 A-..
개요 DFS와 BFS는 그래프 자료 구조에서 모든 노드를 순회&탐색하기 위해 사용되는 알고리즘이다. 이를 이용하면 그래프 내 모든 노드를 대상으로 완전한 탐색을 실시하거나, 노드와 노드 사이 최단 경로를 알아내거나, 미로 같은 곳에서의 최적 경로를 찾아가게 할 수 있다. DFS DFS란 깊이 우선 탐색(Depth First Search)의 준말이다. 가능한 한 가장 깊은 데까지 노드를 탐색한 뒤, 막다른 곳에 다다르면 왔던 순서대로 다시 돌아오며 다른 노드들을 탐색한다. 위와 같은 무방향 그래프가 있다면, DFS를 실행했을 때... 이런 순서대로 탐색을 수행하게 된다(A->C->D->G->F->H->J->I->E->B). 설명하자면 다음과 같다. 1. A->C->D->G까지 탐색, G가 막다른 길이므로 ..
개요 힙이란 힙 속성을 충족하는 완전 이진 트리 형태의 자료구조로, 최소값이나 최대값을 빠르게 찾아내는데 유용하다. 특징 힙 속성 간단하게 말하자면 부모와 자식 간에 대소관계가 일정할 것을 조건으로 하는 것이다. 트리의 형태로 보자면, 부모 노드 vs 두 자식 노드의 관계에서 어느 한 쪽이 작던지, 크던지 해야하는 것이다(자식 노드간의 대소는 가리지 않는다). 이런 조건으로 인해, 힙 속성을 충족하는 트리는 첫번째 노드(Root Node)가 가장 작거나, 큰 값을 가지게 된다. 꼭 숫자의 대소를 따지지 않더라도 조건의 일정함이 유지된다면 힙 속성을 충족한다고 할 수 있다. 완전 이진 트리 트리의 모든 레벨에 자식 노드가 채워져 있고, 가장 아래층에는 가장 왼쪽부터 노드가 채워져 있는 상태를 완전 이진 트..
MalaiaGarnet
'프로그래밍/개념원리' 카테고리의 글 목록