[운영체제] 동기/비동기 & 블로킹/논블로킹
·
⚙️ CS/운영체제
✅ 동기/비동기 : 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 여부에 대한 관점 📍동기 (Synchronous): 호출한 작업이 끝날 때까지 기다렸다가 다음 작업을 수행하는 방식 요청한 작업에 대한 순서가 보장됨함수 A에서 함수 B를 호출하면, 리턴 값을 기다림 📍비동기 (Asynchronous): 호출한 작업의 완료 여부를 따지지 않고 자신의 다음 작업을 그대로 수행하는 방식 요청한 작업에 대한 순서가 지켜지지 않을 수 있음함수 A에서 함수 B를 호출하면, 리턴 여부를 신경 쓰지 않고 동작동시 처리를 통해 성능을 향상할 수 있음 ✅ 블로킹/논블로킹: 다음 작업을 처리하기 위해 현재 작업이 멈추는지(block) 여부에 대한 관점 📍블로킹 (Blocking): 요청한 ..
[운영체제] 페이지 교체 알고리즘
·
⚙️ CS/운영체제
✅ 페이지 교체 알고리즘Page Fault가 발생했을 때, 새로운 페이지를 메모리에 적재하려고 보면 이미 모든 프레임이 가득 찬 상태일 수 있다. 이 경우 기존에 있던 페이지 중 하나를 제거하고 새 페이지를 넣어야 하는데,어떤 페이지를 제거할지를 결정하는 기준이 바로 페이지 교체 알고리즘이다. 📍 FIFO(First In First Out): 메모리에 들어온 페이지 중 가장 오래된 페이지를 교체 💡 장점구현이 간단함큐 자료구조를 사용해 쉽게 구현 가능 🛠️ 단점성능을 보장할 순 없음최근에 자주 사용되던 페이지가 오래됐다는 이유로 교체될 수 있음 이로 인해 Page Fault 증 가 가능Bleady 모순 발생 가능: 프레임의 개수를 늘려도 Page Fault가 더 많이 발생하는 모순ex) 페이지 ..
[운영체제] 가상 메모리 & 페이징 & 세그멘테이션
·
⚙️ CS/운영체제
✅ 가상 메모리 기법 (Virtual Memory): 프로세스 전체가 메모리에 올라가지 않더라도 실행할 수 있도록 지원하는 메모리 관리 기법 프로그램을 실행하기 위해서는 이를 메모리(RAM)에 적재해야 한다.하지만 용량이 큰 프로세스나 다중 프로그래밍 상황에서는 물리 메모리만으로 부족할 수 있다.이 문제를 해결하기 위해 애플리케이션을 실행하는데 최소한 얼마만큼의 메모리가 필요한가에 집중하는 가상 메모리 기법이 등장했다. 디스크의 일부 영역(스왑 공간)을 메모리처럼 활용프로그램은 전체 메모리를 사용하는 듯 보이지만, 실제로는 일부만 물리 메모리에 존재CPU는 TLB, MMU를 사용하여 가상 주소 -> 물리 주소로 변환MMU (Memory Management Unit): 가상 주소를 물리 주소로 변환해 주는..
[운영체제] 메모리 할당 방식
·
⚙️ CS/운영체제
✅ 메모리 할당 (Memory Allocation)멀티프로그래밍 환경에서는 여러 개의 프로세스가 동시에 메모리에 올라와 실행되어야 한다.이때 각 프로세스에 얼마만큼의 메모리를 어떻게 할당할지 결정하는 과정이 바로 메모리 할당이다. 메모리 할당 방식은 크게 두 가지로 나뉜다.연속 메모리 할당(Contiguous Allocation)비연속 메모리 할당(Non-Contiguous Allocation) ✅ 연속 메모리 할당 (Contiguous Memory Allocation): 프로세스가 요청한 메모리 크기만큼 물리 메모리에서 연속된 공간을 할당하는 방식 연속 메모리 할당 방식은 다시 고정 분할 방식과 가변 분할 방식으로 나뉜다.고정 분할 방식: 물리적 메모리를 미리 같은 크기로 분할해서 할당외부/내부 단편..
[운영체제] 캐시 메모리 (Cache Memory)
·
⚙️ CS/운영체제
✅ 메모리 계층성`빠른 저장 장치`와 `용량이 큰 저장 장치`는 다음과 같은 이유로 동시에 만족하기 어렵다.CPU와 가장 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.속도가 빠른 저장 장치는 저장 용량이 작고 가격이 비싸다. 이러한 물리적 제약 때문에 컴퓨터 시스템은 다양한 저장 장치를 함께 사용한다.그리고 이 저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 다음과 같이 계층적으로 표현할 수 있다. 위 계층일수록 CPU와 가깝고, 용량은 작고, 빠름아래 계층일수록 CPU와 멀고, 용량은 크고, 느림 ✅ 캐시 메모리란?: CPU와 메인 메모리(RAM) 사이에 위치하는 메모리 CPU는 메모리에 저장된 데이터를 빈번하게 사용하지만 CPU가 메모리에 접근하는 시간은 CPU의 연산속도보다 ..
[운영체제] Thread Pool & Fork-Join
·
⚙️ CS/운영체제
✅ Thread Pool : 미리 일정 수의 스레드를 만들어 두고, 작업이 들어올 때마다 스레드를 생성하는 대신 대기 중인 스레드를 재사용하는 방식 스레드 생성/소멸 비용 절감스레드 폭주로 인한 시스템 과부하 방지다수의 사용자의 요청을 수용하고, 빠르게 처리하고 대응할 수 있음 📍 적절한 스레드 수 스레드 수는 작업 특성과 시스템 리소스를 고려해 동적으로 조정해야 한다.(예: CPU 코어 수, 메모리 크기, I/O 부하 등) 너무 작으면: 컨텍스트 스위칭이 자주 일어나 오버헤드 발생너무 많으면: 자원 낭비 작업의 성격에 따라 다음과 같이 설정할 수 있다.CPU bound 작업: 적절한 스레드 수는 CPU 코어 수와 비슷I/O bound 작업: 스레드 수는 CPU 코어 수보다 훨씬 많아야 함 📍 단..
[운영체제] 데드락 (Deadlock)
·
⚙️ CS/운영체제
✅ 교착상태 (Deadlock)란?: 일련의 프로세스 혹은 스레드들이 서로가 점유한 자원을 기다리며 무한 대기하는 상태 자원: 하드웨어, 소프트웨어 등을 포함하는 개념 ex) I/O 장치, CPU cycle, Semaphore 등 다중 프로그래밍에서는 여러 스레드가 자원을 두고 경쟁하게 된다.스레드는 필요한 자원을 요청하며, 요청한 자원이 현재 사용 불가능하면 waiting 상태가 된다. 그런데 요청한 자원이 다른 대기 중인 스레드에 의해 점유되고 있다면,서로가 서로의 자원을 기다리면서 모든 스레드가 다시 활성 상태로 전환되지 못하는 교착 상태(deadlock)가 발생한다. ✅ 교착상태 발생 조건 4가지 📍 상호 배제 (Mutual Exclusion): 매 순간 하나의 프로세스만이 자원을 사용할 수 ..
[운영체제] IPC
·
⚙️ CS/운영체제
✅ IPC(Inter-Process Communication): 서로 다른 프로세스 간에 데이터를 주고받기 위한 메커니즘 IPC에는 크게 공유 메모리(Shared Memory) 방식과 메시지 전달(Message Passing) 방식이 있다. 공유 메모리는 말 그대로 같은 메모리를 읽고 써서 협력하는 것이고, 메시지 전달은 프로세스들 사이에 메시지를 교환해서 협력한다. 그리고 메시지 전달 방식에는 구체적으로 파이프, 메시지 큐, 소켓 방식이 있다. 파이프 (Pipe)단방향 통신, 부모-자식 간 주로 사용 메시지 큐 (Message Queue)메시지를 큐 형태로 전달, 비동기식 통신, 단방향소켓 (Socket)네트워크 기반 IPC, 서로 다른 시스템 간 통신도 가능공유 메모리 (Shared Memory)메..