일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 텐션 업 10기!
- 우유아야
- Have a good day :)
- Have a nice day.
- Hamming weight
- DFS
- 모르고리즘
- Java 환경 설정
- 코로나 싫어요
- 수학
- SeongSeobDang
- amazon
- LeetCode #릿코드 #좋은 하루 되세요 #Have a nice day
- BFS
- I am Korean
- SSAFY 10기 화이팅
- 네트워크
- SSAFY 테스트
- 우유가 옆으로 넘어지면 아야
- have a nice day
- 자고 싶다
- 우유가옆으로넘어지면아야
- SSAFY IM/A
- HAVE A GOOD DAY
- 아자아자 화이팅
- DP
- 텐션 업 10기 화이팅
- 자료구조
- SSAFY 화이팅
- Today
- Total
Hope Everyone Is Happy
6. 스레드 본문
본 게시글은 책 : 면접을 위한 CS 전공지식 노트 (출판사 : 길벗, 주홍철 지음) 을 참조하여 작성하였습니다. + 구글링
◆ 프로세스와 스레드
- 프로세스
--> 프로그램을 만들면 그 프로그램은 하드디스크에 저장
--> 운영체제를 통해서 그 하드디스크에 저장된 파일들을 확인
--> 운영체제가 제공하는 입출력을 통해서 (키보드, 마우스 등) 프로그램 실행
--> 프로그램을 실행하기 위해 메모리에 실행에 필요한 데이터들이 올라감
--> CPU에서 메모리에 올라온 데이터를 Read/Write하며 프로그램을 실행
--> 이 때 CPU에서 동작 시키고 있는 것이 프로세스 (Process)
- 스레드
: 프로세스 내에서 실행되는 여러 흐름의 단위 ( 작업의 단위)
: 프로세스의 실행 가능한 가장 작은 단위, 프로세스는 여러 스레드를 가짐
: 코드, 데이터, 스택, 힙을 각각 생성하는 프로세스와 달리 스레드는 코드, 데이터, 힙을 서로 공유
- 멀티 스레딩
: 프로세스 내 작업을 여러 개의 스레드, 멀티 스레드로 처리하는 기법
: 스레드끼리 서로 자원을 공유하기 때문에 효율성 보장
ex) 웹 요청을 처리할 때 새 프로세스 생성 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비
: 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능
: 동시성에도 큰 장점
=> ( 동시성 : 서로 독립적인 작업들을 작은 단위로 나누고 동시에 실행되는 것처럼 보여주는 것 )
: 하지만 한 스레드에 문제가 생기면 다른 스레드에도 영향을 끼쳐 프로세스에 영향을 줄 수 있는 단점 존재
ex) 멀티스레드의 예시, 웹 브라우저의 렌더러 프로세스
=> 이 프로세스 내에는 메인 스레드, 워커 스레드, 컴포지터 스레드, 레스터 스레드가 존재
◆ 공유 자원과 임계 영역
- 공유 자원 (shared resource)
: 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미
: 공유 자원을 2개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태 (race condition)로 정의
: 동시에 접근을 시도할 때 접근의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태
ex) 코인 100개라는 자원에
프로세스 A와 프로세스 B에서 동시에 코인 100개 확인, 코인 100개 추가 라는 작업이 들어왔을 때,
코인 100개 추가가 동시에 이루어져 결과값이 코인 300개가 아닌, 코인 200개로 출력 될 수 있다.
- 임계 영역 (critical section)
: 둘 이상의 프로세스, 스레드가 공유 자원에 접근할 때 순서 등의 이유로 달라지는 코드 영역
: 임계 영역을 해결하기 위한 방법은 크게 뮤텍스, 세마포어, 모니터 세 가지 존재
: 위 3가지 방법은 상호 배제, 한정 대기, 융통성이라는 조건을 만족
·상호 배제 = 한 프로세스가 임계 영역에 들어갔을 때 다른 프로세스는 들어갈 수 없다.
·한정 대기 = 특정 프로세스가 영원히 임계 영역에 들어가지 못하면 안된다.
·융통성 = 한 프로세스가 다른 프로세스의 일을 방해해서는 안된다.
: 토대가 되는 메커니즘은 잠금(lock)
ex) A의 작업이 끝날 때까지 잠그고, 작업이 끝나면 잠금 해제 후 다른 작업 B 를 진행
- 뮤텍스 (mutex)
: 프로세스나 스레드가 공유자원을 lock()을 통해 잠금 설정하고 사용한 후에 unlock()을 통해 잠금 해제하는 객체
: 잠금이 설정되면 다른 프로세스나 스레드는 잠긴 코드 영역에 접근 불가, 해제 후 접근 가능
: 뮤텍스는 잠금 or 잠금 해제
- 세마포어 (semaphore)
: 일반화된 뮤텍스로 간단한 정수값과 두 가지 함수 wait(or P) 및 signal(or V)로 공유 자원에 대한 접근을 처리
: wait()은 자신의 차례가 올 때 까지 기다리는 함수이며, signal()은 다음 프로세스로 순서를 넘겨주는 함수
1. 프로세스나 스레드가 공유 자원에 접근 하면 세마포어에서 wait() 작업을 수행
2. 작업을 수행 완료 후 프로세스나 스레드가 공유 자원을 해제하면 세마 포어에서 singal()작업을 수행
: 세마포어에는 조건 변수 X
: 프로세스나 스레드가 세마포어 값을 수정할 때 다른 프로세스나 스레드는 동시에 세마포어 값을 수정 불가
- 바이너리 세마포어
: 0과 1의 두 가지 값만 가질 수 있는 세마포어 (0이면 잠금, 1이면 해제)
: 뮤텍스는 잠금을 기반으로 상호배제가 일어나는 '잠금 메커니즘'
=> 오직 하나의 쓰레드만이 동일한 시점에 뮤텍스를 얻고, 이 쓰레드만이 임계 영역에서 뮤텍스를 해제
바이너리 세마포어는 신호를 기반으로 상호 배제가 일어나는 '신호 메커니즘'
=> 락을 걸지 않은 쓰레드도 Signal을 보내 락을 해제 가능
ex) 휴대폰에서 노래를 듣다가 전화가 오면, 노래가 중지되고 통화 작업 진행
- 카운팅 세마포어
: 여러 개의 값을 가질 수 있는 세마포어, 여러 자원에 대한 접근을 제어
- 모니터
: 둘 이상의 스레드나 프로세스가 공유 자원에 안전하게 접근할 수 있도록
공유 자원을 숨기고 해당 접근에 대한 인터페이스만 제공
: 위와 같이 모니터큐에 공유 자원에 대한 작업들을 큐 구조로 저장하여 FIFO 형태로 작업들을 처리
: 모니터는 세마포어보다 구현이 쉬움
: 모니터에서 상호 배제는 자동인 반면에, 세마포어에서는 상호 배제를 명시적으로 구현해야하는 차이점 존재
◆ 교착 상태
- 교착 상태 (deadlock)
: 두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태
ex) 프로세스 A가 프로세스 B의 자원을 요청할 때,
프로세스 B도 프로세스 A가 점유하고 있는 자원을 요청
- 교착 상태의 원인
· 상호 배제 : 한 프로세스가 자원을 독점하고 있으며 다른 프로세스들은 접근이 불가
· 점유 대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하는 상태
· 비선점 : 다른 프로세스의 자원을 강제적으로 가져올 수 없음
· 환형 대기 : 프로세스 A는 프로세스 B의 자원을 요구하고, 프로세스 B는 프로세스 A의 자원을 요구하는 등 서로가 서로의 자원의 상황을 요구하는 상황
- 교착 상태의 해결 방법
1. 자원을 할당할 때 애초에 조건이 성립되지 않도록 설계
2. 교착 상태 가능성이 없을 때만 자원 할당되며, 프로세스당 요청할 자원들의 최대치를 통해 자원 할당 가능 여부를 파 악하는 '은행원 알고리즘' 사용
3. 교착 상태가 발생하면 사이클이 있는지 탐색 후, 이에 관한 프로세스를 한 개씩 삭제
4. 교착 상태는 매우 드물게 일어나기 때문에 이를 처리하는 비용이 더 커서 교착 상태가 발생하면 사용자가 작업을 종료
ex) 프로세스를 실행하다 '응답 없음' 발생
은행원 알고리즘
- 총 자원의 양과 현재 할당한 자원의 양을 기준을 안정 또는 불안정 상태로 나누고
안정 상태로 가도록 자원을 할당하는 알고리즘
위의 글과 관련하여 추가적인 내용이나 피드백은 언제나 환영입니다 :)
'※ CS 스터디 > 운영체제' 카테고리의 다른 글
7. CPU 스케줄링 (0) | 2023.11.07 |
---|---|
5. 프로세스 (0) | 2023.09.19 |
4. 메모리 관리 (0) | 2023.09.13 |
3. 메모리 계층 (0) | 2023.09.12 |
2. 컴퓨터의 요소 (0) | 2023.09.10 |