OS 4

교착 상태(Deadlock) 및 은행원 알고리즘(Banker’s Algorithm)

데드락(Deadlock)은 두 개 이상의 프로세스나 스레드가 서로가 점유한 자원을 기다리며 영원히 진행되지 못하는 상태를 의미데드락 발생 조건 (Coffman Conditions)데드락은 다음 4가지 조건이 모두 동시에 성립할 때 발생상호 배제 (Mutual Exclusion): 한 번에 하나의 프로세스만 자원을 사용할 수 있다.자원이 공유가 불가능하다면, 다른 프로세스는 그 자원이 해제될 때까지 기다려야 한다.점유 및 대기 (Hold and Wait): 자원을 점유한 상태에서 다른 자원을 요청하며 대기한다.예를 들어 Process1이 Resource 1을 점유하면서 Resource 2를 요청해서 기다리는 경우비선점 (No Preemption): 이미 할당된 자원을 강제로 빼앗을 수 없다.자원을 점유한 ..

CS/Operating System 2025.01.15

Critical Section / 세마포어(Semaphore) / 뮤텍스(Mutex)

임계 영역(Critical Section)임계 구역(Critical Section)은 공유 자원(Shared Resource)에 여러 스레드나 프로세스가 동시에 접근할 경우 문제가 발생할 수 있는 프로그램의 코드 영역을 의미한다.❗문제 발생 공유 자원은 여러 프로세스/스레드가 동시에 접근할 경우 임계 구역 안에서 데이터 불일치 또는 경쟁 상태(Race Condition)를 초래할 수 있다.임계 구역 문제를 해결하려면 한 번에 하나의 스레드만 해당 코드 영역에 진입하도록 제한해야 한다.🛠️ 해결 방법뮤텍스(Mutex), 세마포어(Semaphore) 등의 동기화 메커니즘을 사용하여 한 번에 하나의 스레드만 임계 구역에 접근하도록 보장한다.💡 이해하기 쉬운 예시은행 계좌에서 두 개의 ATM 스레드가 동시에..

CS/Operating System 2025.01.15

[PintOS Project 1 - Threads] 1번 Alarm Clock

Alarm Clock첫번째 과제 목적은 스레드를 일정한 시간만큼 재우는 기능을 하는 Alarm Clock을 busy-wait 방식에서 sleep-awake 방식으로 변경한다.   busy-wait  voidtimer_sleep (int64_t ticks) { int64_t start = timer_ticks (); ASSERT (intr_get_level () == INTR_ON); while (timer_elapsed (start)   현재 위에 코드의 방식은 busy_wait 방식으로 timer_sleep()이 구현되어 있다.timer_ticks() 함수를 이용해 start 변수에 현재 시각(static ticks)를 저장한다.얼마만큼 재울지 지정한 ticks만큼 while문을 통해 thread_yi..

[CSAPP] 1-7. 운영체제는 하드웨어를 관리한다.

운영체제(Operation System, OS)란?`운영체제`는 컴퓨터의 하드웨어 자원을 관리하고, 사용자 및 응용 프로그램이 컴퓨터와 상호작용할 수 있도록 지원하는 소프트웨어의 집합이다.이전에 hello 프로그램을 로드하고 실행했을 때 프로그램이 키보드나, 디스플레이, 디스크나 메인 메모리를 직접 엑세스하지 않았다. 운영체제가 제공하는 서비스를 활용했다.아래 그림과 같이 하드웨어와 소프트웨어 사이에 위치한 소프트웨어 계층이라고 생각할 수도 있다.운영체제의 두 가지 목적제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해응용프로그램들이 단순하고 균일한 매커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할수 있도록 하기 위해컴퓨터 시스템 계층화 모습운영체제에 의한 추..