Operating System(14)
-
[Operating System] Concurrency Bugs
위의 표에서 보듯이 많은 어플리케이션들에서 발생하는 버그는 주로 concurrency와 관련이 있다. 이 포스팅에서는 여러 concurrency 버그 중에서 데드락(Deadlock)에 대해서 다룬다. Deadlock이란? 데드락은 두 개 이상의 쓰레드가 있을 때 서로 상대방이 끝나기만을 기다려서 어떤 것도 진행되지 못하는 상황을 의미한다. 복잡하고 큰 시스템에서는 모듈들 간에 dependency를 파악하기가 상당히 까다롭기 때문에 데드락에 대처하기가 어렵다. 또한 많은 모듈들이 캡슐화 되어 있어서 모듈 내부에서 어떤 식으로 lock을 잡고 놓는지 파악하는 것도 어려운 일이다. Deadlock이 발생하는 조건 데드락이 발생했다는 건 다음 4가지 조건이 모두 만족 되었다는 의미이다. 이는 다시 말해서 다음 ..
2020.06.04 -
[Operating System] Semaphore
Semaphore란? 이전 포스팅에서 살펴본 CV와 이번에 살펴볼 semaphore는 모두 blocking 매커니즘으로 작동한다. 다시 말해서 현재 쓰레드가 진행 될 수 없는 상황이면 스스로를 run queue에서 제외 시키고(BLOCK 상태로 만들고) 다른 쓰레드에게 컨트롤을 넘긴다. CV가 컨디션 만족 여부를 판단하는 변수에 해당한다면, semaphore는 wait와 post 함수를 통해 증감하는 정수 값을 가진 변수라고 할 수 있다. int sem_wait(sem_t *s) Semaphore의 값을 1 감소 시키고, 감소 이후의 값이 음수(readers = 0; sem_init(&rw->lock, 0, 1); sem_init(&rw->writelock, 0, 1); } // reader가 공유 변수..
2020.06.04 -
[Operating System] Condition Variable
상호배제의 문제는 lock을 통해서 해결했지만, lock은 쓰레드 간에 lock을 얻는 순서를 정해줄 수 있는 기능은 없다. 이와 같은 ordering의 문제는 CV와 semaphore를 통해서 해결할 수 있다. CV란? CV란 말 그대로 조건이 만족되기를 기다리는 공유 변수를 의미한다. 뒤에서 살펴 보겠지만 CV가 쓰레드 간에 공유되는 state라는 점은 꼭 명심해야할 부분이다. Ex) 쓰레드에서 instruction 수행 이전에 컨디션이 만족 되었는지를 먼저 확인하고 싶은 경우가 존재한다. 예를 들어서 parent 쓰레드가 child 쓰레드가 완료되었는지(exit 했는지) 확인을 하고 싶은 경우에 join()을 사용한다. CV의 특징 1. 쓰레드 간 공유되는 공유 변수이므로 상호 배제가 되어야 한다...
2020.06.03 -
[Operating System] Locks
Lock이란? Lock은 critical section의 operation들을 single atomic instruction처럼 실행되도록 보장해준다. lock variable은 lock의 상태에 대한 정보를 hold 한다. available: unlocked, free acquired: locked, held lock(): lock을 획득하고자 시도한다. lock을 잡은 다른 쓰레드가 없으면 lock을 획득하고 critical section에 들어간다. mutex: POSIX lib에서 사용하는 lock의 이름 다른 공유 변수에 대해선 다른 lock을 사용하는 것이 바람직하다. lock의 구현을 위해선 HW와 OS 모두의 support가 필요하다. HW의 도움이 필요한 이유? flag를 이용해서 loc..
2020.06.03 -
[Operating System] Distributed System and NFS (Network File System)
파일 시스템의 종류 1. Local FFS (Fast File System) LFS (Log-Structured File System) 2. Network NFS (Network File System) AFS (Andrew File System) 분산 시스템이란? 분산 시스템이란 2개 이상의 기계가 하나의 문제를 풀기 위해서 함께 일하는 것을 의미한다. 분산 시스템은 다음과 같은 이점을 가진다. More computing power More storage capacity Fault tolerance Data sharing 분산 시스템에서의 새로운 문제 분산 시스템을 사용함에 따라서 다음과 같은 새로운 고민거리들이 생긴다. System failure: 여러 머신 중에 일부만 고장난 경우에 어떻게 복구할 것..
2020.06.03 -
[Operating System] LFS (Log-Structured File System)
파일 시스템의 종류 1. Local FFS (Fast File System) LFS (Log-Structured File System) 2. Network NFS (Network File System) AFS (Andrew File System) LFS의 목적, 특징 COW(copy-on-write)의 사용: COW 방식은 journaling으로 인해 2번 중복 write하는 오버헤드가 없으며, 공간적인 오버헤드도 없다. FFS는 read를 보다 빨리 하는 것에 초점이 맞춰져 있다면, LFS에서는 wrtie를 빨리하는 것에 초점을 두었다. 목적 RAID-5와 같은 경우 sequential write와 random write의 성능 차이가 매우 심하다. (random이 너무 별로다.) 따라서 LFS에서는 ..
2020.06.03