2022. 12. 15. 17:32ㆍcs일지
2022/12/14
- 학습내용
1. 스레드
스레드(thread)
스레드는 프로세스 내에서 실제로 작업을 수행하는 주체를 의미한다.
모든 프로세스에는 한 개 이상의 스레드가 존재하여 작업을 수행한다.
또한, 두 개 이상의 스레드를 가지는 프로세스를 멀티스레드 프로세스(multi-threaded process)라고 한다.
https://leedonggu.tistory.com/26
프로그래밍 기초탄탄#9 스레드
2022/10/31 학습내용 1.스레드 프로세스(Process) 프로그램이 실행되는 상태, 컴퓨터가 어떤 일을 하고 있는 상태를 프로세스라고 한다. 즉, 사용자가 작성한 프로그램이 os에 의해 메모리 공간을 할당
leedonggu.tistory.com
2.멀티스레딩
하나의 프로세스가 다수 개의 작업을 각각 스레드를 이용하여 동시에 작동 시킬 수 있다.
스레드는 다음과 같은 공유 메모리를 가진다.
장점
시스템 자원소모 감소 (자원의 효율성 증대)
- 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어 자원을 효율적으로 관리할 수 있다.
- 시스템 처리율 향상 (처리비용 감소)
- 스레드 간 데이터를 주고 받는 것이 간단해지고 시스템 자원 소모가 줄어든다.
- 스레드 사이 작업량이 작아 Context Switching이 빠르다. (캐시 메모리를 비울 필요가 없다.)
- 간단한 통신 방법으로 프로그램 응답시간 단축
- 스레드는 프로세스 내 스택영역을 제외한 메모리 영역을 공유하기에 통신 비용이 적다.
- 힙 영역을 공유하므로 데이터를 주고 받을 수 있다.
문제점
- 자원을 공유하기에 동기화 문제가 발생할 수 있다. (병목현상, 데드락 등)
- 주의 깊은 설계가 필요하고 디버깅이 어렵다. (불필요 부분까지 동기화하면, 대기시간으로 인해 성능저하 발생)
- 하나의 스레드에 문제가 생기면 전체 프로세스가 영향을 받는다.
- 단일 프로세스 시스템의 경우 효과를 기대하기 어렵다.
3.공유자원(Shared resource)
공유 자원(shared resource)은 여러 프로세스가 공동으로 이용하는 변수, 메모리, 파일 등을 말한다.
공유 자원은 공동으로 이용되기 때문에 누가 어떻게 데이터를 읽거나 쓰느냐에 따라 결과가 달라질 수 있다.
ex) 프로세스 A와 프로세스 B가 전역 변수 예금을 읽는다.
둘 다 1000원을 읽었다.
그 후 A가 +500원 저장, 결과(1500원)
B가 -500원 저장했다. 결과(1000원)
결과값은 1000원이 저장돼야 하지만, B가 더 나중에 저장했으므로 500원이 저장된다.
그냥 B의 처음 1000원을 읽고 -500원하고 저장하고 남은 500원이 최종적으로 저장된다.
이렇게 2개 이상의 프로세스가 공유 자원을 병행적으로 읽거나 쓰는 상황을 경쟁 상태( Race Condition)라 한다.
동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태인 것이다.
4.임계영역(Critical Section)
임계 영역이란 한 순간 반드시 프로세스 하나만 진입해야 하는데, 프로그램에서 임계 자원을 이용하는 부분으로 공유 자원의 독점을 보장하는 코드 영역을 의미한다. 임계 구역은 지정된 시간이 지난 후 종료된다.
공유되는 자원, 즉 동시접근하려고 하는 자원에서 문제가 발생하지 않게 독점을 보장해줘야 하는 영역을 임계 영역이라고 한다.
임계영역 해결 조건
1) 상호 배제(Mutual exclution)
하나의 프로세스가 임계 영역에 들어가 있다면 다른 프로세스는 들어갈 수 없어야 한다.
2) 한정 대기(Bounded waiting)
한 번 임계 영역에 들어간 프로세스는 다음번 임계 영역에 들어갈 때 제한을 두어야 한다.
3) 진행(Progress)==융통성
임계 구역에 들어간 프로세스가 없는 상태에서, 들어가려고 하는 프로세스가 여러 개 있다면 어느 것이 들어갈지를 적절히 결정해주어야 한다
임계영역 해결 방법
여러 프로세스나 스레드가 공유 자원에 접근하는 것을 제어하기 위한 방법이다.
즉, 병행 처리를 위한 프로세스 동기화 기법이다.
1) 뮤텍스(상호 배제)
뮤텍스는 프로세스나 스레드가 공유 자원을 lock을 통해 잠금 설정하고 사용한 후에는 unlock을 통해 잠금 해제하는 객체이다.잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근할 수 없고 해제는 그와 반대이다.뮤텍스는 잠금 or 잠금 해제의 상태만을 가진다.
2) 세마포어
세마포어는 일반화된 뮤텍스이다.
세마포어는 정수값 하나를 가지고 있는데, 이는 공유자원에 접근할 수 있는 프로세스 혹은 쓰레드의 최대 허용치이다.
만약 이 정수값이 3이라면, 최대 3개의 프로세스가 공유 자원에 접근할 수 있는 것이다.
프로세스는 이 공유 자원에 접근하면, 정수값 하나를 줄인다.
공유 자원을 모두 사용하고 임계 구역에서 나온 프로세스는 다시 정수값을 하나 늘린다.
각각의 과정을 wait() (또는 P), signal() (또는 V) 라고 한다.
wait() 함수
프로세스가 공유 자원에 접근할 때는 wait() 함수를 실행한다.
wait() 함수는 세마포어 정수의 값을 1 감소시킨다.
만약 감소된 세마포어 정수가 음수라면, 해당 프로세스는 세마포어 대기열에서 기다려야 한다.
signal() 함수
프로세스가 공유 자원을 모두 사용하고 임계 구역에서 벗어날 때 signal() 함수를 실행한다.
signal() 함수를 실행하면 세마포어 정수를 1 증가시키고, 세마포어 대기열에서 기다리고 있는 맨 앞의 프로세스 하나를 깨워 공유 자원을 허용한다.
세마포어 정수의 크기에 따라 바이너리 세마포어(binary semaphore)와 계수 세마포어(counting semaphore)로 구분된다.
바이너리 세마포어는 세마포어 정수를 0과 1로만 가질 수 있다.
바이너리 세마포어는 뮤텍스와 비슷하게 동작한다.
단, 뮤텍스는 잠금 메커니즘이고, 세마포어는 신호 기반의 상호 배제 방법이다.
계수 세마포어는 1보다 큰 세마포어 정수를 가질 수 있는 방식을 의미한다.
3) 모니터
모니터는 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록 공유자원을 숨기고 해당 접근에 대해 인터페이스만 제공한다.
모니터는 모니터큐를 통해 공유 자원에 대한 작업들을 순차적으로 처리한다.
모니터는 세마포어보다 구현하기 쉬우며 모니터에서 상호 배제는 자동인 반면에,
세마포어에서는 상호 배제를 명시적으로 구현해야 하는 차이점이 있다.
5.교착상태(Deadlock)
교착 상태는 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태를 말한다.
무한 대기에 빠지는 상황을 말한다.
교착 상태 원인
1) 상호 배제
한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.
2) 점유 대기
자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.
3) 비선점
이미 할당된 자원을 강제로 빼앗을 수 없다(비선점).
4) 순환 대기
대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.
교착 상태 해결 방법
1. 예방(prevention) : 교착 상태 원인 4가지 중 하나라도 발생하지 않도록 사전에 조치를 취하는 것이다.
2. 회피(avoidance) : 자원할당 그래프, 은행원 알고리즘을 적용하여 발샐을 회피한다.
3. 회복(recovery) : 교착 상태를 일으킨 프로세스를 종료시켜 자원을 해제해서 회복시킨다.
4. 무시(ignore) : 부하가 너무 심할 경우 교착상태를 무시한다.
은행원 알고리즘
은행원 알고리즘은 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래한 기법이다.
은행원 알고리즘은 자원 할당 결정전에 예상되는 모든 자원의 최대 할당량을 가지고 시뮬레이션을 하여 안전 상태에 들 수 있는지 여부를 검사하여 교착상태의 가능성을 미리 조사하는 알고리즘이다.
각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전상태, 교착상태가 발생할 수 있는 상태를 불안전 상태라고 한다.
기본 개념 자체는 "CPU는 최소한 하나의 프로세스에게 할당해줄 만큼의 자원을 항상 보유하고 있어야 한다"
은행원 알고리즘을 적용하기 위해서는 자원의 양과 사용자(프로세스) 수가 일정해야 한다.
은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간안에 할당하는 것을 보장한다.
'cs일지' 카테고리의 다른 글
cs 전공지식 #34 팩토리 패턴 (0) | 2023.02.22 |
---|---|
cs 전공지식 #33 운영체제 - CPU스케줄링 알고리즘 (0) | 2022.12.16 |
cs 전공지식 #31 운영체제 - PCB, 멀티 프로세싱 (0) | 2022.12.13 |
cs 전공지식 #30 운영체제 - 프로세스와 스레드, 프로세스의 메모리 구조 (0) | 2022.12.13 |
cs 전공지식 #29 운영체제 - 페이지 교체 알고리즘 (0) | 2022.12.11 |