Computer Science40 10. 교착 상태 해결 방법 🖥️ 교착 상태 해결 방법 🖥️ 교착 상태 예방 - 애초에 교착 상태가 발생하지 않도록 - 교착 상태 발생 조건(상호 배제, 점유와 대기, 비선점, 원형 대기) 중 하나를 제거 1. 상호 배제를 제거하는 경우 (현실적으로 어려움) 2. 점유와 대기를 없애는 경우 (자원을 할당 받은 상태에서 다른 자원을 대기하는 상태) - 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분 -> 자원의 활용률이 낮아지는 방식임 3. 비선점 조건을 없애는 경우 - 선점이 가능한 자원(ex. CPU)에 한해 효과적임 but 모든 자원이 선점 가능한 것은 아니다. (프린터는 선점 어려움) 4. 원형 대기 조건을 없애는 경우 but 자원에 번호를 붙이는 것이 어려운 작업이 될 수 있음. 어떤 자원에 어떤 .. 2023. 9. 2. 9. 교착 상태(Dead Lock) 🖥️ 교착 상태 🖥️ 교착 상태란? 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상 식사하는 철학자 문제 - 기다리기만 하다가 아무도 밥 못먹음. 자원 할당 그래프 교착 상태 발생 조건 파악 가능 - 어떤 프로세스가 어떤 자원을 할당 받아 사용 중인지 확인 가능 - 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능 철학자, 게임 예시를 그래프로 그려보면 교착 상태가 발생한 경우, 자원 할당 그래프는 원의 형태를 띄고 있음. 교착 상태가 발생할 조건 아래 조건을 모두 만족하면 교착 상태가 발생할 수 있음. 하나라도 만족하지 않으면 교착 상태가 발생하지 않음. 1. 상호 배제 - 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태 2. 점유와 대기 - 자원을 할당 받은 상태에서 .. 2023. 9. 2. 8. 동기화 기법(뮤텍스 락, 세마포, 모니터) 🖥️ 동기화 기법 🖥️ 동기화의 종류에는 크게 상호배제, 실행 순서 제어가 있다. 뮤텍스 락 상호 배제를 위한 동기화 도구로 자물쇠 역할을 함. 뮤텍스 락의 단순한 형태 - 전역 변수 하나, 함수 두 개 - 자물쇠 역할: 프로세스들이 공유하는 전역 변수 lock - 임계 구역을 잠그는 역할: acquire 함수 - 임계 구역 잠금 해제 역할: release 함수 acquire 함수 - 프로세스가 임계 구역에 진입하기 전에 호출 if 임계 구역이 잠겨 있다면, 임계 구역이 열릴 때까지(lock이 false가 될 때까지) 임계 구역을 반복적으로 확인 (탈의실 똑똑 무한 반복) if 임계 구역이 열려 있다면, 임계 구역을 잠그기(lock = true) 임계구역 작업 ... release 함수 - 임계 구역에서.. 2023. 9. 2. 7. 동기화(synchronization) 🖥️ 동기화 🖥️ 동시다발적으로 실행되는 프로세스들(스레드들)은 서로 협력하며 영향을 주고 받는다. 이 과정에서 '자원의 일관성 보장'이 필요하다. 동기화란? 공동의 목적을 위해 동시에 수행되는 프로세스 ex. 워드 프로세스 프로그램 - 맞춤법 검사 프로세스 - 입력 내용을 화면에 출력하는 프로세스 '프로세스들의 수행 시기를 맞추는 것' 1. 실행 순서 제어 - 프로세스를 올바른 순서대로 실행하기 2. 상호 배제 - 동시에 접근해서는 안 되는 자원에 하나의 프로세스만 접근하게 하기 * 실행 문맥을 갖는 모든 대상은 동기화 대상이기 때문에 스레드도 당연히 동기화의 대상임. 실행 순서 제어를 위한 동기화(reader writer problem) 읽기 프로세스와 쓰기 프로세스는 아무렇게나 실행되어서는 안 된다.. 2023. 9. 2. 6. CPU 스케줄링 알고리즘 🖥️ CPU 스케줄링 알고리즘 🖥️ 1. 선입 선처리 스케줄링 FCFS(First Come First Served) 스케줄링 - 준비 큐에 삽입된 순서대로 처리하는 비선점 스케줄링 - 먼저 CPU를 요청한 프로세스부터 CPU 할당 호위 효과(convoy effect)를 방지하려면 어떻게 할 수 있을까? 2. 최단 작업 우선 스케줄링 SJF(Shortest Job First) 스케줄링 (기본적으로는 비선점, 선점형이 될 수도 있음) CPU 사용 시간이 짧은 프로세스는 먼저 실행, CPU 사용 시간이 긴 프로세스는 나중에 실행하기 (평균 대기 시간 단축) 3. 라운드 로빈 스케줄링 RR(Round Robin) 스케줄링 (돌아가며) - 선입 선처리 스케줄링 + '타임 슬라이스' * 타임슬라이스: 각 프로세스가.. 2023. 8. 30. 5. CPU 스케줄링 🖥️ CPU 스케줄링 🖥️ 운영체제가 CPU를 어떻게 관리할까? CPU 사용이 필요한 프로세스들이 차례로 돌아가며 사용하는 것이 가장 공정한 스케줄링일까? 프로세스마다 우선순위가 다르다는 점을 생각해보자. 입출력 작업이 많은 프로세스 (io bound) -> 프로세스가 대기 상태에 머무르는 시간이 많음(이 때는 CPU 안 씀) 그래서 입출력 작업이 많은 프로세스를 먼저 실행시키고(어차피 금방 대기 상태에 머물러서 CPU를 안 쓸테니) 이후에 CPU 집중 프로세스를 실행해서 CPU를 많이 쓰는것이 효율적 스케줄링 큐 다음으로 CPU를 사용시킬 프로세스의 PCB를 모두 살펴보는 것은 비효율적이다. 같은 큐 내부에서도 우선순위별로 처리됨. 선점형(preemptive) 스케줄링, 비선점형(non-preempti.. 2023. 8. 29. 이전 1 2 3 4 5 ··· 7 다음