WIL - thread system, synchronization

Ethereal·2021년 10월 4일
0

priority scheduler : https://velog.io/@bdbest72/pintOS-project1-threads-Priority-Inversion-donation

thread system이란

https://poalim.tistory.com/26?category=758538

thread를 가장 잘 설명하는 그림이 아닐까 싶다.

프로세스란 단순히 실행 중인 프로그램이라고 볼 수 있고, 이를 위해 운영체제에 의해 메모리 공간을 할당받아있다. thread란 프로세스 내에서 실제로 작업을 수행하는 주체이다. 프로세스 내에는 한개 이상의 스레드가 존재하며 프로세스에 할당된 메모리 자원을 공유하며 작업을 수행한다.

pintos 프로젝트 1에서 다루는 thread는 user thread가 아닌 kernel thread.

Kernel thread의 가장 큰 특징은 schedulable entity라는 점이다. system scheduler가 kernel thread를 관리한다. 프로그래머는 kernel thread에 직접적인 제어를 할 수 없다.

반대로 User thread는

https://www.ibm.com/docs/en/aix/7.1?topic=processes-kernel-threads-user-threads

thread 진행흐름

synchronization

interrupt에 의해 지속적으로 context switch가 일어나는데 이때 공유된 메모리 공간에 thread들이 순차적으로 동시에 접근하게 되는 경우가 발생하는데 메모리에 저장된 값을 바꾸는 실행들이 synchronization 즉 동기화가 보장되지 않는 경우, 결과값이 기대와 아예 다를 수 있다.

Thread A : 1111 계좌에서 5,000원 출금!
Thread B : 1111 계좌에 1,000원 입금!

이와 같은 상황에서, 만약 우연히 A와 B의 작업이 동시에 일어나면 어떻게 될까?

A : 현재 잔고 10,000원 - 5,000원 -> 잔고 5,000원 return
B : 현재 잔고 10,000원 + 1,000원 -> 잔고 11,000원 return

출처: https://renelemon.tistory.com/99?category=950734 [뱃푸와 레몬 티스토리]

context switch란?
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다.
출처: https://jeong-pro.tistory.com/93 [기본기를 쌓는 정아마추어 코딩블로그]

profile
꿈에다가 우리들의 돛을 달고 앞으로 다가올 그 날을 위해 밤을 지나자

0개의 댓글