쓰레드 2

[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..

[Pintos : 동기화] 락(Lock)

락(Lock)세마포어와 유사하지만 주로 리소스에 대한 상호 배제를 보장하기 위해 사용된다.세마포어처럼 동작하지만 초기값이 1인 세마포어와 동일한 개념이다. 락의 목적한 번에 하나의 스레드만 특정 리소스에 접근할 수 있도록 보장락의 연산 락 획득(Acquire): 세마포어의 down 연산에 해당하며, 락을 잠그고 현재 스레드가 리소스를 사용하게 만듭니다.락 해제(Release): 세마포어의 up 연산에 해당하며, 락을 풀고 다른 대기 중인 스레드가 리소스를 사용할 수 있도록 합니다.락의 추가적인 제약세마포어와 비교했을 때, 락에는 하나의 중요한 제약이 있습니다. 락을 획득한 스레드, 즉 `락의 소유자(owner)`만 `그 락을 해제`할 수 있습니다. 만약 다른 스레드가 락을 해제하려고 시도하면, 이는 잘못..