🖥️ 목표프로그래밍을 위한 편리한 추상화 제공부족한 메모리 자원을 경쟁 프로세스간 할당 → 최소한의 오버헤드프로세스 간 고립된 환경 제공🔍 Single/Batch Programming간단하게, 하나의 프로세스를 위한 것이므로 메모리를 다 쓰면 된다.🔍 Multiprogramming한 번에 여러 프로세스를 돌려야 함여러 작업의 I/O 및 CPU가 오버랩각 프로세스는 연속적인 공간과 요구하는 메모리 사이즈가 다름요구사항보호 : 각 프로세스가 사용하는 주소 공간을 제한해야 함빠른 변환 : 가상 메모리에서 물리 메모리로의 변환이 빨라야 함빠른 context switch : (보호 및 변환을 위해) 메모리 하드웨어 업데이트가 빨라야 함💡 1. Fixed Partitions📌 물리 메모리를 일정한 크기의 ..
🖥️ 들어가며 큐 (Queue) 는 선입선출 (First In First Out) 구조입니다. 가장 대표적인 예시로는 식당에서 줄 서는 상황이라 할 수 있을 것입니다. 큐는 다양한 애플리케이션에서 매우 중요한 역할을 합니다. 예를 들어, 운영체제에서는 프로세스 관리를 위해 작업들을 큐에 넣고, 네트워크 시스템에서는 데이터 패킷의 전송을 위해 큐를 사용하여 데이터의 순서를 유지합니다. 또한 프린터의 작업 대기열, 웹 서버의 요청 처리 등 실생활에서도 큐의 원리를 적용한 시스템을 쉽게 찾아볼 수 있습니다. 큐는 여러 가지 방식으로 구현될 수 있습니다. 가장 기본적인 형태는 선형 큐(Linear Queue)이며, 이외에도 순환 큐(Circular Queue), 우선순위 큐(Priority Queue), 덱(D..
우측 상단에서 다크 모드를 끌 수 있습니다! 🖥️ 들어가며 스택(Stack)은 우리 주변에서도 흔히 볼 수 있는 자료구조입니다. 문서 수정 시 되돌리기나, Ctrl-C Ctrl-V라는 좋은 예도 있고, 가장 대표적으로 사용되는 프링글스 과자 예시도 직관적으로 다가옵니다. 즉, 스택은 말 그대로 ‘쌓아놓은 어떤 더미’를 뜻합니다. 스택 스택의 가장 큰 특징은 후입선출(LIFO : Last-In First-Out)입니다. 아래 그림을 보면 이해하기 쉽습니다. 요는 가장 최근에 들어온 데이터가 가장 먼저 나간다 입니다. 스택의 구조 Push : 데이터 삽입 연산 Pop : 데이터 삭제 연산 요소(데이터) : 삽입된 데이터 스택 하단 : 가장 먼저 삽입된 데이터가 있는 곳, 최하단 스택 상단 : 스택의 입출력이..
🖥️ 들어가며 리스트는 프로그래밍에서 매우 중요한 자료 구조 중 하나입니다. 이는 순서가 있는 데이터의 집합을 관리하기 위한 방법으로, 데이터를 효율적으로 저장하고 검색, 수정, 삭제하는 작업을 수행할 수 있도록 돕습니다. 리스트는 크게 두 가지 유형으로 나눌 수 있습니다. 순차 리스트 (Sequential List) 순차 리스트는 가장 기본적인 형태의 리스트로, 배열을 기반으로 구현됩니다. 배열의 인덱스를 사용하여 데이터에 접근하기 때문에 특정 위치의 데이터를 빠르게 찾거나 읽어올 수 있습니다. 이러한 특성 덕분에 생성 및 데이터 검색(또는 출력) 작업은 순차 리스트에서 매우 효율적으로 이루어집니다. 그러나 순차 리스트는 데이터의 삽입이나 삭제가 비효율적입니다. 특히 리스트의 중간에서 삭제나 삽입 연산..
순환 (Recursion) 흔히 재귀라고 부른다. 즉, 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다. 순환으로 구현할 수 있는 알고리즘의 대다수는 반복으로도 구현할 수 있다. 다만 순환은 단순하지만 반복이 복잡해지거나, 그 반대가 되는 알고리즘이 존재한다. 순환의 예 팩토리얼 팩토리얼은 다음과 같이 정의된다. n!을 정의하는 와중에 (n-1)!이 필요하므로, 순환으로 해결할 수 있다. 간단하게 코드로 구현해 보자. 참고로 팩토리얼의 경우에는 순환보다 반복이 빠르다고 알려져 있다. int factorial(int n) { if (n