큐(Queue) - Array와 LinkedList로 구현, 원형큐, 덱/데크(Deque)
·
Computer Science/Data Structure
큐란?큐는 FIFO(First In First Out) 원칙을 따르는 선형 데이터 구조이다. 즉, 삽입된 순서대로 삭제가 처리된다.   큐 연산 주요 연산인 enqueue, dequeue 외에도 peek(front), empty, size 등의 연산이 있다.enqueue: 큐의 뒤(rear) 끝에 새로운 데이터를 추가하는 연산dequeue: 큐의 앞(front) 끝에서 데이터를 제거하고 반환하는 연산front 또는 peek: 큐의 앞에 있는 데이터를 제거하지 않고 반환하는 연산empty: 큐가 비어 있는지 확인하는 연산size: 큐에 있는 데이터의 개수를 반환하는 연산   큐 구현큐도 스택과 마찬가지로 배열이나 연결 리스트를 사용하여 구현할 수 있다.데이터 크기 예측 가능한 경우         ->  ..
스택(Stack) - Array와 LinkedList로 구현
·
Computer Science/Data Structure
스택이란?LIFO(Last In First Out) 구조를 갖는 자료구조를 말한다. 즉, 나중에 삽입된 데이터가 먼저 삭제되는 구조이다.데이터를 일시적으로 저장할 때 매우 유용한 선형 데이터 구조이다.   스택 연산스택에는 push, pop과 같은 주요 연산과 peek(top), empty, size 등의 연산을 가질 수 있다. push: 스택의 맨 위에 데이터를 삽입하는 연산pop: 스택의 맨 위에 있는 데이터를 삭제하고 반환하는 연산peek 또는 top: 스택의 맨 위에 있는 데이터를 삭제하지 않고 반환하는 연산empty: 스택이 비어 있는지를 확인하는 연산size: 스택에 있는 데이터의 개수를 반환하는 연산   구현스택은 배열이나 연결리스트를 사용하여 구현할 수 있다.데이터 크기 예측 가능한 경우 ..
배열(Array)과 리스트(List), ArrayList와 Linked List
·
Computer Science/Data Structure
배열(Array)배열은 동일한 데이터 타입의 요소들이 연속된 메모리 공간에 저장된 자료 구조이다.특징 : 배열 선언 시 크기가 고정된다.한번 결정된 크기는 변경할 수 없다.인덱스를 사용하여 요소에 빠르게 접근할 수 있으며, 인덱스는 0부터 시작한다.배열 안의 모든 요소가 동일한 데이터 타입을 가진다.연속된 메모리 공간에 할당 된다. Java에서 배열 다루기// 배열 만들기int[] arr1;// 배열 만들면서 크기 지정int[] arr2 = new int[5];// 배열 만들면서 크기+값 지정int[] arr3 = {1, 2, 3, 4, 5};// arr3 배열에서 index 0인 요소에 접근System.out.println(arr3[0]); // 1   Java의 Arrays 클래스Java에서 배열 자..
메모리 할당 - 연속할당(고정분할, 가변분할)과 불연속할당(페이징, 세그멘테이션, 페이지드세그멘테이션), 단편화
·
Computer Science/Operating System
단편화내부단편화외부단편화메모리 블록 안에 사용되지 않는 공간이 발생하는 현상.메모리 블록 밖에 사용 가능한 메모리 공간이 여러 조각으로 나뉘어, 필요한 만큼의 큰 연속된 메모리 블록을 확보하지 못하는 현상.      프로그램에 필요한 메모리를 할당할 때 시작 메모리 위치, 메모리 할당 크기를 기반으로 할당하며, 연속할당과 불연속 할당으로 나뉜다.  연속할당 (contiguous memory allocation)하나의 연속된 메모리 블록에 프로세스를 할당하는 방식. 물리적으로 연속된 공간을 사용하는 메모리 관리 기법이다. 고정 분할 (Fixed Partitioning)메모리를 일정한 크기로 분할하여 프로세스를 할당하는 방식. 즉, 시스템이 시작될 때 고정된 크기의 파티션으로 나누고 이 크기가 변하지 않는다..
캐시 종류와 캐시 매핑( 직접매핑, 연관매핑, 집합-연관 매핑)
·
Computer Science/Operating System
캐시(cache)란?캐시는 컴퓨팅에서 자주 사용되는 데이터나 연산 결과를 임시로 저장하는 고속 메모리이다.메인 메모리보다 빠른 속도로 데이터에 접근할 수 있도록 설계되어 있어, 시스템 성능을 크게 향상시킬 수 있다.특히 CPU와 메모리 간의 병목 현상을 줄이는 데 중요한 역할을 한다.  캐시 히트(Cache Hit)요청한 데이터가 캐시에 존재하는 경우를 뜻함. 캐시 히트가 발생하면 데이터 접근시간이 매우 짧아짐.캐시 미스(Cache Miss)요청한 데이터가 캐시에 없는 경우를 뜻함. 캐시 미스가 발생하면 메인메모리에서 데이터를 가져와야함. 접근시간 길어짐.캐시 일관성(Cache Coherency)여러 캐시가 동일한 메모리 영역을 공유할 때 데이터 일관성을 유지하는 메커니즘. 특히 멀티프로세서 시스템에서 ..
교착 상태(deadlock)와 은행원 알고리즘
·
Computer Science/Operating System
교착 상태란?두 개 이상의 프로세스나 스레드가 서로 상대방의 작업이 끝나기를 무한정 기다리며, 결국 아무것도 완료되지 않는 상태.   교착 상태의 원인 (조건)상호배제(Mutual Exclusion):  자원은 한번에 하나의 프로세스만 사용 가능점유대기(Hold and Wait): 최소 하나의 자원을 점유하고 있으며, 추가 자원을 요청하여 대기중인 프로세스가 존재비선점(Non-preemptive): 자원을 강제로 뺏을 수 없음환형 대기(Circular Wait): 대기하고 있는 프로세스들 간의 순환적인 고리가 형성됨.4가지 조건이 모두 충족되어도 교착상태는 발생하지 않을 수 있다. 그러나 4가지 조건이 모두 충족되어야 “교착상태가 일어날 수” 있다.     교착 상태 해결 방법 교착상태 예방(Preven..
경쟁상태 해결하기 - 뮤텍스, 세마포어, 모니터
·
Computer Science/Operating System
경쟁상태 해결 조건여러 프로세스나 스레드가 공유 자원에 접근할 때 데이터의 일관성과 무결성을 보장하기 위해 아래와 같은 조건을 만족해야한다. 상호배제 (Mutual Exclusion)임계영역에 한번에 하나의 프로세스나 스레드만 접근할 수 있도록 해야함.즉, 어떤 프로세스가 임계영역에 있을 때 다른 프로세스는 그 임계영역에 들어갈 수 없음. 진행의 융통성(Progress)임계영역에 들어가려는 프로세스가 없으면, 임계영역에 들어갈 수 있는 프로세스가 이를 결정할 수 있어야 함.즉, 임계영역에 들어갈 수 있는 프로세스를 선택하는 과정이 지연되지 않고 진행되어야 함.결정은 임계영역에 있지 않은 프로세스만 참여할 수 있음. 한정 대기 (Bounded Wating)특정 프로세스가 임계영역에 들어가는 것이 무한정 지..
공유자원과 경쟁 상태, 임계영역
·
Computer Science/Operating System
공유 자원 (Shared Resource)공유자원이란 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 자원을 말한다. 공유 자원의 특징다중접근여러 프로세스나 스레드가 동시에 접근할 수 있기 때문에 관리가 필요.데이터 일관성올바르게 관리되지 않으면 데이터 일관성이 깨질 수 있음동기화 필요여러 접근을 조율하기 위한 동기화 매커니즘 필요공유 자원의 예시여러 스레드가 동시에 접근하는 전역변수여러 프로세스가 동시에 접근하는 파일메모리, 파일, 데이터베이스...  경쟁 상태 (Race Condition)두개 이상의 프로세스나 스레드가 공유 자원에 동시에 접근할 때 발생하는 문제.동시에 접근을 시도할 때 타이밍이 예상되는 결과 값에 영향을 줄 수 있는 상태. 이를 잘 해결하지 못하면 데이터 정합성, 데이터..
멀티태스킹(Multitasking)과 CPU 스케줄링(선점형, 비선점형, 라운드로빈, 우선순위 기반 스케줄링, FIFO, SFJ ...)
·
Computer Science/Operating System
멀티태스킹(Multitasking)이란?여러 프로세스 내에서 여러 작업을 동시에 수행하는 것을 의미한다. 정확히는, 멀티태스킹은 CPU의 스케줄링을 통해 "동시에 수행하는 것처럼 보이는 것"이다.멀티프로세싱은 실제로 CPU병렬 처리를 통해 동시에 작동하는 것으로 차이가 있다.   멀티태스킹 스케줄링 방식멀티프로그래밍 : 여러 프로그램이 메모리에 동시에 적재되어 CPU가 필요할 때마다 프로그램을 실행시분할 : 여러 프로세스가 동시에 실행되는 것처럼 보이도록 각 프로세스에 시간 할당량을 주고 CPU를 빠르게 전환해주는 방식실시간 시스템 : 시스템의 응답시간이 중요한 환경에서 특정 작업을 정해진 시간안에 완료해야 하는 방식  스케줄링 알고리즘비선점형 스케줄링 (Non-preemptive Scheduling)프..