All'alba vincerò

At dawn, I will win!

CS 70

세그멘테이션(Segmentation): 프로세스를 기능 별로 나눠서 각각 메모리에 넣는 메모리 관리 기법

세그멘테이션(Segmentation): 프로세스를 의미 있는 단위(코드, 데이터, 스택 등)로 나눠서 각각 메모리에 따로 배치하는 메모리 관리 방식게임을 만드는 상황에서 아래처럼 잘게 나눈 덩어리들을 각각 필요한 만큼만 메모리에 따로따로 배치하는 방식 ⇒ 세그멘테이션게임 실행 코드 → 한 덩어리캐릭터 정보 같은 데이터 → 또 다른 덩어리게임 도중 생기는 임시 정보들(예: 점수 계산 등) → 또 다른 덩어리 세그멘테이션에서는 프로그램이 여러 세그먼트(조각)로 나눠져있음 → 그래서 사용자가 어떤 세그먼트 안에서 논리 주소를 사용하면, 운영체제는 그 주소가 실제 메모리의 어디에 있는지 계산하기 위해 물리 주소로 바꿔줘야 함개요프로그램은 여러 개의 세그먼트(조각)로 구성됨→ ex) 메인 코드, 전역 데이터, ..

CS/운영체제 2025.06.01

가상 메모리(Virtual Memory)

가상 메모리 (Virtual Memory)개요만약 운영체제나 프로세스가 4GB 메모리에서 동작하도록 만들어졌다면 이보다 작은 메모리의 컴퓨터에서는 실행되지 않음→ 가상 메모리가 이런 문제를 해결함가상 메모리의 크기는 이론적으로는 무한대이지만, 실제로는 물리 메모리의 크기와 CPU의 비트 수로 결정됨ex) 32비트 CPU인 경우 표현할 수 있는 주소값→ 가상 메모리 크기: 4GB (2의 32승) 부족한 물리 메모리를 가상 메모리로 해결하는 방식여러 프로세스를 실행하려는 경우32비트 CPU의 경우 최대 메모리 크기가 4GB인데, 4GB를 차지하는 프로세스 5개와 운영체제를 실행시키려면 → 운영체제를 제외하고도 적어도 20GB가 필요함이럴 때 가상 메모리 시스템은물리 메모리 내용의 일부를 하드디스크에 있는..

CS/운영체제 2025.06.01

메모리 종류, 메모리와 주소, 메모리 할당 방식

메모리 종류컴퓨터 내부의 메모리들 레지스터(Register) : 가장 빠른 기억 장소CPU 내에 존재CPU는 계산을 할 때, 메인 메모리에 있는 값을 레지스터로 가져와 계산함 → 계산 결과는 다시 메인 메모리에 저장함휘발성 메모리 ⇒ 컴퓨터 전원이 꺼지면 데이터가 사라짐 32비트 CPU는 레지스터 크기가 32비트, 64비트 CPU는 64비트임 캐시(Cache) : CPU와 메모리 간 속도 차이를 줄이기 위한 메모리 레지스터는 CPU가 사용하는 메모리로 굉장히 빠르지만 그에 비해 메인 메모리는 느림 → 메인 메모리에 있는 값을 레지스터로 옮기려면 한참 걸리기 때문에 필요할 것 같은 데이터를 미리 가져와서 저장함⇒ 캐시 메모리휘발성 메모리 ⇒ 컴퓨터 전원이 꺼지면 데이터가 사라짐ex) CPU가 값..

CS/운영체제 2025.06.01

메모리(Memory)

메모리(Memory) 개요현대 컴퓨터의 폰 노이만 구조에서는 프로그램의 코드와 데이터는 모두 메모리에 올라가서 실행됨⇒ 프로그램 내장 방식(Von Neumann Stored Program Concept)이라고 부름이 방식 덕분에 프로그램이 변경될 때마다 하드웨어를 바꾸지 않아도 됨메모리에는 메인 메모리와 보조 메모리가 있음 메모리의 구분컴퓨터에서 사용하는 메모리는 크게 메인 메모리(Main Memory)와 보조 메모리(Secondary Memory)로 나눌 수 있음 1. 메인 메모리(Main Memory)RAM (Random Access Memory): 어떤 데이터에 접근해도 접근 시간이 동일한 메모리 휘발성 메모리 → 전원이 끊기면 모든 데이터가 사라짐그래서 대부분의 프로그램은 비휘발성 보조 메모..

CS/컴퓨터 구조 2025.05.30

중앙 처리 장치(CPU, Central Processing Unit)

중앙 처리 장치(CPU, Central Processing Unit): 컴퓨터의 핵심 두뇌 역할을 하는 장치개요현대 컴퓨터는 기본적으로 폰 노이만 구조를 따름⇒ 중앙 처리 장치(CPU), 메모리, 입출력 장치가 서로 독립적으로 분리된 구조CPU는 이 구조의 중심에서 명령을 읽고, 해석하고, 실행하는 역할을 담당함→ 우리가 작성한 코드도 결국 CPU가 읽고 실행해야만 동작함프로그램은 명령어와 데이터로 구성됨프로그램을 실행하면 메모리에 적재되고, 중앙 처리 장치 내에 있는 제어 장치가 프로그램의 명령어와 필요한 데이터를 읽어와 적절한 계산을 반복하며 프로그램을 실행힘 중앙 처리 장치의 구성 요소 산술 논리 연산 장치 (ALU, Arithmetic Logic Unit): 실제 계산 작업을 담당하는 장치산..

CS/컴퓨터 구조 2025.05.30

블랙 박스(Black Box), 컴파일러 & 인터프리터

블랙박스(Black Box): 내부 작동 원리는 숨겨져있고, 입력에 따른 출력만 예측 가능한 것사용자는 시스템의 내부 구조를 몰라도 출력 결과를 예측할 수 있는 상태ex) 자동차 운전, 엔진이나 부품의 원리를 몰라도 운전 가능→ 복잡한 내부 구조를 감춘 채 사용만 가능하게 만든 구조 모듈화: 복잡한 시스템을 여러 블랙박스로 나누는 것각각의 블랙박스를 독립적으로 설계하여 전체 시스템을 효율적으로 구성→ 유지보수 용이, 재사용성 증가, 설계 간결화 분할 정복: 큰 문제를 보다 작은 문제로 분할해서 복잡함을 단순화하는 방법컴퓨터 하드웨어나 소프트웨어 같은 복잡한 시스템은 이 방식을 사용함→ 문제를 작은 단위로 나누어 하나씩 해결하는 구조→ 블랙박스 개념과 모듈화를 통해 구현 가능 탑다운 방식 (Top-d..

CS/컴퓨터 구조 2025.05.30

동적 프로그래밍 - 메모이제이션, 타뷸레이션

동적 프로그래밍(Dynamic Programming): 큰 문제를 작은 문제로 나누고, 그 결과를 저장하여 중복 계산을 피하는 최적화 기법 메모이제이션 (Memoization): 계산 결과를 저장해서 여러 번 계산하지 않도록 하는 기법하향식(Top-Down) 방식재귀를 사용해 큰 문제부터 내려가며 계산이미 계산한 결과는 저장해두고 다시 사용함 메모이제이션의 장단점장점재귀 덕분에 하향식 계산 방식으로 어려운 문제를 간단히 해결할 수 있음중복 계산을 하지 않아서 속도가 빠름 단점재귀를 사용하기 때문에 오버헤드가 큼 메모이제이션은 속도를 위해 메모리를 사용하기 때문에 메모리 사용량 증가 예시: 피보나치 수열 기본 재귀 방식function fibonacci1(n){ if(n == 0 || n ..

CS/알고리즘 2025.05.26

정렬 알고리즘: 퀵 정렬(Quick Sort)

퀵 정렬 (Quick Sort): 기준값(피벗)을 정해 작은 값은 왼쪽, 큰 값은 오른쪽으로 나누며 정렬하는 빠른 정렬 알고리즘 분할 정복 알고리즘재귀로 정렬하는 알고리즘 퀵 정렬의 성능시간 복잡도평균: Θ(n log n) → 피벗이 배열의 절반씩 나누는 경우최악: O(n²) → 피벗이 한쪽 끝에 치우친 경우→ 하지만 최악의 경우는 거의 발생하지 않음성능 평가병합 정렬이 평균 성능만 보면 더 나을 수 있지만, 퀵 정렬은 실제로 더 적은 비교와 메모리 사용량으로 인해더 빠르고 효율적인 알고리즘으로 평가됨 퀵 정렬의 장단점장점 전체적으로 성능이 좋음 단점 전체적으로 성능이 좋음 퀵 정렬의 흐름[ 5, 3, 7, 2, 6, 4, 9, 1, 8 ]정렬을 시작하기 전에 배열에서 하나를 피벗(pivot)..

CS/알고리즘 2025.05.26

정렬 알고리즘: 병합 정렬(Merge Sort)

병합 정렬 (Merge Sort): 큰 배열을 잘게 나눴다가, 정렬하면서 다시 합쳐 정렬을 완료하는 알고리즘분할 정복 알고리즘(divide and conquer): 복잡한 문제를 한 번에 해결하려 하지 말고, 작은 문제로 쪼개서 각각 해결한 후 결과를 합쳐 전체 문제를 해결하는 방식 재귀로 정렬하는 알고리즘 병합 정렬의 성능시간 복잡도: O(n log n)병합 정렬에서 성능을 평가하는 부분 ⇒ Merge() 함수 내에서 흩어진 배열을 합치는 부분 병합 정렬의 장단점장점전체적으로 성능이 좋음 단점이해와 구현이 어려움 병합 정렬 알고리즘 흐름원본: 3 5 2 4 1 7 8 61단계: 3 5 2 4 1 7 8 6 → 2개로 쪼갬2단계: 3 5 2 4 1 7 8 6 → 4개로 쪼갬3단계:..

CS/알고리즘 2025.05.26

컴파일과 프로세스

프로그래밍 언어프로그래밍 언어는 코드를 어떻게 실행하느냐에 따라 컴파일 언어와 인터프리터 언어로 나뉨 컴파일 언어: 개발자가 코드를 작성하고 컴파일 과정을 거쳐 0과 1로 된 기계어로 실행 파일을 만듦컴파일 과정에서 코드의 문법 검사를 시행하고, CPU에서 처리 가능한 기계어로 실행 파일을 만들어놓기 때문에 실행 속도가 빠름대표적인 컴파일 언어: C, C++, Go 등 인터프리터 언어: 개발자가 작성한 코드를 미리 기계어로 만들지 않고 실행 시 코드를 한 줄씩 해석해서 실행하는 언어미리 컴파일하지 않기 때문에 실행 도중에 오류가 발생할 수 있고, 실행 속도도 컴파일 언어에 비해 느림대표적인 인터프리터 언어: Python, JavaScript 등 컴파일 과정개발자가 작성한 코드가 실행 파일로 만..

CS/운영체제 2025.05.25