목록전체 글 (135)
Written by coh at home
spinlock에서의 Busy waiting을 해결해봅시다. Dijkstra님이 제안해서 이 문제점을 해결하게 됩니다. Semaphore는 음이아닌 정수형 변수인데 spinlock과 마찬가지로 초기화, P(), V()연산만 가능합니다. p()는 들어가기 전 검사 v()는 물건 돌려놓는 것으로 똑같습니다. Semaphore는 차단기라는 뜻인데 들어가기 전 검사하는 게 p() 나오면서 여는 게 v()로 비유할 수 있겠습니다. 그러면 spinlock이랑 똑같은 거 아냐? 음.. 다른 점은 임의의 변수 s 하나에 ready queue가 할당 된다는 점이 다릅니다. Semaphore는 두 종류가 있는데 하나는 Binary로 0,1을 갖는 것이 있고 Counting으로 음이 아닌 정수를 갖는 종류가 있습니다. 각각..
HW solution에서 TestAndSet instruction인 기계어를 만들어줘서 실행 중 preemption되지 않는 것을 보장해 준다. 핵심 문장은 TAS함수를 이욯하는 건데 while(TAS(lock)) do 에서 초기 lock = false이면 첫 번째 프로세스가 일을 하는 동안 두 번째 프로세스가 도착해도 while문을 계속 돌게 된다. 첫 번째 프로세스가 일을 끝내고 lock을 false상태로 만들어주면 두 번째 프로세스가 CS에 진입해서 일을 하게 됨. 근데... 프로세스가 3개 이상이면 BW조건을 위배하게 된다. 자.. 1번이 일을 하고있고 2,3번이 뺑뺑 돌고 있다면 1번이 일을 끝내고 false가 되면 둘 중 3번이 들어온다고 해보자. 4번이 새로 while 루프로 들어와서 2,4..
원래 이렇게 TIL 자세히 쓰는 거 좋아하지 않지만 운체 배울 때 배속으로 들어서 그런가 이해가 한 번에 안 되었음 ㅋㅋ 특히 process가 N개 일 때.. 그래서 나중에 또 잊어버릴 수도 있을 거 같아서 좀 자세히 정리하려고 함. Introduction 어떤 도화지가 있을 때 a가 거기에 그림을 그리고 b가 그 위에 그림을 그린다면 엉망이 될 것이다. 따라서 a, b는 서로 대화를 해서 약속을 정해야할 것이다. 즉, 정보를 공유하고 동작을 맞춰야 할 것이다. 이를 multi programming system에서의 syncronization이라고 한다. 프로세스들은 서로 어떻게 동작하는지 모른다. 비동기적인데 시스템에는 Concurrent 하게 여러 개의 프로세스들이 존재한다. 자원을 공유할 때 문제가..