최신글

CS

[CS 스터디] 5주차 OSI 7 계층 & TCP/IP 모델

[5주차] OSI 7 계층 & TCP/IP 모델 OSI 7 계층 (각 계층의 역할과 대표 프로토콜) TCP/IP 4계층 모델 HTTP vs HTTPS HTTP 상태 코드 (2xx, 3xx, 4xx, 5xx) 🔵 OSI 7 계층 (각 계층의 역할과 대표 프로토콜) 네트워크 통신을 7단계로 나눈 참조모델이다. 각 계층은 데이터를 단계별로 처리하며, 계층 간에는 정해진 방식으로만 데이터를 주고받는다. | 계층 | 이름 | 전송 단위 | 주요 역할 | 주요 프로토콜/기술 | | ---- | ------------ | ------------------- | ----------------------------------- | ---------------------------------------------- | | 7 | Application | 데이터 | 사용자와 직접 상호작용 | HTTP, HTTPS, FTP, SMTP, DNS, Telnet, WebSocket | | 6 | Presentation | 데이터 | 데이터 표현, 인코딩/암호화 | SSL, TLS, JPEG, MPEG, ASCII, XML, JSON | | 5 | Session | 데이터 | 세션 관리, 대화 제어 | NetBIOS, PPTP, RPC, SOCKS, OAuth | | 4 | Transport | 세그먼트/데이터그램 | 신뢰성 보장, 흐름 제어 | TCP, UDP | | 3 | Network | 패킷 | 라우팅, IP 기반 | IP, ICMP, ARP, RIP, OSPF, BGP | | 2 | Data Link | 프레임 | 물리적 전송 단계, MAC 기반 | Ethernet, Wi-Fi(802.11), PPP, Frame Relay | | 1 | Physical | 비트 | 신호 전송, 케이블.무선 등 물리 매체 | UTP, 광섬유, RS-232, 모뎀, 허브, 리피터 | Application Layer 역할 사용자가 직접 사용하는 웹 브라우저, 이메일 클라이언트, 메신저 등 응용 프로그램이 네트워크와 상호작용하도록 합니다. 데이터 생성/해석이 이 계층에서 이뤄지며, 사용자와 가장 밀접한 계층입니다. 예시 브라우저에서 URL을 입력 → HTTP 요청 → 웹 서버 응답 → 웹페이지 출력 주요 프로토콜 HTTP/HTTPS: 웹 문서 전송 SMTP, IMAP, POP3: 이메일 DNS: 도메인 → IP 주소 변환 FTP, SFTP: 파일 전송 WebSocket: 실시간 통신 REST API, GraphQL, gRPC: 현대적 서비스 인터페이스 Presentation Layer 역할 데이터의 표현 형식을 처리합니다. 서로 다른 시스템 간 데이터 인코딩, 압축, 암호화/복호화 등을 수행하며, 하위 계층이 이해할 수 있도록 데이터를 변환합니다. 예시 서로 다른 문자 인코딩(UTF-8 ↔ UTF-16) 변환 SSL/TLS를 통한 암호화 처리 JSON 직렬화, MIME 타입 처리 주요 기능 인코딩/디코딩 압축/해제 (예: gzip) 암호화/복호화 (SSL, TLS) 직렬화/역직렬화 (JSON, XML) Session Layer 역할 애플리케이션 간 세션 수립, 유지, 종료를 관리하며, 대화의 시작-종료 시점과 복구 지점을 제어합니다. 동시에 여러 세션이 있더라도 각각을 독립적으로 관리합니다. 예시 온라인 은행 로그인 이후, 각 사용자의 요청은 독립된 세션으로 처리됨. WebSocket 커넥션 유지, OAuth 로그인 처리 등도 포함됩니다. 주요 기능 세션 관리 (connect-disconnect) 상태 유지 (로그인 정보 등) 동기화 및 체크포인트 Transport Layer 역할 양 끝단 간의 신뢰성 있는 데이터 전송을 담당하며, 오류 복구, 흐름 제어, 혼잡 제어 등을 수행합니다. 주요 프로토콜 TCP: 연결 지향, 신뢰성 보장, 3-way handshake UDP: 비연결, 빠른 전송, 실시간 스트리밍 핵심 기능 오류 감지 및 재전송 흐름 제어 (Flow Control) 혼잡 제어 (Congestion Control) 멀티플렉싱 (여러 포트를 공유) Network Layer 역할 송신지에서 목적지까지 데이터 패킷을 전달하며, 라우팅 및 논리 주소(IP) 기반으로 경로를 결정합니다. 전송 단위는 패킷(Packet)입니다. 예시 라우터가 목적지 IP에 따라 패킷을 전달 Ping, TraceRoute 등의 도구가 이 계층을 사용함 주요 프로토콜 및 기능 IP (IPv4, IPv6) ICMP (Ping, 오류 메시지 전달) 라우팅 프로토콜 (OSPF, BGP) NAT, 서브넷팅, 패킷 포워딩 Data Link Layer 역할 같은 네트워크 내의 기기 간 데이터 전송을 담당하며, 오류 감지, 충돌 처리, MAC 주소 기반 통신 등을 수행합니다. 전송 단위는 프레임(Frame)입니다. 예시 스위치가 MAC 주소 기반으로 프레임을 전달함 이더넷, Wi-Fi 등은 이 계층에서 동작 주요 기능 프레임 생성 및 전송 MAC 주소 기반 통신 오류 검출 (CRC) 흐름 제어, 충돌 감지 (CSMA/CD) Physical Layer 역할 비트를 전기/광/무선 신호로 변환하여 전송하며, 전압, 주파수, 케이블 종류 등 하드웨어적 신호 전달 방식 정의합니다. 예시 이더넷 케이블, 광섬유, 무선 주파수, 모뎀, 허브 등 데이터를 신호로 바꿔서 물리적 전송을 담당함 주요 요소 전압/주파수/전송 속도 전송 매체 (UTP, 광섬유, 무선) 변조/복조 (modulation/demodulation) 신호 동기화 🔵 TCP/IP 4계층 모델 실제 인터넷 및 네트워크에서 가장 널리 사용되는 실용 모델입니다. OSI 모델보다 계층 수가 적고 단순하지만 역할은 포괄적입니다. | TCP/IP 계층 | 주요 역할 | OSI 대응 계층 | 주요 프로토콜/기술 | | -------------------- | --------------------------------------- | ------------------ | -------------------------------------- | | Application Layer | 응용 간 통신, 데이터 표현, 세션 관리 | OSI 5 ~ 7계층 통합 | HTTP, FTP, SMTP, DNS, SSH, Telnet | | Transport Layer | 종단 간 신뢰성 보장, 흐름/혼잡 제어 | OSI 4계층 | TCP, UDP | | Internet Layer | IP 주소 기반의 라우팅 및 패킷 전송 | OSI 3계층 | IP, ICMP, ARP, IGMP, RIP, OSPF, BGP | | Network Access Layer | 물리적 네트워크 전송 (LAN, MAC 주소 등) | OSI 1~2계층 통합 | Ethernet, Wi-Fi, ARP, PPP, Frame Relay | 🔵 HTTP vs HTTPS | 항목 | HTTP | HTTPS | | ----------- | ------------------------------- | ------------------------------------- | | 보안성 | 없음 (평문 전송) | SSL/TLS를 통한 암호화 전송 | | 기본 포트 | 80 | 443 | | 인증서 사용 | 없음 | 필요 (인증기관에서 발급된 SSL 인증서) | | 데이터 보호 | 없음 | 도청 및 위변조 방지 | | 사용 사례 | 공개 정보 제공 (테스트 서버 등) | 로그인, 결제, 개인정보 처리 등 | | URL 예시 | http://example.com | https://example.com | HTTP는 클라이언트(브라우저)와 서버 간의 요청-응답을 처리하는 가장 기본적인 웹 통신 프로토콜입니다. 그러나 암호화되지 않은 평문 전송 방식을 사용하기 때문에 중간자가 패킷을 가로채면 내용을 쉽게 확인할 수 있습니다. 따라서 보안이 필요한 서비스에는 적합하지 않습니다. HTTPS는 HTTP 위에 SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security) 계층을 추가한 보안 버전입니다. 통신 데이터를 암호화하여 도청, 위·변조, 피싱 공격 등을 방지할 수 있으며, 서버는 클라이언트에게 디지털 인증서를 제공해 신뢰를 확보합니다. HTTPS를 사용하려면 서버가 CA(Certificate Authority) 로부터 발급받은 인증서를 갖고 있어야 하며, 사용자는 이 인증서를 통해 웹사이트의 진위 여부를 확인할 수 있습니다. 또한, 최신 브라우저는 HTTPS를 사용하지 않는 사이트에 대해 “보안되지 않음” 경고를 표시하고 있으며, SEO(검색엔진 최적화) 측면에서도 HTTPS를 사용하는 사이트가 더 유리합니다. 🔵 HTTP 상태 코드 (2xx, 3xx, 4xx, 5xx) 상태 코드 범주 | 범주 | 코드 범위 | 의미 | 대표 코드 및 설명 | | ---- | --------- | ------------------- | --------------------------------------------------------------------------------- | | 1xx | 100~199 | 처리 중 (정보 제공) | 100 Continue: 요청 계속 진행 가능 | | 2xx | 200~299 | 성공 | 200 OK: 성공201 Created: 리소스 생성됨 | | 3xx | 300~399 | 리다이렉션 | 301 Moved Permanently: 영구 이동302 Found: 임시 이동 | | 4xx | 400~499 | 클라이언트 오류 | 400 Bad Request: 문법 오류401 Unauthorized: 인증 필요404 Not Found | | 5xx | 500~599 | 서버 오류 | 500 Internal Server Error: 서버 내부 오류503 Service Unavailable: 점검 중 | 200 OK: 정상 처리 완료 301/302: 페이지 이동 400: 잘못된 요청 401: 인증 실패 403: 권한 없음 404: 존재하지 않는 리소스 500: 서버 문제

2025년 04월 20일 13:29

CS

[CS 스터디] 4주차 동기화 문제 + 세마포어 & 뮤텍스

[4주차] 동기화 문제 (Race Condition, Deadlock) + 세마포어 & 뮤텍스 동기화 문제 (Race Condition, Deadlock) 세마포어 & 뮤텍스 Race Condition (경쟁 상태) 공유 자원에 대해 여러 프로세스가 동시에 접근을 시도할 때, 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 발생하는 경우 커널 코드 실행 중 인터럽트 발생할 경우 프로세스가 시스템 콜을 하여 커널모드로 진입해 작업을 수행하는 도중 문맥 교환이 발생할 경우 멀티 프로세서에서 공유메모리 내의 커널 데이터에 접근할 경우 멀티 프로세서에서 공유 메모리 내의 커널 데이터에 접근할 경우 Deadlock (교착 상태) 둘 이상의 프로세스가 자원을 점유한 채, 서로 다른 프로세스가 점유하고 있는 자원을 기다리면서 무한히 대기 상태에 빠지는 현상. Deadlock 발생 조건 (4가지 모두 충족할 때 발생) Mutual Exclusion (상호 배제) 자원은 한 번에 하나의 프로세스만 사용할 수 있어야 한다. Hold and Wait (점유 대기) 최소한 하나의 자원을 보유한 프로세스가 다른 자원을 기다리며 대기한다. No Preemption (비선점) 이미 할당된 자원을 강제로 뺏을 수 없다. Circular Wait (순환 대기) 각 프로세스가 다음 프로세스가 점유하고 있는 자원을 요청하며 원형으로 기다리는 상태. Deadlock 해결 방법 예방 (Prevention): 네 가지 조건 중 하나라도 발생하지 않도록 설계 회피 (Avoidance): 자원의 상태를 고려하여 교착 상태가 발생하지 않도록 스케줄링 (ex. Banker’s algorithm) 탐지 (Detection): 교착 상태 발생 후 이를 감지하고 복구 복구 (Recovery): 프로세스를 강제로 종료하거나 자원을 회수하여 해결. Critical Section (임계 영역) 운영체제에서 여러 프로세스가 데이터를 공유하면서 수행될 때, 각 프로세스에서 공유 자원에 접근하는 프로그램 코드 부분을 의미한다. 프로세스 간 공유 자원을 접근하는 데 있어 문제가 발생하지 않도록 공유 자원의 독점을 보장해야 하는 영역이다. 임계 영역 문제를 해결하기 위해 아래의 3가지 조건을 충족해야한다. Mutual Exclusion (상호 배제) 한 프로세스가 자신의 critical section이면 다른 프로세스들은 critical section에 진입할 수 없다. Progress (진행) 아무도 critical section에 있지 않다면, 진입하고자 하는 프로세스를 진입하게 해줘야 한다. 즉 critical section에 아무도 진입하지 못하면 안되며, 다음에 어떤 프로세스가 critical section에 진입해야 하는지는 유한한 시간 내에 결정되어야 한다. Bounded Waiting (유한 대기) 프로세스가 critical section에 진입하기 위해 무한정으로 기다리는 현상(Starvation)이 발생해서는 안된다. 생산자-소비자 문제 critical section에 관련된 전통적인 문제로 생산자-소비자 문제가 있다. 생산자-소비자 문제에서 생산자 프로세스와 소비자 프로세는 서로 독립적으로 작업한다. 생산자는 물건을 계속 생산해 버퍼에 넣고, 소비자는 계속해서 버퍼에서 물건을 받아온다. 가운데에는 buf라는 원형 큐 자료구조가 존재하고, sum은 큐의 원소 수에 해당한다. producer는 계속해서 값을 넣어주고, consumer는 큐의 원소를 빼낸다. producer는 원소르 맨 뒤부터 넣지만, consumer는 맨 앞부터 빼낸다. 겉보기에는 문제 없어보이지만, producer, consumer 둘이 같이 실행되면 문제가 발생한다. 생산자와 소비자가 전역변수 sum에 접근하는 타이밍을 서로 맞추지 않기 때문이다. 즉, sum이 바로 critical section이며 race condition이 발생한다. 임계 영역 해결 유저모드 동기화 방식 운영체제나 하드웨어 명령 없이 사용자 수준에서 동기화를 구현하는 방법이다. 대표적인 알고리즘은 다음과 같다 플래그 변수(flag variable) 사용 각 프로세스가 진입 여부를 표시하는 Boolean 배열을 사용 단점: 상호 배제는 가능하지만 진행(Progress) 조건을 만족하지 못하는 경우가 있음 피터슨 알고리즘 (Peterson’s Algorithm) 2개의 프로세스 사이의 상호 배제를 보장하는 대표적인 알고리즘 두 가지 공유 변수 사용: - flag[i]: 프로세스 i가 임계 영역에 진입하고자 함을 나타냄 - turn: 누가 우선권을 가지는지를 나타냄 장점: Mutual Exclusion, Progress, Bounded Waiting 세 조건 모두 만족 Dekker’s Algorithm 초기의 소프트웨어 기반 상호 배제 알고리즘 Peterson보다 복잡하며 덜 효율적이지만, 이론적으로 중요한 의미를 가짐 Lamport’s Bakery Algorithm 여러 개의 프로세스에 대한 상호 배제를 지원 각 프로세스가 “번호표”를 받아 순서대로 critical section에 진입 실제 베이커리 대기 방식에서 착안 커널모드 동기화 방식 세마포어 (Semaphore) 프로세스 간 동기화 및 상호 배제를 위한 정수 변수. 공유 자원에 접근할 수 있는 최대 개수를 제한한다. 세마포어의 종류 - Counting Semaphore: 0 이상의 값을 가짐. 자원의 개수를 표현할 때 사용. - Binary Semaphore (Mutex와 유사): 값이 0 또는 1만 가짐. 한 번에 하나의 프로세스만 자원에 접근할 수 있음. 세마포어 연산 - P(S) 또는 wait(S): 세마포어 값을 1 감소시킴. 값이 음수가 되면 해당 프로세스는 블락됨 - V(S) 또는 signal(S): 세마포어 값을 1 증가시킴. 블록된 프로세스가 있으면 하나를 깨움 뮤텍스 (Mutex) Mutual Exclusion의 줄임말로, 오직 하나의 스레드만 공유 자원에 접근할 수 있도록 하는 상호 배제 도구이다. - 일반적으로 lock/unlock 메서드를 사용 - 한 스레드가 뮤텍스를 lock하면, 다른 스레드는 unlock될 때까지 대기 - 세마포어보다 단순하고, 1개의 자원에 대한 배타적 접근을 보장할 때 적합 Binary Semaphore vs Mutex Binary Semaphore는 리소스의 접근 제어를 위해 사용할 수 있지만, 누구나 signal을 호출할 수 있음 Mutex는 lock을 획득한 소유자만 unlock 가능 → 소유 개념이 존재

2025년 04월 15일 09:45

CS

[CS 스터디] 3주차 CPU 스케줄링 + 인터럽트 & 시스템 콜

[3주차] CPU 스케줄링 + 인터럽트 & 시스템 콜 CPU 스케줄링 알고리즘 인터럽트(Interrupt) 개념 및 종류 시스템 콜(System Call)과 사용자 모드 vs 커널 모드 🔵 CPU 스케줄링 알고리즘 CPU 스케줄링이란? 하나의 CPU 코어는 한 번에 하나의 프로세스만 실행 가능하다. 언제 어떤 프로세스에 CPU를 줄 지 결정하는 것이 CPU 스케줄링이다. 스케줄링의 목적 | 지표 | 설명 | 중요 대상 | | -------------------- | ------------------------------------------ | ------------------ | | Response time | 입력 -> 출력까지 걸리는 시간 | 사용자 입장 | | Throughput | 단위 시간 당 완료된 프로세스의 수 | 시스템 입장 | | Processor efficiency | CPU가 유효한 작업을 수행한 비율 | 운영체제 입장 | | Fairness | 모든 프로세스가 공평하게 CPU 기회를 얻는가 | 전체 프로세스 입장 | CPU 스케줄러가 스케줄링을 결정하는 타이밍 1. Running -> Waiging: I/O 요청 시 2. Running-> Ready: interrupt 발생 시 3. Waiting -> Ready: I/O 완료 시 4. Process 종료 시 1번, 4번만 발생: 비선점형(non-preemptive) 스케줄링 2번, 3번도 포함: 선점형(preemtive) 스케줄링 비선점형 스케줄링 프로세스가 CPU를 점유하면 끝날 때까지 유지하는 스케줄링이다. 필요한 경우에만 문맥 교환이 발생하므로 오버헤드가 적다. 배치 순서에 따라 효율성 차이가 크다. 선점형 스케줄링 운영체제가 CPU를 강제로 회수 가능한 스케줄링이다. 짧은 작업을 먼저 처리하는 것이 가능하므로 효율적이다. 하지만 잦은 문맥교환으로 오버헤드가 커질 가능성이 있다. FCFS (First-Come-First-Served) 프로세스를 도착한 순서대로 처리하는 방식이다. 구현이 간단하고 직관적이지만, 대기 시간이 길어질 수 있는 단점이 있다. 특히 긴 작업이 먼저 도착하면 후속 작업들이 오래 기다리는 문제가 발생한다. RR (Round-Robin) 모든 프로세스에 동일한 시간 할당량(time quantum)을 주고 순차적으로 실행하는 방식이다. 시간이 다 되면 CPU를 다음 프로세스에게 넘긴다. 공정성이 뛰어나며, 대화형 시스템에 적합한 방식이다. 단, 시간 할당량이 너무 크거나 작으면 성능 저하가 발생할 수 있다. 시스템의 response time을 최소화할 수 있는 q값을 찾아야 한다. SJF (Shortest Job First) 처리 시간이 가장 짧은 작업부터 실행하는 방식이다. 평균 대기시간이 짧아 효율적이다. 단, 정확한 실행시간을 예측하기 어렵기 때문에 실제 적용이 까다롭다. -> 예측이 잘못된 경우 response time이 지연된다. -> 긴 작업은 계속 뒤로 밀려, 최악의 경우 starvation 발생 SRT (Shortest Remaining Time) SJF의 선점형 버전이다. 남은 실행 시간이 가장 짧은 작업을 우선 실행한다. 새로운 작업이 도착할 때마다 비교하여 CPU를 선점할 수 있다. 짧은 작업 처리에 유리하지만, 문맥 교환이 자주 일어날 수 있다. 단, 짧은 작업이 계속 들어오면 긴 작업은 계속 밀리면서 -> starvation이 발생할 수 있고, -> 긴 작업의 응답 시간은 매우 나빠진다. HRRN (Highest Response Ratio Next) 우선순위를 (대기시간 + 서비스시간) / 서비스시간으로 계산하여 가장 높은 비율을 선택하는 방식이다. 긴 작업도 우선순위가 점점 높아지기 때문에 starvation을 방지할 수 있다. 비선점형 방식이며, 공정성과 효율성을 함께 고려하는 방식이다. MLQ (Multi-Level Queue) 프로세스를 우선순위나 성격에 따라 여러 개의 큐로 나누고, 각 큐마다 다른 스케줄링 알고리즘을 적용하는 방식이다. 큐 간 이동은 없으며, 큐 간 우선순위는 고정되어 있다. 예: 시스템 프로세스 큐 > 사용자 큐 등. MLFQ (Multi-Level Feedback Queue) MLQ의 확장형으로, 프로세스가 다른 큐로 이동할 수 있도록 피드백을 주는 방식이다. CPU 사용 시간이 길어지면 낮은 우선순위로 이동하며, 짧은 작업은 높은 우선순위를 유지한다. 복잡하지만 다양한 작업 특성에 유연하게 대응 가능하다. 🔵 인터럽트(Interrupt) 개념 및 종류 interrupt: 프로세서의 정상적인 명령 실행 흐름을 중단하고, 예외 상황이나 외부 이벤트를 처리할 수 있도록 해주는 메커니즘이다. 인터럽터의 종류 | 구분 | 설명 | | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Program | 프로그램 실행 중 발생하는 인터럽트 -> 산술 오버플롱, 0으로 나누기, 잘못된 명령어 실행, 접근 허용되지 않은 메모리 참조 등 | | Timer | 프로세서 내부의 타이머에 의해 발생. 운영체제가 주기적으로 수행해야 하는 작업들을 트리거 함 -> 시분할 스케줄링 | | I/O | 입출력 컨트롤러가 보내는 신호. 입출력 작업이 완료되었거나 에러가 발생했을 때 발생 -> 대부분의 I/O는 CPU보다 속도가 느림 -> 따라서 CPU는 I/O 장치의 완료를 기다려야 할 때가 있음 -> 이 때문에 인터럽트 기반 I/O처리를 사용하여 CPU가 효율적으로 작동하도록 함 | | Hardware Failure | 전원 장애, 메모리 오류 등 하드웨어 문제로 인해 발생하는 인터럽트 -> 전원 이상, 메모리 패러티 에러 등 | 인터럽트 핸들러 interrupt handler는 특정 I/O 장치를 처리하기 위한 프로그램이다. 일반적으로 운영체제 내부에 포함된 코드로, 인터럽트가 발생하면 해당 핸들러로 제어가 넘어가 해당 작업을 처리한다. 명령 주기에서 인터럽트 처리 흐름 CPU는 보통 Fetch -> Execute 순서로 명령을 수행하지만, 이 중간에 인터럽트가 발생할 수 있다. 명령어 수행 흐름 START → Fetch Stage • 다음 명령어를 메모리에서 가져온다. Execute Stage • 가져온 명령어를 실행한다. • 실행 중에는 인터럽트가 비활성화(Interrupts Disabled) 되어 있어 인터럽트를 무시한다. Interrupt Stage • 명령 실행이 끝난 후, 인터럽트 발생 여부를 확인한다. • 인터럽트가 발생했다면: • Interrupt Handler의 주소를 Program Counter(PC) 에 설정한다. • 실제 핸들러 코드는 다음 Fetch 단계에서 실행된다. Fetch Stage (인터럽트 핸들러 코드) • 이제 PC가 가리키는 인터럽트 핸들러의 첫 명령을 가져와 실행함으로써, • 키보드 입력 처리, I/O 완료 처리 등 인터럽트에 따른 적절한 작업이 수행된다. 인터럽트 발생 시 메모리와 레지스터의 변화 인터럽트 발생 흐름 인터럽트 발생 (I/O, Timer, 프로그램 오류 등) 현재 명령어 실행 완료 레지스터(PC, PSW 등) 상태 저장 -> 스택에 PUSH 인터럽트 핸들러 주소를 PC에 로드 인터럽트 핸들러 실행 시작 인터럽트 종료 후 복귀 흐름 인터럽트 처리 완료 저장해 두었던 레지스터 상태 POP + 복구 원래 사용자 프로그램으로 복귀 (PC를 복원하여 재시작) 🔵 시스템 콜(System Call)과 사용자 모드 vs 커널 모드 모드란 무엇인가 운영체제는 보안과 안정성을 위해 CPU 실행 권한을 두 가지로 나눈다. | 구분 | 사용자 모드 (User Mode) | 커널 모드 (Kernel Mode) | | --------- | ------------------------------- | ------------------------------------- | | 실행 주체 | 일반 사용자 프로그램 | 운영체제(커널) | | 권한 | 제한됨 (I/O 접근 불가 등) | 전체 시스템 자원 접근 가능 | | 가능 작업 | 단순 연산, 사용자 앱 로직 등 | 파일 시스템 접근, 메모리 관리, I/O 등 | | 예시 | 계산기 앱, 웹 브라우저 | 시스템 콜 처리, 드라이버, 스케줄러 등 | | 전환 방법 | 시스템 콜 또는 인터럽트 발생 시 | 시스템 콜 종료 후 복귀 | 사용자 모드에서는 커널 기능을 직접 실행할 수 없고, 반드시 시스템 콜을 통해서만 접근 가능하다. 시스템 콜이란? 사용자 프로그램이 운영체제의 기능을 사용하고 싶을 때 호출하는 인터페이스이다. 즉, 사용자 모드 → 커널 모드로 전환하기 위한 공식적인 방법이다. 시스템 콜 동작 흐름

2025년 04월 06일 00:08

CS

[CS 스터디] 2주차 메모리 관리 + 가상 메모리

[2주차] 메모리 관리 (페이징 & 세그멘테이션) + 가상 메모리 주소 공간, 물리적 주소, 논리적 주소, 주소 바인딩 메모리 관리 기법 (페이징, 세그멘테이션) 가상 메모리 (Demand Paging, Page Fault) 캐시 메모리, TLB(Translation Lookaside Buffer) 메모리 할당 전략 (First Fit, Best Fit, Worst Fit) 🔵 주소 공간, 물리적 주소, 논리적 주소, 주소 바인딩 주소 공간(Address Space) 컴퓨팅에서 주소 공간은 물리 메모리나 가상 메모리 등 다른 논리적 실체나 물리적 실체에 대응되는 주소의 범위를 정의한 공간을 말한다. 메모리 주소는 컴퓨터 메모리의 물리 위치를 파악하며, 데이터가 저장되는 위치를 가리킨다. 프로세스와 주소 공간 일반적으로 운영체제는 하나의 프로세스에 대하여 하나의 주소 공간을 제공하며, 프로세스 내의 사용자 스레드들은 주소공간을 공유한다. 물리적 주소(Physical Space) 메모리는 배열이기 때문에 인덱스 값을 가지는데, 이 인덱스 값을 '물리적 주소'라고 한다. 물리적 주소는 메모리 자체의 인덱스다. 논리적 주소(Logical Space) 논리적 주소는 CPU 입장에서의 메모리 주소, 또는 프로그램 실행 중에 CPU가 생성하는 주소이다. 따라서 가상 주소라고도 한다. CPU가 명령어를 실행하면서 생성하는 주소이다. 사용자 프로세스가 접근하는 주소는 모두 논리적 주소 변환 작업은 MMU(Memory Management Unit)에서 이루어진다. 논리적 주소와 물리적 주소의 관계 | 종류 | 의미 | 생성 주체 | 접근 방식 | | ----------- | -------------------------- | ---------- | ----------------------------- | | 논리적 주소 | CPU가 생성하는 가상의 주소 | CPU | 사용자 프로세스에서 직접 사용 | | 물리적 주소 | 실제 메모리 주소 | MMU가 계산 | 운영체제나 하드웨어에서 접근 | 논리적 주소가 필요한 이유 메모리 보호: 각 프로세스는 자신의 주소 공간만 보게 하여 다른 프로세스의 메모리를 침범하지 못하도록 한다. 멀티프로그래밍 지원: 서로 다른 프로세스들이 각자 독립된 주소 공간을 갖도록 함 프로그램의 이식성: 논리 주소를 사용하면 프로그램을 어느 메모리의 어느 위치에서든 실행할 수 있다. 주소 바인딩(Address Binding) 프로세스가 논리적 주소를 참조하기 때문에 실제 메모리에 데이터를 읽고 쓰기 위해서는 해당 논리적 주소를 물리적 주소로 매핑하는 과정이 필요하다. 이를 주소 바인딩이라고 한다. 주소 바인딩은 프로세스가 메모리에 접근할 수 있도록 하는 중요한 단계 MMU MMU 는 CPU와 메모리 사이에 존재하는 하드웨어 장치로, 논리적 주소 -> 물리적 주소 변환을 수행한다. 주요 역할 주소 변환: CPU가 생성하는 논리 주소에 Base Register 값을 더해 실제 물리 주소 계산 메모리 보호: Bounds Register를 통해 접근 가능한 메모리 범위 제한 🔵 메모리 관리 기법 (페이징, 세그멘테이션) 페이징(Paging) 이란 페이징은 가상 주소 공간과 물리적 주소 공간을 동일한 크기의 고정 블록으로 나누어 매핑하는 메모리 관리 기법이다. 가상 주소 공간을 나눈 고정 크기 블록 -> 페이지(Page) 물리 주소 공간을 나눈 고정 크기 블록 -> 프레임(Frame) 페이징은 내부 단편화 발생 가능 세그멘테이션(Segmentation) 이란 세그멘테이션은 프로그램의 논리적 구조에 따라 주소 공간을 여러개의 세그먼트로 나누어 메모리를 관리하는 방식이다. 세그먼트는 코드(Code), 데이터(Data), 스택(Stack)과 같이 의미 있는 논리 단위로 나뉜다. 각 세그먼트는 서로 다른 크기를 가질 수 있으며, 연속적인 메모리 공간을 할당받는다. 주소는 (세그먼트 번호, 오프셋) 형태로 표현한다. 세그멘테이션은 외부 단편화 발생 가능 🔵 가상 메모리 (Demand Paging, Page Fault) 가상 메모리(Virtual Memory) 실제 메모리 크기보다 요구 메모리가 큰 프로그램을 실행하기 위해 사용하는 메모리 관리 기법이다. 모든 데이터를 주 기억장치에 올리지 않고, 필요한 것들만 올려서 사용한다. 나머지는 디스크(보조 기억 장치)에 보관되며, 필요할 때만 메모리로 가져온다. CPU는 모든 주소를 가상 주소로 인식하고, 실제 주소는 MMU가 변환해서 사용한다. 요구 페이징(Demand Paging) 요구 페이징은 프로세스의 페이지 중 실제로 필요한 페이지만 메모리에 올리고, 나머지는 요청이 있을 때 디스크에서 가져오는 방식이다. 처음엔 메모리에 아무것도 올리지 않음 CPU가 요청한 주소가 없는 경우(Page Fault) 발생 이때 해당 페이지를 디스크에서 RAM으로 로드 페이지 폴트(Page Fault) 페이지 폴트(Page Fault)는 프로세스가 접근하려는 메모리 페이지가 물리적 메모리(RAM)에 존재하지 않을 때 발생하는 이벤트이다. 페이지 폴트 발생: 프로세스가 메모리에 접근하려 할 때, 해당 가상 주소에 대응하는 페이지가 물리적 메모리에 없으면 페이지 폴트가 발생, 인터럽트 처리: 페이지 폴트는 운영 체제에 의해 처리되는 인터럽트. 운영 체제는 이 인터럽트를 받고 현재 CPU의 상태를 저장한 후 페이지 폴트 처리 루틴을 실행. 페이지 로딩: 운영 체제는 필요한 페이지를 찾아 물리적 메모리로 로드함. 이 페이지는 디스크의 스왑 영역이나 해당 파일 시스템에서 가져올 수 있음. 페이지 테이블 업데이트: 페이지가 메모리에 로드된 후, 페이지 테이블이 업데이트되어 새로운 매핑 정보를 반영. 프로세스 재개: 페이지 로딩이 완료되면, CPU는 원래의 프로세스를 재개. 🔵 캐시 메모리, TLB(Translation Lookaside Buffer) 캐시 메모리 (Cache Memory) 캐시 메모리(Cache Memory) 는 CPU와 주기억장치(RAM) 사이에 위치한 고속의 임시 저장장치로, 자주 사용하는 데이터를 빠르게 접근하기 위해 사용된다. • CPU가 자주 접근하는 데이터를 임시로 저장하여 속도 향상 • 작지만 빠름, 용량은 작고, 가격은 비쌈 | 계층 | 설명 | | ------- | --------------------------------------------------- | | L1 캐시 | 가장 빠르고 CPU 내부에 위치. 용량 작음 | | L2 캐시 | CPU 와 메모리 사이에 위치. L1 보다 느리지만 용량 큼 | | L3 캐시 | 일부 고성능 CPU에서 제공. L2 보다 크고 느림 | TLB (Translation Lookaside Buffer) TLB(Translation Lookaside Buffer) 는 가상 주소 → 물리 주소 변환 시 사용되는 페이지 테이블 캐시이다. • MMU 내부에 존재하며, 최근 참조한 페이지 테이블 항목을 저장 • 페이지 테이블 접근 시간을 줄여주는 역할 작동 과정 1. CPU가 가상 주소 접근 2. MMU가 TLB에서 먼저 검색 3. 있다면 → 바로 물리 주소 반환 (TLB hit) 4. 없다면 → 페이지 테이블 접근 (TLB miss) 후 TLB에 등록 효과 • TLB hit → 주소 변환 속도 빠름 • TLB miss → 페이지 테이블 접근 → 속도 저하 🔵 메모리 할당 전략 (First Fit, Best Fit, Worst Fit) 메모리 공간을 요청된 크기에 따라 어떻게 효율적으로 배분할 것인가에 대한 전략 First Fit (최초 적합) • 가장 먼저 발견한 충분한 공간에 할당 • 빠르지만, 할당된 공간 이후에 작은 공간들이 남아 외부 단편화 발생 가능 Best Fit (최적 적합) • 가장 크기가 딱 맞는 공간에 할당 (남는 공간이 가장 적은 곳) • 공간 낭비가 적지만, 탐색 시간이 길 수 있음 • 외부 단편화가 많이 발생 Worst Fit (최악 적합) • 가장 큰 공간에 할당하여 남은 공간이 충분히 크도록 함 • 큰 공간을 계속 쪼개므로 큰 프로세스가 들어갈 공간이 사라질 수 있음

2025년 03월 31일 09:11

CS

[CS 스터디] 1주차 운영체제 개요 + 프로세스 & 스레드

[1주차] 운영체제 개요 + 프로세스 & 스레드 컴퓨터 구성 요소 운영체제의 역할 커널(User Mode vs Kernel Mode) 프로세스의 구조 프로세스 vs 스레드 멀티프로세싱(Multiprocessing) 멀티스레딩(Multithreading) 컨텍스트 스위칭 🔵 컴퓨터 구성 요소: Top-Level View 컴퓨터 시스템은 CPU, 메모리, I/O 모듈이 System Bus 를 통해 연결되어 있으며, 운영체제는 이 자원들을 효율적으로 관리한다. 주요 구성 요소 CPU (Central Processing Unit) PC: 다음에 실행할 명령어의 주소 IR: 현재 실행 중인 명령어 MAR: 접근할 메모리 주소 MBR: 메모리에서 읽거나 쓸 데이터 I/O AR, I/O BR: 입출력 주소 및 버퍼 Execution Unit: 실제 연산 수행 Main Memory 명령어와 데이터를 저장하는 공간 주소를 통해 위치 지정 I/O Module CPU와 장치 간 데이터 전달 버퍼로 속도 차 조절 System Bus 주소 버스, 데이터 버스, 제어 버스로 구성 🔵 운영체제의 역할 운영체제는 하드웨어 자원(CPU, 메모리, 파일 등)을 효율적이고 안정적으로 관리하는 시스템 소프트웨어이다. 주요 역할은 다음과 같다: 프로세스 관리 운영체제는 여러 프로세스가 공정하게 CPU를 사용할 수 있도록 스케줄링하고, 상태를 추적하며, 컨텍스트 스위칭을 통해 프로세스를 전환한다. 프로세스 상태와 전이 New: 생성 중 Ready: 실행 준비 완료, 대기 중 Running: 명령어 실행 중 Blocked: 이벤트 대기 중 Exit: 종료됨 상태 전이 예시 Admit: New → Ready Dispatch: Ready → Running Timeout: Running → Ready Event Wait: Running → Blocked Event Occurs: Blocked → Ready Release: Running → Exit PCB (Process Control Block) 운영체제는 각 프로세스를 추적하기 위해 PCB를 사용한다. PCB는 다음 정보를 포함한다 | 항목 | 설명 | | --------------- | ----------------------------- | | Process State | 현재 상태 (Ready, Running 등) | | Process ID | 고유한 식별자 | | Program Counter | 다음 실행할 명령어 주소 | | CPU Registers | 레지스터 값 저장 | | Memory Info | 메모리 주소 범위 등 | | I/O Info | 열려 있는 파일/디바이스 등 | 운영체제의 프로세스 관리 구조 운영체제는 단순히 PCB 하나로만 프로세스를 관리하는 것이 아니라, 메모리 / 입출력 / 파일 시스템에 대한 정보를 포함한 다양한 제어 테이블을 함께 사용한다. 위 그림은 OS가 내부적으로 유지하는 Control Tables 구조를 나타낸 것이다. Memory Tables: 각 프로세스가 사용하는 메모리 영역과 접근 권한 정보 저장 I/O Tables: 어떤 장치를 어느 프로세스가 사용하는지 정보 기록 File Tables: 열려 있는 파일, 파일 포인터, 접근 모드 등 저장 Primary Process Table: 현재 실행 중인 모든 프로세스들의 PCB를 보관 이러한 구조는 링크드 리스트 형태로 구성되며, 운영체제가 동시에 실행 중인 프로세스를 효율적으로 관리하기 위해 사용된다. 각 프로세스는 독립된 Process Image를 가지고 있으며, 이는 코드, 데이터, 스택, PCB 정보를 포함한 프로세스의 전체 상태를 의미한다. 메모리 관리 운영체제는 프로세스마다 메모리 공간을 분리하고 보호하며, 가상 메모리를 통해 더 큰 주소 공간을 제공한다. 주소 변환(MAR, MBR) 프로세스 간 메모리 보호 물리 메모리 ↔ 가상 메모리 관리 파일 시스템 관리 운영체제는 파일 생성/삭제, 이름 지정, 접근 권한 등 파일 관련 기능을 제공한다. 파일 시스템은 디스크 상의 데이터에 대한 추상화 계층을 제공하며, 사용자가 파일을 디렉토리 구조로 관리할 수 있도록 한다. 🔵 커널(User Mode vs Kernel Mode) 커널이란? 커널은 운영체제의 핵심으로, 프로세스, 메모리, 파일, I/O 등의 자원을 직접 제어함 사용자 프로그램은 커널을 직접 조작할 수 없고, 시스템 콜(System Call) 을 통해 간접적으로 요청함 쉘(Shell)이란? 쉘은 사용자와 커널 사이의 인터페이스 사용자가 명령어를 입력하면, 쉘은 이를 시스템 콜로 번역해 커널에 전달함 크게 두 종류 - Command-line Shell: bash, zsh 등 - Graphical Shell: Windows Explorer, macOS Finder 등 GUI 기반 User Mode vs Kernel Mode | 구분 | User Mode | Kernel Mode | | --------- | ----------------------------- | ------------------------------------ | | 권한 수준 | 제한적 | 모든 하드웨어 자원 접근 가능 | | 코드 실행 | 사용자 애플리케이션 | 운영체제 커널 코드 | | 예시 | 일반 앱, 프로세스 | 시스템 콜 처리, 드라이버 실행 등 | | 전환 방법 | 시스템 콜 (trap), 인터럽트 등 | 사용자 프로그램에 제어 반환 (return) | 사용자 프로그램이 시스템 자원을 사용하려면 커널 모드로 전환이 필요함 커널의 주요 역할 커널은 항상 메모리에 상주하는 운영체제의 핵심이 되는 부분입니다. 컴퓨터 자원을 관리하는 자원 관리자로서 대표적으로 다음 4가지 기능을 가지고 있다. 커널은 사용자가 물리적인 하드웨어에 접근하고 사용할 수 있도록 하기 위한 목적을 가지고 있고, 사용자가 쉘(Shell)을 통해 입력한 명령어를 해석하여 하드웨어에 전달해주는 역할을 한다. 메모리 관리 각 프로그램이 어디에서, 무엇을, 얼마나 사용하는지를 추적하고. 메모리 자원을 할당하는 역할을 한다. 가상 메모리를 사용할 수 있도록 한다. 프로세스 관리 및 CPU 스케쥴링 사용자가 시스템에 로그인 함과 동시에 수많은 프로세스가 실행되는데, 커널은 CPU의 시간 자원을 배분하는 역할 - 어떤 프로세스가 언제, 얼마나 사용할지 - 을 하여 여러 개의 프로세스가 동시에 동작하는 것처럼 보이게 합니다. 디바이스 관리 컴퓨터에 연결된 장치들을 드라이버라는 매개체를 통해서 제어하고 관리한다. 시스템 콜 인터페이스 및 보안 시스템 콜을 제공하여 응용 프로그램 - 프로세스의 서비스 요청을 수신한다. 커널 구조 유형 | 구조 | 특징 | 예시 운영체제 | | ------------- | ---------------------------------------- | -------------- | | 모놀리식 커널 | 모든 기능이 하나의 커널 내에 포함 | Linux, Unix | | 마이크로커널 | 최소 기능만 커널에, 나머지는 사용자 공간 | Minix, QNX | | 하이브리드 | 두 구조의 장점을 절충 | Windows, macOS | 시스템 콜 예시 fork() : 새로운 프로세스 생성 exec() : 다른 프로그램 실행 read(), write() : 파일 I/O kill() : 프로세스 종료 요청 🔵 프로세스의 구조 프로세스 vs 프로그램 프로그램: 하드디스크에 저장된 정적인 명령어 집합 프로세스: 실행 중인 프로그램, 메모리에 적재된 상태 하나의 컴퓨터에서 여러 프로세스가 동시에 실행될 수 있으며, 각 프로세스는 자신만의 코드, 데이터, 스택, 레지스터를 가진다. 프로세스는 메모리에 다음과 같은 형태로 구성된다. 이를 프로세스 이미지 (Process Image) 라고 하며, 운영체제는 이 전체 상태를 관리한다. | 영역 | 설명 | | -------------- | --------------------------------------------------------------------------------------------------- | | PCB | 프로세스의 상태를 저장하는 커널 영역 | | Text(Code) | 실행할 프로그램의 명령어 (코드 영역)→ Private User Address Space 내부에 포함됨 | | Data | 전역 변수(static 변수 포함) 저장→ Private User Address Space 내부에 포함됨 | | Heap | 동적으로 할당되는 메모리 영역 (e.g., malloc)→ Private User Address Space 내부에 포함됨 | | Stack | 함수 호출 시 지역 변수, 리턴 주소 등이 저장되는 영역→ User Stack과 Kenel Stack 두 부분으로 나뉨 | 운영체제는 이 정보를 기반으로 프로세스를 메모리에 적재하고, 필요한 시점에 스케줄링/복원/삭제 등을 수행한다. 🔵 프로세스 vs 스레드 프로세스(Process) 자원 소유의 단위 (Unit of Resource Ownership) 스케줄링/실행의 단위 (Unit of Execution) 하나의 프로세스는 고유한 코드, 데이터, 스택, PCB를 가진다. 운영체제는 각 프로세스를 독립적으로 관리한다. 스레드(Thread) 실행의 단위만 분리됨 (Dispatching Unit) 자원은 프로세스와 공유, 스택은 스레드마다 개별 하나의 프로세스 내에서 여러 스레드가 생성되어 실행될 수 있음 즉, 자원은 프로세스 단위로 소유, 실행은 스레드 단위로 분화됨 프로세스 vs 스레드 비교 | 항목 | 프로세스 | 스레드 | | ------------------ | ------------------------------------- | ------------------------------------- | | 자원 소유 | 독립적으로 가짐 | 동일 프로세스 내 자원 공유 | | 실행 단위 | 독립적인 실행 흐름 | 프로세스 내의 실행 흐름 | | 메모리 공간 | 각각 독립적 | 코드/데이터 영역은 공유, 스택만 개별 | | 문맥 교환 비용 | 크다 | 작다 | | 생성/종료 오버헤드 | 큼 | 작음 | | 안정성 | 하나가 죽어도 다른 프로세스 영향 없음 | 하나가 죽으면 전체 프로세스 영향 가능 | 스레드의 장점과 단점 장점 자원 공유로 문맥 교환 비용이 작음 빠른 통신 및 협업 가능 (shared memory) 병렬 처리를 통해 멀티코어 활용 효율적 단점 동기화 문제(Race condition) 발생 가능 하나의 스레드 오류로 전체 프로세스가 중단될 수 있음 디버깅과 유지보수가 복잡함 🔵 멀티프로세싱(Multiprocessing) 여러 개의 프로세스를 생성하여 동시에 실행하는 방식 각 프로세스는 독립적인 주소 공간과 자원을 가짐 일반적으로 멀티코어 CPU에서 병렬 처리를 위해 사용됨 하나의 CPU에서 멀티프로세싱을 할 경우는 시분할 방식(time sharing), 멀티코어 CPU에서는 진짜 동시 실행(parallel execution)이 가능 🔵 멀티스레딩(Multithreading) 정의 하나의 프로세스 내에서 여러 실행 흐름(스레드) 을 가지는 것 각 스레드는 독립적인 실행 스택을 가지지만, 공통 주소 공간을 공유함 운영체제별 스레드 지원 방식 | 운영체제 | 설명 | | -------------------- | ------------------------------------------------------------ | | MS-DOS | 하나의 프로세스에 하나의 스레드만 지원 | | UNIX (old) | 여러 프로세스는 가능, 하지만 프로세스당 1스레드 | | Modern UNIX 계열 | 하나의 프로세스에서 여러 스레드 지원 (ex. Linux, Solaris 등) | 스레드의 구조 하나의 스레드는 다음 정보를 가짐 Execution State: running, ready 등 Thread Context: 스레드 실행 시 CPU 레지스터 저장 Execution Stack: 지역 변수 저장 Static Storage for Local Variables Memory/Resource 접근: 같은 프로세스의 스레드끼리는 공유 즉, 프로그램 코드/데이터는 공유하고, 스택과 context는 개별 멀티프로세싱 vs 멀티스레딩 | 항목 | 멀티프로세싱 | 멀티스레딩 | | -------------- | ------------------------------ | -------------------------------- | | 실행 단위 | 여러 프로세스 | 하나의 프로세스 내 여러 스레드 | | 주소 공간 | 각각 독립 | 공유됨 | | 메모리 사용량 | 크다 | 상대적으로 작다 | | 문맥 교환 비용 | 크다 | 작다 | | 통신 방식 | IPC (Pipe, Socket 등) | 공유 메모리 | | 안정성 | 하나가 죽어도 나머지 영향 없음 | 하나가 죽으면 전체 프로세스 위험 | 멀티프로세싱 예시: 웹 서버에서 여러 클라이언트를 처리할 때, 아예 독립된 서버 인스턴스를 띄우는 방식 멀티스레딩 예시: 게임 프로그램에서 그래픽 처리, 사운드, 물리 엔진을 각각 스레드로 처리 싱글 스레드 vs 멀티 스레드 모델 Single Threaded Process - PCB + User Stack + Kernel Stack + User Address Space Multithreaded Process - 하나의 PCB + 여러 TCB + 각 스레드별 스택 - 코드/데이터/주소 공간은 공유됨 멀티스레드 프로세스는 PCB + TCB1 + TCB2 + ... 의 형태로 관리됨 🔵 컨텍스트 스위칭 컨텍스트 스위칭이란 CPU가 하나의 프로세스/스레드 실행을 중단하고, 다른 프로세스/스레드로 전환할 때의 작업 전체 이 과정에서 이전 작업의 상태(context)를 저장하고, 다음 작업의 상태를 복원하는 작업이 수행됨 컨텍스트 스위칭이 필요한 이유 멀티태스킹: 여러 작업을 동시에 실행하는 것처럼 보이게 하기 위해 시분할 시스템: 각 프로세스에 CPU 시간을 분배하기 위해 인터럽트 처리: I/O 이벤트가 발생하면 다른 프로세스로 전환 우선순위 변경: 더 중요한 프로세스를 우선 실행하기 위해 프로세스 컨텍스트 스위칭 과정 1. 현재 실행 중인 프로세스(p0)에 인터럽트 or 시스템 콜 발생 2. 운영체제가 p0의 실행 상태를 PCB0에 저장 3. 스케줄러가 다음 실행할 프로세스(p1)를 선택 4. p1의 실행 상태를 PCB1에서 복원 5. CPU 제어권을 p1에게 넘김 → p1 실행 시작 이후에도 p1이 인터럽트를 받으면 다시 p0 등으로 전환될 수 있음 컨텍스트 스위칭 시 저장되는 정보 프로그램 카운터 (PC) 레지스터 값 (R0~Rn) 스택 포인터 (SP) 프로세스 상태 메모리 관련 정보 (페이지 테이블 등) 컨텍스트 스위칭의 오버헤드 문맥 전환에는 시간과 자원이 소모됨 빈번한 스위칭은 오히려 성능 저하를 유발할 수 있음 스케줄링 알고리즘이 이를 효율적으로 조절해야 함 따라서, 운영체제는 스케줄링 알고리즘을 통해 스위칭 빈도와 시점을 최적화하려고 함

2025년 03월 26일 05:27