운영체제
-
[OS] Mutex, Semaphore 동기화, Busy waiting운영체제 2020. 11. 28. 04:42
Mutex Locks OS 가 Critical section 문제를 해결하기 위해 가장 간단하게 제공하는 솔루션임 Atomic 하게 수행되는 acquire(), release() 함수를 통해 이를 수행함 acquire() = Lock 을 얻어 C.S.에 접근하는 함수 release() = C.S. 작업을 모두 마쳐 Lock 을 해제하는 함수 단점 : busy waiting ( = Lock 을 얻을 때까지 의미 없이 접근을 시도하는 것. 이러한 Lock 을 spinlock 이라함) Semaphore Mutex lock 은 자원의 개수가 여러개 일 때에도 하나의 스레드만 접근을 허용하는데 세마포어는 개수까지 고려하여 N개의 프로세스가 동시에 접근할 수 있도록 함 wait(), signal() 함수를 통해 구..
-
[OS] Critical section (임계구역), test_and_set, compare_and_swap운영체제 2020. 11. 28. 04:40
Critical Section(임계 구역) 두 개 이상의 thread 가 동시에 접근하면 안되는 영역을 말함. 여러 스레드가 동시에 공유 자원에 접근하고, 이에 수정을 가하는 경우 원하지 않는 결과가 도출될 수 있기 때문에 정의된 영역임 while (true) { } Critical section 문제를 잘 해결하지 않으면 서로 다른 프로세스에서 fork() 함수가 동시에 호출되었을 때 두 프로세스가 동시에 Process descriptor 로부터 pid 를 할당받게되고, 둘이 같은 pid 를 할당 받을 수도 있음 Critical section 문제의 해결을 위한 조건 Mutual exclusion(상호배제) : 한 프로세스가 임계 구역을 수행하고 있다면 다른 프로세스 그 누구도 임계 영역을 수행할 수 ..
-
[OS] 동기화와 Race condition운영체제 2020. 11. 28. 04:35
Synchronization Producer : 데이터를 제공하는 스레드 ( 예를 들어 무한 반복하며 counter++; 하는 스레드) Consumer : 데이터를 소비하는 스레드 ( 무한 반복하며 counter--; 하는 스레드) 멀티 스레드 환경에서는 counter 라는 공유 변수에 동시에 접근하여 예상하지 못한 결과가 발생하곤 함 Race condition 공유 데이터에 여러 프로세스가 동시에 접근하려고 하는 상황 Race condition 이 발생하는 순간 데이터의 consistency 가 깨졌다. 라고 표현하며 이 경우 Synchronization(동기화) 를 제공해주어야함 예를 들어 counter 가 0 일 때 producer 스레드가 6번 수행되고, consumer 스레드가 1번 수행된다면 ..
-
[OS] 스레드와 시그널 및 스레드 취소운영체제 2020. 11. 27. 20:45
시그널 처리 시그널이란 OS 입장에서 프로세스에게 어떤 사건이 일어났음을 알리기 위한 수단 Synchronous signal : 어떤 사건을 처리하기 위해 발생(잘못된 메모리 접근, 0으로 나누기 등) Asynchronous signal : 임의 시점에 발생 (Ctrl-C, 타이머 만료 등) 이러한 시그널은 반드시 처리(handling) 되어야함 Default signal handler : 기본 처리 방법을 정의한 것으로 보통 프로세스의 종료로 이어짐 User-defined signal handler : 사용자가 직접 정의한 시그널 처리 방법 단일 스레드 프로세스는 프로세스 단위로 시그널이 처리됨 멀티 스레드 프로세스는 구현에 따라 여러 정책이 가능 모든 스레드에게 시그널 전달 몇몇 스레드에게만 전달 특..
-
[OS] Implicit Threading운영체제 2020. 11. 27. 20:43
Implicit Threading 프로그래머가 직접 스레드를 만들지 않고, 알아서 만들고 관리해주는 개념 3 가지 메인 방법이 존재 Thread pools OpenMP Grand Central Dispatch Thread pool 스레드를 매번 생성하는 것은 큰 오버헤드이므로 프로세스 실행 시에 미리 여러 개의 스레드를 만들어두고 스레드 풀에 저장해둠 요청을 받으면 서버는 풀로부터 스레드를 깨워서 요청을 전달 → 스레드 종료 시 다시 풀로 반환됨 (재활용) 서버가 요청을 받았을 때 스레드 풀에 가용한 스레드가 없다면 가용 스레드가 생길 때까지 대기함 이미 존재하는 스레드에 작업을 요청하는 것이 새로운 스레드를 생성하는 것보다 더 빨리 서비스 받을 수 있음 OpenMP #pragma omp parallel..
-
[OS] 유저스레드와 커널스레드운영체제 2020. 11. 27. 20:41
User Threads and Kernel Threads User thread : pthread나 java 라이브러리와 같이 스레드 라이브러리로 생성하고 관리되는 스레드 Kernel thread : 커널에서 제공하는 스레드 User thread 와 kernel thread 는 서로 연결되어있음 관계 Many-to-One Model User thread 가 많이 생성 되더라도 실제로 동작하는 것은 kernel thread 이므로 단일 스레드와 다를 것이 없음 One-to-One Model 현대 OS에서 대부분 채택하는 방식으로, 컴퓨팅 리소스가 커지면서 가능하게 됨 장점 : 매우 이상적이고, 빠름 단점 : 너무 많은 스레드를 운용하면 스레드 포화가 올 수 있음 Many-to-Many Model 운영체제가 ..
-
[OS] 멀티스레드 개념 (동시성 vs 병렬성)운영체제 2020. 11. 27. 20:40
Thread 스레드 : 프로세스 내의 제어 흐름 : CPU 이용의 기본 단위 동일 프로세스의 여러 스레드는 CODE, DATA 영역과 운영체제 자원(파일, 시그널 등)을 공유 하지만 Heap과 Stack 은 공유하지 않음 Multithreading 하나의 프로세스에서도 여러 개의 스레드를 통해 병렬적으로 작업을 처리할 수 있음 장점 Responsiveness : 응답성의 향상 Resource Sharing : 프로세스가 리소스를 공유하는 비용보다 훨씬 적은 비용으로 스레드 간의 리소스 공유가 가능 Economy : 프로세스 생성 비용보다 더 저렴한 비용으로 스레드 생성 가능 + context switching 또한 스레드 간의 스위칭이 더 저렴함 Scalability : multiprocessor 아키텍..