반응형

공부/Operating system 7

OS : Spin Lock

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. SPIN LOCK 이전 포스팅에서 본 Interrupt를 켜고 끄는 LOCK 방식의 단점을 극복한 SPIN LOCK에 대해 알아보자 단순히 구현하여 실패한 예시부터 LOCK에 성공하기 위해 여러 기계어와 결합한 다양한 버전까지 보자. 실패 예시 - Just Using Loads/Stores Line 1을 보면, Lock이 어떠한 구조체로 구현되어있다. LOCK에 걸렸는지 안걸렸는지 나타내는 flag 변수가 있다. 초기화의 경우에는 flag을 0 , LOCK을 풀어놓는다. LOCK을 거는 것은8~11번 라인을 보자. 직접 ..

OS : Lock - Controlling Interrupts

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. Controlling Interrupts Lock을 구현하는 방법(1) - Interrupts를 켜고 끈다 Lock을 거는데 왜 Interrupts는 끄고 킬까? 이에 대해서는 지난번 병행성 문제가 발생했던 상황의 Thread Trace를 살펴보자. 보면 T1이 ADD 까지 진행된 상태에서 Interrupt가 발생하여 T2로 넘어가면서 문제가 발생했다. 그렇다면 Critical Section에 진입하면서 Interrupt를 Disable 하게 되면? Interrupt에 의한 스레드 교환은 발생하지 않을 것이고 그에 따라 ..

OS : Locks - The Basic Idea

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. 이번에는 LOCK에 대한 기본적인 개념과, LOCK 구현의 평가기준에 대해 알아볼 것이다. 저번 포스팅에서 여러 스레드가 4번 라인을 실행하려 할 때 Race Condition이 발생한다고 했다. 그 이유는 이와 같이 4번 라인의 과정이 Atomic 하지 않기 때문이다. 그 결과 Indeterminate가 된다. 이러한 문제를 해결하기 위해서 나온 것이 바로 LOCK이다. 위의 코드를 보면 기존 Critical Section의 위아래로 새로운 코드가 추가되어있다. 이것이 LOCK인데, 이러한 처리를 해 줌으로써 하나의 스..

OS : Thread - API

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. pthread_create 함수에 대해 아까 알아봤었다. 다만 아까와는 조금 다른 점이, 실행할 함수에 넘겨주는 인자인데 하나밖에 못 넘겨주므로 구조체를 생성해서 넘겨주었다. main함수에서 구조체 args를 만들고 그 안에는 int a, b의 값이 저장되어있다. 이후 pthread_create로 쓰레드가 생성되고 T1의 Stack에는 args의 주소가 넘겨왔으므로 T1은 main함수의 Stack을 참조해서 값을 받아온다. 그렇다면 T1이 사용하는 것은 자신의 것이 아닌 타인의 스택 이 프로세스는 외부와는 격리되어있지만,..

OS : Concurrency - Race Condition

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. Why It Gets Worse : Shared Data 공유된 자원이 있을 때 왜 악화될까? #include #include #include "common.h" #include "common_threads.h" static volatile int counter = 0; //mythread() // //Simply adds 1 to counter repeatedly, in a loop //No, this is not how you would add 10,000,000 to //a counter, but it shows t..

OS : Concurrency : 병행성 - Intro(2)

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. p3.c 파일이 실행되었을 때 흐름에 대해 한 번 보자. Main 쓰레드가 실행되고, 이후 T1, T2가 생성되는데 join을 사용하였으므로 Main은 T1을 waits 한다. 이 과정에서 Main은 Block에 빠진다. T1은 creates Thread1에서 생성되는 시점에서는 READY runs 되면서 Running 이 동안에는 Main은 Blocked 되어있다가 T1이 끝나면서 Ready -> Running 하면서 T2를 실행시켜주고 다시 마찬가지로 Blocked에 빠진다 T2는 만들어진 시점부터 Ready였다가 R..

OS : Concurrency : 병행성 - Intro(1) + Thread

학부 수업 내용을 필기한 내용입니다. 필자가 이해를 제대로 못하고 정리한 경우 틀린 내용이 있을 수 있습니다. 그러한 부분이 있다면 댓글로 이야기하여 수정하게 해 주시면 감사하겠습니다. 실행 흐름이 여러 개 있는데 CPU는 하나 있을 때 왼쪽 Process(t0.c) 실행 흐름이 여러 개 있는 것을 볼 수 있다 메인 스레드가 있고 생성된 T1, T2 쓰레드가 있는데 이렇게 생성된 이유는 Program Code에서 라이브러리 함수를 사용하여 스레드를 생성하였기 때문이다. 결과적으로는 이렇게 하여 여러 개의 실행 흐름을 갖게 되었다. 오른쪽 실행 흐름이 하나 있는 프로세스 둘 다 Address Space 존재 Open File Descriptor 존재 PCB 존재 Program Code에서 main() 실행..

반응형