Virtualization Part에서 우리는 process라는 것을 배웠다.
지금까지는 그래서... task와 process를 별도로 구분하지 않았다.
그렇지만 개념적으로 process는 task의 virtualization이 아니다!
fork1()
library도 자체적으로 현재 진행상황을 저장하는 경우가 있다.
일반적으로 library는 공유된다!
그래서 Multithread-safe(MT-safe) 기능을 가지는 library들이 나고고 있다.
OS가 thread를 만들어 준다!
OS가 process를 만들고 관리하던 것을 우리는 배웠다. 그것과 유사하게 thread 역시 그리하겠다는 것에 불과하다.
대부분의 OS가 이렇게 한다.
fork()
같은 process syscall에 비해서는 낫지만, 그래도 여전히 비싸다...)a race condition: the results depend on the timing execution of the code.
-> we call this result indeterminate* where it is not known what the output will be and it is indeed likely to be different across runs.
Because multiple threads executing this code can result in a race condition, we call this code a critical section.
-> A critical section is a piece of code that accesses a shared variable (or more generally, a shared resource) and must not be concurrently executed by more than one thread.
mutual exclusion: guarantees that if one thread is executing within the critical section, the others will be prevented from doing so.
Sometimes, the grouping of many actions into a single atomic action is called a transaction.