카테고리 339 Synchronization Synchronization cooperating process나 thread의 목적은 resource를 공유하고, 더 빠르게 작동하고, modular 방식에서 시스템을 동작하는 것이다. Shared resource에 동시에 접근하는 것은 non-deterministic 하거나 incorrect result를 초래할 수 있다. 프로세스나 스레드의 실행 순서에 따라서 프로그램 state나 output이 달라질 수 있다. 이를 방지하기 위해서 synchronization을 해야 한다. Critical Section Problem Race Condition 여러 프로세스가 동시에 shared resource에 접근해서 값을 바꾸려는 상황을 말한다. 최종적인 결과는 프로세스의 실행 순서에 따라서 달라진다. Ra.. 2021. 6. 19. CPU Scheduling Algorithm CPU Scheduling Algorithm Priority-based scheduling 우선순위를 사용하는 알고리즘의 유형 FCFS scheduling First Come First Serve, = FIFO 프로세스가 도착한 순서대로 실행한다. SJF scheduling Shortest Job First non-preemptive, preemptive(SRTF) RR scheduling Round Robin 우선순위라는 개념이 없다. 모든 프로세스가 공평하게 CPU 시간을 나눠서 사용한다. weighted round robin scheduling multilevel queue priority based와 round robin 등 여러 스케줄링을 혼합해서 사용한다. Priority-based Sched.. 2021. 6. 19. CPU Scheduling CPU Scheduling Scheduling, Dispatching scheduling : ready 상태의 프로세스들 중에 선택하고, 선택된 프로세스에게 CPU를 할당하는 것 dispatching : 선택된 process를 실제로 실행하는 것 Scheduling Decision이 일어나는 경우 현재 실행 중인 프로세스의 상태가 바뀌었을 때만 schduling을 하는 것을 non-preemptive schduling(비선점형) 이라 한다. 모든 경우에 scheduling을 하는 것을 preemptive scheduling(선점형) 이라 한다. 일반적으로 preemptive schduling은 non-preemptive scheduling 보다 성능이 좋다. 현재 실행 중인 프로세스의 상태가 바뀌는 경우.. 2021. 6. 19. Multi-threading Thread의 구현 Thread 구현 방법에는 크게 두 가지가 있다. user thread : user level 에서 구현해서 실행 kernel thread : kernel level 에서 구현해서 실행 User Thread user space에 있는 라이브러리에 있는 api를 이용해서 thread를 생성/사용한다. thread 생성/관리에 kernel의 개입이 필요하지 않기 때문에 create와 manage가 빠르다는 장점이 있다. kernel mode로의 전환(mode switching)에 대한 비용을 절약할 수 있다. 그러나 kernel이 single thread라면, 여러 thread 중 한개의 thread라도 waiting으로 갔을 때 모든 thread가 scheduling에서 제외가 된다. .. 2021. 6. 18. Thread Thread Thread는 execution의 단위로, 스케줄링의 단위이기도 하다. 기본적으로 하나의 process 안에는 하나의 thread가 존재한다. Multithreaded는 하나의 process 안에 여러 개의 thread가 있는 것을 말한다. Memory 관점 Thread는 자신만의 stack을 가져야 한다. 따라서 thread을 사용하면 메모리 구성이 달라진다. Concurrent Function Call 각 thread는 하나의 함수로 이루어져있다. thread를 생성할 때 함수를 지정해서 생성한다. 예 : rc = pthread_cureat(&threads[t], NULL, PrintHello, (void*) t); 일반적인 프로그램(single-threaded program)은 하나의 .. 2021. 6. 18. 이전 1 ··· 38 39 40 41 42 43 44 ··· 68 다음