본문 바로가기
반응형

일단 제가 준비한 건,261

운영체제 Deadlock (발생 원인, 조건, Mutual exclusion, Hold and wait, Circular wait ) Deadlock Deadlock이란 이미 다른 프로세스에 할당된 resource를 얻기 위해 다른 프로세스들이 대기하는데 이 대기시간이 무제한일 때를 의미한다. 간단한 예를 들어보자, - resource1과 resource2는 하나의 프로세스에게만 할당될 수 있다. - 각각 프로세스1과 프로세스2는 자원 1과 자원 2가 있어야 동작할 수 있다. - 프로세스1은 resource1을 가지고 있다. - 프로세스2는 resource2를 가지고 있다. 이런 상황을 deadlock이라고 한다. 즉 교착상태로 이러지도 저러지도 못하는 상황이다. resource1을 얻기 위해선 프로세스 1이 내놔야 하는데 그러기 위해선 resource2가 필요하고 프로세스2도 마찬가지다. 프로세스는 resource을 3단계로 처리한다.. 2022. 5. 19.
딥러닝을 위한 기초 개념 Gradient decent Gradient decent 최적화 알고리즘이다. 기본 개념은 함수의 기울기(경사)를 구하고 경사의 절댓값이 낮은 쪽으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다. Gradient decent는 cross entropy 같은 방법으로 에러를 측정한 뒤에 W를 업데이트하여 에러를 줄이는 방법으로 사용된다. 초기값을 잘 잡아야 한다. 이차함수(convx) 라면 시작이 어디든 최솟값을 찾아갈 수 있다 하지만 경사 하강법은 초기값이 어디냐에 따라 달라진다. 어떻게 찾아가는지 알아보자. 이때 점점 이동해야 하는데 어느 방향으로 갈지, 얼마나 갈지를 정해야 한다. 아래 수식이 Gradient decent라고 보면 된다. 얼마나 가야 할지는 내가 정한다. 하이퍼 파라미터( n )라고 부른다. 어느 방향으로.. 2022. 5. 12.
운영체제 Reader-Writers & Dining Philosophers 고전적인 동기화 문제 중에 Reader-Writers문제와 Dining Philosophers문제를 어떻게 해결하는지 알아보자. Reader-Writers 데이터베이스에서 데이터에 접근할 때, Reader와 Writer가 존재한다. Reader는 읽기만 하고 데이터를 수정하진 않고 Writer는 읽고 수정도 할 수 있다. 이런 상황에서 writer가 수정하고 있는데 다른 누군가가 읽거나 수정한다면 동기화의 문제가 생긴다. 이렇게 데이터를 수정할 때는 하나의 writer만 할 수 있도록 해야 하고 수정할 때는 reader도 읽어갈 수 없어야 한다. binary semaphore로 해결하면, "mutex"라는 공유 변수를 만들어서 1로 초기화한다. 다음으로 "read_count"라는 int 변수를 만들어 0.. 2022. 5. 12.
운영체제 Monitors & Liveness Monitors 동기화 문제를 상위 수준에서 해결하기 위해 나온 것이 Monitors이다. 클래스와 같은 구조로 지원해준다. 즉, 직접 접근이 어렵고 monitors를 통해서만 접근할 수 있다는 의미로, 공유자원을 보호할 수 있다. 각 언어마다 다 다르지만, 공통적인 부분은 여러 프로세스들에 의해 공유될 수 있다. Monitors는 한순간에 하나의 프로세스만 사용 가능하고 모니터를 누군가 사용하고 있다면 다른 프로세스들은 대기해야 하며, 공유 자원은 Monitors가 지원하는 동작으로만 접근할 수 있다. Liveness Progress와 bounded-waitiing이 모두 만족하는 상황을 Livenss라고 부른다. 이 liveness를 저해하는 요소가 3가지 있다. 1. Deadlock - 두 개 이상.. 2022. 5. 12.
운영체제 Mutex Locks & Semaphore Mutex Locks (Mutual exclusion) 프로그래머들이 하드웨어의 지원을 가지고 쉽게 동기화를 사용할 수 있게 API를 만들었는데 이 중 하나가 Mutex이다. boolean변수로 lock이 가능한지 안 한 지 알려준다. 즉, True, False로 CS에 들어갈 수 있나 없나를 판단한다. 이러니 프로세스가 하나밖에 들어갈 수 없다는 의미다. CS를 사용하고 싶을 때는 "acquire()"라는 API를 사용하고, CS를 나왔을 때는 다른 프로세스에게 넘겨주기 위해 "release()"라는 API를 사용한다. 다음 프로세스는 busy waitiing을 할 수밖에 없다는 단점이 있다.( CPU를 계속 사용하면서 대기함 == spin lock ) 하지만 실제로 리눅스에선 RQ (ready que.. 2022. 5. 12.