호우동의 개발일지

Today :

[OS] Mutex Lock과 스핀락(Spin lock), 세마포어(Semaphore)

Mutex Locks 만들어진 이유? 임계구역 문제에 대한 하드웨어 기반 해결책은 복잡하고, 응용프로그래머가 사용 불가능 → 임계구역 문제 해결을 간단하게 하기 위해 만들어진 소프트웨어 도구를 개발 Mutex Locks : 상위 수준 소프트웨어 도구 중 하나로, 가장 간단한 도구 임계 구역 보호를 통해 경쟁 조건 방지를 위해 mutex 락 사용 임계 구역에 들어갈 때 락을 획득하고, 빠져나올 때 락을 반환해야 한다. acquire() : 락 획득 release() : 락 반환 Mutex Lock의 구성 available이라는 boolean 변수를 가짐 → 이 변수 값이 락의 가용 여부를 표시 락이 사용 가능하면 acquire() 호출은 성공하고, 락은 사용 불가 상태가 됨 사용 불가 상태의 락을 획득하려..

[OS] 프로세스 동기화를 위한 하드웨어 지원

임계구역 문제를 해결하기 위한 지원을 제공하는 세 가지 하드웨어 명령어를 제시 메모리 장벽(Memory Barriers) 메모리 모델 컴퓨터 아키텍처가 응용프로그램에게 제공하는 메모리 접근 시 보장되는 사항을 결정한 방식 일반적으로 두 가지 범주 중 하나에 속함 강한 순서 : 한 프로세서의 메모리 변경 결과가 다른 모든 프로세서에 즉시 보임 약한 순서 : 한 프로세서의 메모리 변경 결과가 다른 프로세서에 즉시 보이지 않음 메모리 모델은 프로세서 유형에 따라 다름 → 커널 개발자는 공유 메모리 다중 처리기에서 메모리 변경의 가시성에 대한 가정 불가 → 이러한 문제를 해결하기 위해 메모리 장벽을 사용 메모리 장벽 : 메모리의 모든 변경 사항을 다른 모든 프로세서로 전파하는 명령어 이를 통해 다른 프로세서에서..

article thumbnail
[OS] 프로세스 임계구역(Critical Section)문제와 고전적 해결안

동기화 도구들이 왜 필요할까? 협력적 프로세스가 데이터를 공유하는 방법 협력적 프로세스 : 시스템 내에 실행 중인 다른 프로세스에게 영향을 주거나 받는 프로세스 논리 주소 공간(코드, 데이터)을 직접 공유, 공유 메모리, 메시지 전달 → 공유 데이터를 동시에 접근하면 데이터의 일관성을 망칠 수 있음 데이터의 일관성을 유지하기 위해 논리 주소 공간을 공유하는 협력적 프로세스의 질서 있는 실행을 보장 프로세스가 병행 또는 병렬로 실행될 때 공유하는 데이터의 무결성에 문제를 일으킴 문제가 발생하는 예시 static int count = 0; // 전역 변수 // 스레드 t1은 count를 1씩 더함 Task t1 = new Task(() => { for (int i = 0; i < 10000; i++) cou..

article thumbnail
[OS] CPU 스케줄링 알고리즘 평가 방법 정리

알고리즘의 평가 특정 시스템을 위한 CPU 스케줄링 알고리즘은 어떻게 선택하는가? 알고리즘을 선택하는 데 사용할 기준을 정의 알고리즘을 선택하기 위해 매개변수들의 상대적인 중요성을 반드시 정의해야 한다. 기준은 종종 CPU 이용률, 응답시간 또는 처리량에 의해 정의된다. 기준은 아래와 같은 대책을 포함할 수도 있음 최대 응답 시간은 300ms라는 제약 조건에서 CPU 이용률을 극대화한다. 총 처리 시간이 전체 실행 시간에 평균적으로 선형 비례가 되도록 처리량을 극대화한다. 선택 기준의 정의되면, 여러 가지 알고리즘들을 평가하기를 원한다. → 아래에서 사용할 수 있는 여러 평가 방법들을 기술 결정론적 모델링 분석적 평가(analytic evaluation) 평가 방법의 중요한 부류 중 하나 주어진 작업 부..

article thumbnail
[OS] 실시간 CPU 스케줄링 개념 및 방식

실시간 CPU 스케줄링 실시간 CPU 스케줄링은 연성(soft) 실시간 시스템과 경성(hard) 실시간으로 구분 연성 실시간 시스템 중요한 실시간 프로세스가 스케줄 되는 시점에 관해 아무런 보장을 하지 않는다. 오직 중요 프로세스가 그렇지 않은 프로세스들에 비해 우선권을 가진다는 것만 보장 경성 실시간 시스템 태스크는 반드시 마감시간까지 서비스를 받아야 한다. → 더 엄격한 요구 조건을 만족해야 함 마감시간이 지난 이후에 서비스를 받는 것은 서비스를 받지 않는 것과 같다. 지연시간 최소화(Minimizing Latency) 실시간 시스템의 이벤트-중심 특성 시스템은 일반적으로 실시간으로 발생하는 이벤트를 기다린다. 이벤트가 발생하면 시스템은 가능한 한 빨리 그에 응답하고 그에 맞는 동작을 수행해야 한다...

article thumbnail
[OS] 다중 처리기에서의 CPU 스케줄링

다중 처리기 스케줄링 여러 개의 CPU가 사용 가능 → 여러 스레드가 병렬로 실행 가능 → 부하 공유(load sharing) 가능 스케줄링 문제는 그에 상응하여 더욱 복잡해짐 다중 처리기란? 여러 개의 물리적 프로세서를 제공하는 시스템 각 프로세서에는 하나의 단일 코어 CPU가 포함되어 있음 최신 컴퓨팅 시스템에서의 다중 처리기는 아래의 아키텍처들을 사용 가능 다중 코어 CPU 다중 스레드 코어 NUMA 시스템 이기종 다중 처리 다중 처리기 스케줄링에 대한 접근 방법 다중 처리기 시스템의 CPU 스케줄링에 관한 해결 방법 비대칭 다중 처리(asymmetric multiprocessing) 마스터 서버라는 하나의 처리기가 모든 스케줄링 결정과 I/O 처리, 다른 시스템의 활동을 취급 다른 처리기들은 사용..

article thumbnail
[OS] CPU 스케줄링 알고리즘과 스레드 스케줄링

스케줄링 알고리즘 CPU 스케줄링은 준비 큐에 있는 프로세스 중 어떤 프로세스에 CPU 코어를 할당할 것인지를 결정 여러 가지 다른 CPU 스케줄링 알고리즘이 존재 여기서의 스케줄링 알고리즘은 처리 코어가 하나뿐이라고 가정하고 설명 → 즉 한 번의 하나의 프로세스만 실행할 수 있다는 뜻 선입 선처리 스케줄링(FCFS) 방식 : CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당받는다. 가장 간단한 CPU 스케줄링 알고리즘 코드 작성과 이해가 쉽다. 선입 선처리 정책의 구현은 선입선출(FIFO) 큐로 쉽게 관리 가능 프로세스가 준비 큐에 진입하면, 이 프로세스의 프로세스 제어블록(PCB)을 큐의 끝에 연결 CPU가 가용 상태가 되면, 준비 큐의 앞부분에 있는 프로세스에 할당 해당 프로세스(실행 상태의 프..

article thumbnail
[OS] CPU 스케줄링 기본 개념과 기준 정리

CPU 스케줄링 기본 개념 기본 가정 일반적인 스케줄링 개념을 논의하는 경우 → 프로세스 스케줄링 스레드에 국한된 개념을 가리키는 경우 → 스레드 스케줄링 “CPU에서 실행”이라는 용어를 사용하는 경우 → 프로세스가 CPU 코어에서 실행되고 있음을 의미 다중 프로그래밍 다중 프로그래밍의 목적 CPU 이용률을 최대화하기 위해 항상 실행 중인 프로세스를 가지게 하는 데에 있음 대기 시간으로 인한 낭비를 줄여 시간을 생산적으로 활용하려고 시도한다. 대기 시간이 발생하는 이유 → 프로세스는 I/O 요청이 완료되기를 기다려야 함 다중 프로그래밍 개념 → 해당 개념은 모든 처리 코어로 확장됨 CPU를 항상 바쁘게 유지한다. → 다수의 프로세스를 메모리 내에 유지한다. 어떤 프로세스가 대기해야 하면, 운영체제는 CP..