1. 운영체제란?
운영체제는 컴퓨터의 하드웨어와 소프트웨어를 관리하는 시스템 소프트웨어다.
쉽게 말해서, 사용자와 하드웨어 사이에서 중간 역할을 하는 프로그램이라고 할 수 있다.
1. 운영체제의 주요 기능
1. 프로세스 관리 -> 여러 프로그램(프로세스)이 동시에 실행될 수 있도록 관리
2. 메모리 관리 -> 실행 중인 프로그램이 RAM(메모리)을 어떻게 사용할지 할당
3. 파일 시스템 관리 -> 저장 장치(HDD, SSD)에서 파일을 읽고 쓰는 기능
4. 입출력 장치 관리 -> 키보드, 마우스, 모니터 등 장치와 데이터 송수신
5. 보안 및 권한 관리 -> 사용자 계정, 접근 권한, 방화벽 등 보안 기
2. 프로세스(Process)와 쓰레드(Thread)
운영체제의 핵심 개념 중 하나가 프로세스와 쓰레드이다.
이 둘은 CPU가 프로그램을 실행하는 방식을 설명하는 중요한 개념이다.
1. 프로세스(Process)란?
프로세스는 실행 중인 프로그램이다.
프로그램이 메모리에 로드되어 CPU에서 실행되는 상태를 말한다.
1. 프로세스의 특징
- 운영체제는 여러 개의 프로세스를 동시에 실행할 수 있다.
- 각 프로세스는 독립적인 메모리 공간을 가진다.
- 하나의 프로세스는 여러 개의 쓰레드를 포함할 수 있다.
- 프로세스 간에는 데이터를 직접 공유하기 어렵고, IPC(Inter-Process Communication) 기법이 필요하다.
2. 프로세스의 메모리 구조
프로세스는 실행될 때 다음과 같은 메모리 구조를 가진다.
코드(Code) 영역 - 실행할 코드가 저장된다.
데이터(Data) 영역 - 전역 변수, 정적 변수 등이 저장
힙(Heap) 영역 - 동적으로 할당된 메모리가 저장
스택(Stack) 영역 - 함수 호출 시 지역 변수와 반환 주소가 저장
2. 쓰레드(Thread)란?
쓰레드는 프로세스 내에서 실행되는 작업 단위이다.
즉, 하나의 프로세스 안에서 여러 개의 쓰레드가 실행될 수 있다.
1. 쓰레드의 특징
- 같은 프로세스 안에서 코드, 데이터, 힙 영역을 공유
- 각 쓰레드는 자신만의 스택(Stack) 영역을 가진다.
- 하나의 쓰레드가 충돌하면, 같은 프로세스 내의 다른 쓰레드도 영향을 받을 수 있다.
- 멀티쓰레딩을 사용하면 여러 개의 작업을 동시에 수행할 수 있다.
예시로는 렌더링, 물리연산, AI처리 등을 각각 다른 쓰레드에서 실행하면 성능이 향상된다.
3. 멀티태스킹, 멀티쓰레딩
운영체제에서 여러 개의 작업을 동시에 처리하는 방식에는 크게 두 가지가 존재한다.
1. 멀티태스킹(Multitasking)
- 여러 개의 프로세스를 동시에 실행하는 방식
- 운영체제가 CPU 시간을 여러 프로세스에 나누어 실행한다.
- 각 프로세스는 독립적인 메모리 공간을 가진다.
- 하나의 프로세스가 충돌해도 다른 프로세스에는 영향을 주지 않는다.
예시,
게임과 안티치트(Anti-Cheat) 시스템 실행
게임과 런처 동시 실행
서버와 클라이언트를 개별 프로세스로 실행
// 서버 프로세스는 여러 개의 클라이언트를 동시에 처리해야 하므로 멀티태스킹이 필수적이다.
1.주의해야할 점과 오류
멀티태스킹은 여러 개의 프로세스가 동시에 실행되는 환경으로, 프로세스 간의 상호작용에서 문제가 발생한다.
(1) 리소스 충돌(Resource Contention)
- 여러 프로세스가 공유 리소스를 동시에 접근하려고 하면 충돌이 발생할 수 있다.
- 예를 들어, 두 개의 프로세스가 동시에 같은 파일을 읽거나 쓰려고 할 때 문제가 발생할 수 있다.
해결법
- 파일 잠금(File Locking)을 사용하거나, 뮤텍스(Mutex)와 같은 동기화 기법을 사용하여 리소스를 안전하게 공유할 수 있다.
(2) 프로세스 간 통신(IPC)
- 프로세스 간의 데이터 전달은 상대적으로 어려운 문제이다. 멀티태스킹 환경에서는 각 프로세스가 독립적으로 실행 되기 떄문에 메모리 공유가 불가능하거나 제한될 수 있다.
해결법
- IPC 매커니즘을 사용하여 프로세스 간 데이터를 안전하게 주고받을 수 있도록 해야 한다.
대표적인 방법은 파이프(Pipes), 메시지 큐(Message Queues), 공유 메모리(Shared Memory), 소켓(Socket) 등을 사용 하는것이다.
2. 멀티쓰레딩(MultiThreading)
- 하나의 프로세스 내에서 여러 개의 쓰레드를 실행하는 방식
- 같은 메모리를 공유하므로 프로세스 간 통신(IPC)이 필요 없다.
- 작업을 더 세밀하게 나누어 빠르게 실행할 수 있음
- 하지만 한 쓰레드가 충돌하면 전체 프로세스가 종료될 수도 있다.
예시,
게임에서 캐릭터 이동, AI로 이동 경로 계산 및 행동
CPU가 물리 연산을하고 GPU에서 그래픽을 그리는 방식
게임 진행과, 오디오 처리
1. 주의해야할 점과 오류
멀티쓰레딩은 하나의 프로세스 내부에서 여러 쓰레드가 동시에 실행되는 환경이므로, 더 많은 동기화 문제가 발생할 수 있다.
(1) 경쟁 조건(Race Condition)
- 경쟁 조건은 여러 쓰레드가 동시에 동일한 자원(변수, 데이터)에 접근하고 수정할 경우 발생하는 오류로 예상하지 못 한 순서로 실행될 수 가 있다.
해결법
- 뮤텍스(Mutex)나 세마포어(Semaphore)를 사용해 상호 배제(Mutual Exclusion)를 보장하고, 한 쓰레드만 자원에 접근 하도록 제한해야 한다.
(2) 데드락(Deadlock)
- 데드락은 두 개 이상의 쓰레드가 서로가 필여한 리소스를 기다리며 영원히 멈추는 현상이다.
예를 들어, 쓰레드 A가 리소스 1을 잠그고 리소스 2를 기다리며, 쓰레드 B는 리소스 2를 잠그고 리소스 1을 기다리는 상황
해결법
- 락 순서를 정해두고 쓰레드가 항상 동일한 순서로 리소스를 잠그도록 해야한다. 이를 통해 교착 상태를 예방할 수 있 다.
- 타임아웃(Timeout)을 설정해 데드락을 감지하고, 일정 시간 후에 리소스를 다시 시도하도록 할 수 있다.
(3) Livelock
- livelock은 쓰레드가 계속해서 상태를 변경하지만 실행되지 않는 상태를 말한다, 데드락처럼 영원히 멈추지 않지만,
진행이 없고 자원을 계속 소모한다.
해결법
- 타임아웃을 사용하여 일정 시간 내에 작업이 완료되지 않으면 다른 방법으로 처리하도록 설계해야 한다.
(4) 경합 상태(Starvation)
- 경합 상태는 어떤 쓰레드가 계속해서 리소스를 얻지 못하고 무시되는 상태이다.
여러 쓰레드가 리소스를 요청하는데, 우선순위가 높은 쓰레드만 계속 리소스를 얻고 낮은 우선순위의 쓰레드는 항상 기다리게 되는 경우이다.
해결법
- 공정한 스케줄링(Fair Scheduling)을 구현하거나, 우선순위를 동적으로 변경하여 모든 쓰레드가 리소스를 공평하게 사용할 수 있도록 해야한다.
(5) 쓰레드 안전성(Thread Safely)
- 쓰레드 안전은 여러 쓰레드가 동시에 동일한 함수나 데이터에 접근할 경우, 데이터의 일관성이 유지되도록 보장하는 것이다.
예를 들어, 쓰레드가 공유 데이터를 수정할 때 일관성 있는 값을 유지하도록 해야한다.
해결법
- 불변 객체(Immutable Objects)를 사용하거나, 불변 데이터를 다루는 안전한 방법을 사용해서 여러 쓰레드가 동시에
데이터를 변경할 때 충돌이 발생하지 않도록 해야 한다.
3. 동기화(Synchronization)
동기화는 멀티쓰레딩 환경에서 쓰레드들이 공유 자원을 동시에 접근할 경우 발생할 수 있는 문제들을 해결하기 위한 기술이다. 동기화 문제를 해결하지 않으면, 경쟁 조건(Race Condition), 데드락(Deadlock), livelock 등의 문제가 발생할 수 있다.
1. 뮤텍스(Mutex)
- 뮤텍스는 상호 배제(Mutual Exclusion)를 제공하는 동기화 도구로, 하나의 쓰레드만 특정 코드영역을 실행할 수 있도록 제한하는 역할을 한다. 즉, 하나의 쓰레드가 자원을 사용하고 있을 때, 다른 쓰레드는 해당 자원에 접근할 수 없다.
- 뮤텍스는 소유권이 있는 잠금(lock)을 제공하므로, 쓰레드가 잠금을 획득하고 작업을 완료하면, 잠금을 해제해야 다른 쓰레드가 해당 자원에 접근할 수 있다.
특징
- 단일 쓰레드가 자원에 접근하도록 보장
- 소유권 개념이 존재 (자원을 잠근 쓰레드만 해제 가능)
- 블로킹 방식(다른 쓰레드는 잠금이 풀릴 때까지 대기)
2. 세마포어(Semaphore)
- 세마포어는 특정 자원에 대한 접근 허용 횟수를 제어하는 동기화 기법이다.
뮤텍스와 달리 세마포어는 여러 쓰레드가 동시에 자원에 접근할 수 있도록 허용할 수 있다. 세마포어는 내부적으로 카운 터를 사용해 리소스 접근을 관리
- 이진 세마포어(Binary Semaphore)는 0과 1로만 값을 가질 수 있어 뮤텍스와 비슷하지만, 세마포어는 한 쓰레드가 자원 을 획득하고 해제할 수 있는 권한을 여러 개의 쓰레드에게 나눠줄 수 있다.
특징
- 카운팅 세마포어 : 리소스를 여러 쓰레드가 동시에 접근할 수 있게 허용해준다.
- 이진 세마포어 : 뮤텍스와 비슷한 방식으로 0과 1 동작
- 쓰레드가 자원에 접근할 수 있는 횟수를 제한한다.
3. 스핀락(Spinlock)
스핀락은 잠금을 시도하는 쓰레드가 잠금이 풀릴 때까지 계속해서 반복적으로 잠금을 시도하는 방식의 동기화 기법이다.
블로킹이 아니라, 잠금이 풀릴 때까지 계속 돌아가므로 상대적으로 빠르게 잠금을 처리할 수 있다.
그러나 많은 CPU 사이클을 낭비할 수 있어 효율성이 떨어질 수 있다.
스핀락은 자원을 빨리 얻을 수 있을 것이라고 예상할 때 유용하게 사용된다.
특징
- 반복적으로 잠금을 시도하며, 대기 시간이 짧을 때 유리하다.
- 효율성이 떨어질 수 있음(대기 시간이 길어지면 CPU 자원을 낭비함)
- 경쟁 상태(Race Condition)가 없거나 잠금 대기 시간이 짧을 때 효과적이다.
4. 가상 메모리(Virtual Memory)
가상 메모리는 컴퓨터 시스템에서 실제 물리적 메모리(RAM)보다 더 큰 메모리 공간을 프로세스에 제공하기 위해 사용하는 기술이다.
가상 메모리는 프로세스마다 독립적인 주소 공간을 제공하여, 여러 프로세스가 동시에 실행될 때, 메모리 충돌을 방지하고,
효율적인 메모리 관리를 가능하게 해준다.
프로그램이 메모리 공간을 더 많이 사용할 수 있도록 도와준다, 또한 물리적 메모리와 디스크 간의 효율적인 교환(Swapping) 기술을 이용해 프로세스 간 독립성을 유지하면서 시스템의 안정성을 높혀준다.
1. 가상 메모리의 기본 개념
가상 메모리는 프로세스가 사용하는 주소 공간을 가상 주소로 분리하고, 이를 물리적인 메모리 주소에 대응시키는 방식으로 작동한다.
운영체제는 가상 메모리와 물리적 메모리 간의 매핑을 관리하는 역할을 하며, 물리적 메모리 공간의 한계를 넘어서도 가상 주소를 사용해 더 큰 주소 공간을 사용할 수 있게 해준다.
1. 핵심 개념
- 가상 주소 : 프로세스가 사용하는 메모리 주소. 실제 물리 메모리 주소와는 다르며, 운영체제가 이를 물리적 메모리 주소 로 변환한다.
- 물리 주소 : 실제로 메모리 집에 해당되는 주소. 프로세서가 접근하는 실제 메모리의 주소
- 페이지(Page) : 가상 메모리에서 작은 고정 크기 블록으로 나뉜 단위. 가상 메모리는 여러 개의 페이지로 분할되어, 운영 체제는 이를 페이징 기법을 사용해 물리적 메모리로 맵핑한다.
2. 페이지(Page)와 페이징(Paging)
1. 페이지(Page)
페이지는 가상 메모리 공간을 나누는 고정 크기 블록이다.
예를 들어, 페이지 크기가 4KB라고 한다면, 프로그램은 4KB단위로 메모리 영역을 할당 받는다.
프로세스는 페이지 단위로 데이터를 읽고 쓸 수 있다. 프로그램이 물리적 메모리에 접근할 때, 운영체제는 이를 가상 주소에서 물리 주소로 변환하여 실행한다.
2. 페이징(Paging)
페이징은 가상 메모리 주소를 고정 크기 페이지로 나누고, 이를 물리 메모리 주소로 매핑하는 기법이다.
페이징 시스템에서는 가상 메모리와 물리 메모리 간에 직접적인 연속적인 관계가 없다.
페이징 프로그램이 사용할 메모리를 적절하게 분할하여 관리하고, 필요에 따라 디스크에서 메모리를 불러오는 작업(스와핑)을 통해 실제로 필요한 메모리만 로드하게 된다.
페이징의 주요 요소
- 페이지 테이블(Page Table) : 페이지 테이블은 가상 메모리의 페이지 번호를 물리 메모리의 프레임 번호와 매핑하는 표 입니다. 프로세스가 페이지를 요청하면, 운영체제는 페이지 테이블을 참조하여 해당 페이지의 물리적 주소를 찾는다.
- 프레임(Frame) : 물리 메모리에서 데이터를 저장하는 고정 크기 블록이다, 가상 메모리 페이지는 물리 메모리의 프레임 으로 맵핑된다.
페이징 작업 예시
- 가상 메모리에서 프로그램이 메모리를 요청하면, 운영체제는 페이지 테이블을 참조하여 물리 메모리의 프레임을 할당한 다.
- 만약 물리 메모리가 부족하다면, 운영체제는 디스크에 있는 스왑 공간을 사용하여 일부 페이지를 디스크로 옮기고, 필요 한 페이지를 물리 메모리로 가져온다.
페이지 부재(Page Fault)
Page Fault는 프로그램이 가상 주소로 접근했을 때, 해당 주소가 현재 물리적 메모리에 존재하지 않는 경우를 말한다.
이때 운영체제는 해당 페이지를 디스크에서 로드하여 메모리로 가져온다.
- Page Fault가 발생하면, 운영체제는 디스크 I/O를 통해 필요한 데이터를 물리 메모리로 불러온다.
- Page Fault는 디스크 접근이 포함되기에 느리고, 성능에 영향을 미칠 수 있지만, 이는 프로그램이 전체 메모리를 동시에 로드하지 않고, 필요한 데이터만을 로드할 수 있도록 해준다.
3. 가상 메모리의 장점
1. 프로세스 보호
각 프로세스는 자기만의 독립적인 가상 주소 공간을 가지기에, 하나의 프로세스가 다른 프로세스의 메모리에 접근할 수 없게 되어 메모리 보호가 이루어진다.
2. 효율적인 메모리 사용
가상 메모리 시스템은 필요한 페이지만 로드하기에, 물리 메모리를 더 효율적으로 사용할 수 있다.
프로그램 전체를 한번에 로드하지 않아도 되기에 메모리 사용이 최적화 된다.
3. 멀티태스킹
여러 프로세스가 동시에 실행될 경우, 각 프로세스는 독립적인 가상 메모리를 가지므로 충돌 없이 안전하게 실행될 수 있다.
4. 메모리 확장
물리 메모리가 부족한 경우, 가상 메모리를 통해 디스크를 임시 메모리처럼 사용할 수 있어, 물리 메모리 크기보다 더 많은 메모리를 제공할 수 있다.
4. 가상 메모리 관련 기술
1. 페이지 교체 알고리즘(Page Replacement Algorithm)
페이지 폴트가 발생했을 때, 어떤 페이지를 디스크로 교체할지 결절하는 알고리즘
대표적인 페이지 교체 알고리즘은 FIFO, LRU, LFU 등이 있음
2. 가상 주소와 물리 주소 변환
운영체제는 TLB(Translation Lookaside Buffer)와 같은 캐시 메모리나 페이지 테이블을 사용하여 가상 주소를 물리 주소로 변환 한다. 이는 빠른 주소 변환을 가능하게 한다.
'컴퓨터 구조와 운영체제' 카테고리의 다른 글
컴퓨터 아키텍처 (1) (0) | 2025.06.08 |
---|---|
페이징(Paging) (0) | 2024.12.05 |