반응형

개발공부 40

[운영체제] 컨텍스트 스위칭이란?

**컨텍스트 스위칭(Context Switching)**은 운영 체제가CPU의 실행을 하나의 프로세스나 스레드에서 다른 프로세스나 스레드로 전환하는 과정입니다.이 전환 과정은 CPU가 동일한 프로세서에서 여러 작업을 처리하는 멀티태스킹 환경에서 발생합니다.1. 컨텍스트 스위칭의 필요성멀티태스킹: 여러 프로세스나 스레드가 동시에 실행되고 있다고 가정할 때, 운영 체제는 각 프로세스나 스레드에게 CPU를 분배하고, 이를 빠르게 전환하여 마치 모든 작업이 동시에 실행되는 것처럼 보이게 합니다.CPU 자원 공유: 여러 프로세스가 CPU 자원을 공평하게 사용할 수 있도록, 운영 체제는 각 프로세스의 실행을 주기적으로 전환하여 CPU 시간을 나눕니다. 이 과정에서 발생하는 것이 바로 컨텍스트 스위칭입니다.2. 컨텍..

개발공부/CS 2025.02.16

[운영체제] 스레드란?

**스레드(Thread)**는 프로세스 내에서 실행되는 가장 작은 실행 단위입니다. 스레드는 프로세스의 자원을 공유하며, 독립적으로 실행되는 코드의 흐름을 나타냅니다. 하나의 프로세스는 여러 스레드를 가질 수 있으며, 각 스레드는 독립적인 실행 흐름을 가집니다. 여러 스레드가 동시에 실행되는 방식을 **멀티스레딩(Multi-threading)**이라고 합니다.1. 스레드의 기본 개념프로세스와 스레드의 관계:프로세스는 자원을 독립적으로 가진 실행 단위로, 각 프로세스는 자신만의 메모리 공간, 코드, 데이터 등을 가집니다.스레드는 하나의 프로세스 내에서 실행되는 코드의 흐름으로, 같은 프로세스 내의 다른 스레드들과 메모리와 자원을 공유합니다.스레드 간의 자원 공유는 메모리 공간, 파일 디스크립터, I/O 자..

개발공부/CS 2025.02.16

[운영체제] 프로세스란?

**프로세스(Process)**는 실행 중인 프로그램을 의미합니다. 프로그램은 디스크에 저장된 코드인 반면, 프로세스는 실행을 위해 메모리에서 로드되고 실행되는 동적인 상태를 가집니다. 프로세스는 운영 체제에서 자원을 할당받아 실행되고, 프로그램 코드, 데이터, 시스템 자원 등을 포함한 여러 요소들로 구성됩니다.1. 프로세스의 구성 요소프로그램 코드: 실행 중인 코드 자체로, 명령어들이 포함됩니다.프로세스 상태: 프로세스가 현재 어떤 상태에 있는지 (실행 중, 대기 중, 종료 등).레지스터(Register): CPU 내부의 레지스터 값을 포함하여, 현재 실행 상태를 나타내는 값들이 저장됩니다.프로그램 카운터(Program Counter): 현재 실행 중인 명령어의 메모리 주소를 나타냅니다.힙(Heap):..

개발공부/CS 2025.02.16

[운영체제] 바이트 오더링(Byte Ordering)?

바이트 오더링(Byte Ordering) 또는 **엔디안(Endian)**은 컴퓨터 시스템에서 멀티바이트 데이터를 메모리에 저장할 때, 각 바이트의 저장 순서를 정의하는 방식입니다. 즉, 멀티바이트 값을 메모리에 저장할 때, 그 값이 어떤 순서로 저장될지를 결정하는 규칙입니다.1. 엔디안(Endian)의 종류빅 엔디안(Big Endian):가장 중요한 바이트(상위 바이트)가 메모리의 낮은 주소에 저장됩니다.예를 들어, 4바이트 값 0x12345678을 빅 엔디안 방식으로 저장하면, 메모리에는 다음과 같이 저장됩니다:주소: 0x00 0x01 0x02 0x03값: 0x12 0x34 0x56 0x78즉, 최상위 바이트인 0x12가 먼저, 최하위 바이트인 0x78이 마지막에 저장됩니다...

개발공부/CS 2025.02.16

[자료구조] 트리(Tree)란?

**트리(Tree)**는 계층적(hierarchical) 구조를 가진 데이터 구조로, **노드(Node)**들로 구성됩니다. 트리 구조는 하나의 루트(root) 노드에서 시작해 하위 노드들로 분기하는 방식으로 이루어져 있으며, 각 노드는 여러 개의 자식 노드를 가질 수 있습니다.1. 기본 구성 요소루트(Root): 트리의 최상위 노드. 트리 구조에서 모든 노드는 루트에서 시작하여 탐색됩니다.노드(Node): 데이터를 포함하는 기본 단위로, 트리의 각 요소를 나타냅니다.간선(Edge): 부모 노드와 자식 노드를 연결하는 선. 트리 내의 노드들은 간선으로 연결됩니다.자식(Child): 부모 노드에서 분기된 하위 노드.부모(Parent): 자식 노드를 가진 노드.리프(Leaf): 자식이 없는 노드, 트리의 끝..

개발공부/CS 2025.02.16

[자료구조] Linked List란?

**Linked List (링크드 리스트)**는 데이터를 **노드(Node)**라는 단위로 저장하는 선형 데이터 구조입니다.각 노드는 데이터와 **다음 노드에 대한 참조(혹은 포인터)**를 가지고 있어,데이터를 연속된 메모리 공간에 저장하는 대신,각 노드가 다른 노드를 참조하면서 연결됩니다.1. 구조**노드(Node)**는 두 가지 주요 요소로 구성됩니다:데이터: 실제로 저장하려는 값이나 객체다음 노드를 가리키는 포인터(혹은 참조): 리스트 내에서 다음 노드를 가리키는 참조(포인터)를 가짐예시로, 각 노드는 다음과 같이 구조화됩니다:[데이터 | 다음 노드 포인터] → [데이터 | 다음 노드 포인터] → [데이터 | null]마지막 노드는 null을 참조하여 끝을 나타냅니다.2. 종류단일 연결 리스트 (S..

개발공부/CS 2025.02.16

[자료구조] Linked List와 Array List 차이는?

링크드 리스트와 어레이 리스트는 모두 데이터를 저장하는 자료 구조이지만, 구현 방식과 성능 특성에서 차이가 있습니다.1. 구현 방식어레이 리스트 (Array List):내부적으로 연속된 메모리 공간을 사용하여 데이터를 저장합니다.배열로 구현되며, 인덱스를 사용해 요소에 접근합니다.고정된 크기의 메모리 블록을 사용하고, 크기가 초과하면 크기를 늘리기 위해 새로운 배열을 할당하고 기존 값을 복사하는 방식으로 처리됩니다.링크드 리스트 (Linked List):각 요소가 데이터와 '다음' 요소를 가리키는 포인터(혹은 참조)를 포함하는 노드로 구성됩니다.요소들이 연속된 메모리 공간에 저장되지 않고, 각각의 노드가 다른 노드를 참조하는 형태입니다.2. 특징어레이 리스트:장점:인덱스 접근 시간: O(1)로 빠릅니다...

개발공부/CS 2025.02.16

해시 테이블(Hash Table)과 시간복잡도 관계

**해시 테이블이란?**- 키(Key)를 값(Value)에 매핑하는 자료구조- 해시 함수를 사용하여 키를 배열의 인덱스로 변환- 평균적으로 O(1)의 시간복잡도로 데이터 접근 가능**시간복잡도**기본 연산:1. 삽입(Insert): O(1) 평균, O(n) 최악2. 삭제(Delete): O(1) 평균, O(n) 최악3. 검색(Search): O(1) 평균, O(n) 최악```python# 해시 테이블 구현 예시class HashTable: def __init__(self, size): self.size = size self.table = [[] for _ in range(size)] def hash_function(self, key): return ..

개발공부/CS 2025.02.16

[자료구조] 레드블랙 트리

레드블랙 트리는 모든 노드를 빨간색 또는 검은색으로 색칠합니다.그리고 연결된 노드들은 색이 중복되지 않도록 관리됩니다. 레드블랙 트리는 자가 균형 이진 탐색 트리의 한 종류로, 각 노드에 색상(빨간색 또는 검은색)을 부여하여 균형을 유지합니다.**기본 규칙**1. 모든 노드는 빨간색 또는 검은색2. 루트는 항상 검은색3. 모든 리프(NIL)는 검은색4. 빨간 노드의 자식은 모두 검은색5. 임의의 노드에서 그 노드의 자손인 리프까지 가는 경로들은 모두 같은 수의 검은 노드를 포함**구현 예시**```pythonclass Node: def __init__(self, key): self.key = key self.left = None self.right = None ..

개발공부/CS 2025.02.16

[자료구조] AVL 트리란?

AVL 트리란 한 쪽으로 값이 치우치는 이진 균형트리의 한계점을 보완하기 위해 만들어진 균형 잡힌 이진트리.AVL은 항상 좌/우로 데이터를 균형잡힌 상태로 유지하기 위해서 추가연산을 진행. AVL 트리는 자가 균형 이진 탐색 트리(self-balancing binary search tree)의 한 종류입니다. 모든 노드의 왼쪽과 오른쪽 서브트리의 높이 차이가 최대 1을 유지하도록 자동으로 균형을 잡습니다.**핵심 개념**1. 균형 인수(Balance Factor)- BF = 왼쪽 서브트리 높이 - 오른쪽 서브트리 높이- 모든 노드의 BF는 -1, 0, 1 중 하나여야 함2. 회전 연산```pythonclass Node:    def __init__(self, key):        self.key = k..

개발공부/CS 2025.02.16
728x90