CS/운영체제
운영체제 2024.7.4
infobox503
2024. 7. 4. 13:57
11. 멀티 쓰레드 환경에서의 주의점
- 동기화를 주의해야한다
- 한 프로세스내에서는 쓰레드끼리 공유 자원을 가진다.
- 서로 다른 쓰레드가 공유 자원에 접근할 경우 값의 오류가 발생할 수 있다.
- 따라서 쓰레드들은 공유 자원에 대한 동기화가 필요하다
※ 쓰레드 동기화
- 한 쓰레드가 공유 자원을 쓰고 있으면, 다른 쓰레드가 접근할 수 없게 막는다.
- 예시
- 계좌에 1만원이있다.
- a, b는 동시에 만 원, 만 원을 가져갔다.
- 계좌는 -1만원이 된다.
동기, 비동기, 블로킹, 논블로킹 차이
https://www.youtube.com/watch?v=oEIoqGd-Sns
https://velog.io/@nittre/블로킹-Vs.-논블로킹-동기-Vs.-비동기
12. 동기, 비동기
- 동기, 비동기는 결과의 유무를 따진다.
- 동기(Synchronous)
- 요청의 결과가 나오면 다음 요청 수행
- 예시
- A는 B 작업을 요청한다
- A는 B의 작업 결과를 가지고 A 작업을 마저 수행한다.
- 비동기
- 요청의 완료를 기다리지 않고 다음 요청 수행
- 예시
- A는 B에게 작업을 요청한다
- A는 B 작업의 결과를 신경쓰지 않고 계속 자신의 작업을 한다.
13. 블로킹, 논블로킹
- 블로킹, 논블로킹은 제어권의 여부를 따진다.
- 제어권 : 제어권을 가질 경우만 해당 작업이 수행가능
- 블로킹
- 제어권을 빼앗기기 가능
- 예시
- A는 B에게 작업을 요청한다
- A는 제어권 삭제(A는 작업을 하지 못하는 상태가 됨)
- B는 제어권 획득(B는 작업을 할 수 있는 권한을 얻음)
- B 함수가 완료되면 A에게 제어권을 넘김
- A는 제어권을 받았으므로 작업을 수행 가능해짐
- 논블로킹
- 제어권을 빼앗기지 않음
- 예시
- A는 B에게 작업을 요청한다.
- A는 제어권을 보장받는다. 따라서 B에게 제어권을 주지 않는다.
- A는 계속 실행가능하다.
- QnA) B는 어디서 제어권을 받는가?
- ex) 스케줄러 등에서 받게됨
※동기, 블로킹 개념의 차이
- 동기, 비동기는 결과의 유무를 따진다.
- 블로킹, 논블로킹은 제어권의 유무를 따진다.
14. 프로세스의 종류
- 자식 프로세스
- 부모 프로세스의 복제품
- 부모 프로세스에서 fork()함수로 탄생
- 부모의 데이터, 힙, 스택을 복사 받음
- PCB는 부모, 자식이 서로 다름(프로세스 식별자(PID)가 서로 다름)
- 데몬 프로세스
- 백그라운드에서 실행되는 프로세스
- 사용자와 상호작용 불가
- 백그라운드 프로세스
- 백그라운드에서 실행되는 프로세스
- 사용자와 상호작용 가능(터미널 사용)
- 고아 프로세스
- 부모 프로세스가 먼저 종료되어 고립된 프로세스
- 설명
- 부모 프로세스는 자식 프로세스가 종료될 때, 자식 프로세스의 자원을 받는다
- 자원 : 종료 상태, PID 등
- 부모가 먼저 종료될 시, 자식 프로세스의 자원을 보낼 곳이 없다
- 부모 프로세스는 자식 프로세스가 종료될 때, 자식 프로세스의 자원을 받는다
- 문제점
- 자식 프로세스가 종료되지 않을 수 있다.
- 자식 프로세스의 종료 후에, 사용하던 자원이 그대로 남을 수 있다.
- 좀비 프로세스
- 부모 프로세스에세 종료 승인을 못받은 자식 프로세스
- 부모 프로세스는 자식 프로세스가 종료 될 시, 자식의 데이터, PID를 운영체제에 반환
- 자식이 종료 승인을 받지 못하면 PID만 살아있는 상태가 된다.
- (좀비 프로세스는 실행 자체는 종료된 상태다.)
- 남아있는 PID는 다른 프로세스의 실행을 방해할 수 있다.
- 부모 프로세스에세 종료 승인을 못받은 자식 프로세스
※백그라운드 : 사용자가 접하기 힘든 작업 공간
ex) 서버 관련 작업
15. Race Condition, Critical Section의 의미. 그리고 경쟁상태를 막기위해서는?
- Race Condition(경쟁 상태)
- 여러 개의 프로세스(or 쓰레드)가 공유 자원에 접근 시, 실행 순서에 따라 결과값이 바뀔 수 있는 현상
- Ciritical Section(임계 영역)
- Race Condition이 일어날 수 있는 공유 자원 영역을 뜻함.
- 해결 방법
- 뮤택스
- 공유 자원에 1개의 쓰레드 or 프로세스만 접근하게함
- 공유 자원에 접근할 수 있는 Key를 만든다
- 예시
- A쓰레드는 Key를 받아서 공유자원에 접근
- B쓰레드는 Key가 없어서 공유자원 접근 불가
- A쓰레드는 작업을 끝낸 후, Key반환
- B쓰레드는 Key를 얻고 공유자원에 접근
- 예시
- 세마포어
- 공유 자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타낸다
- 예시
- A쓰레드는 공유자원에 접근을 시도
- 공유자원에 접근 가능한 쓰레드의 개수가 남아있음
- A쓰레드는 공유자원에 접근
- 공유자원의 접근 가능 스레드 개수가 1개 차감
- 예시
- 공유 자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타낸다
- 뮤택스
- 임계 구역 해결 조건
- 상호 배제
- 임계구역에는 1개의 프로세스만 있어야한다
- 한정 대기
- 어떤 프로세스도 무한 대기하면 안된다.
- 진행의 융통성
- 한 프로세스가 다른 프로세스의 진행을 막으면 안된다
- 예시)
- A가 임계구역을 예약으로 잡고 쓰고있지 않다.
- ⇒ 다른 프로세스는 임계구역을 쓸 수 없는 비효율적인 상황 발생
- 예시)
- 한 프로세스가 다른 프로세스의 진행을 막으면 안된다
- 상호 배제
16. DeadLock이란? 해결 방법은?
- DeadLock(교착 상태)
- 여러 프로세스 또는 쓰레드가 서로의 자원을 기다리면서 무한히 대기하는 상태
- 해결 방법
- 예방
- 교착 상태를 유발하는 네 가지 조건을 1개 이상 무력화
- 회피
- 교착 상태가 발생하지 않는 정도로 자원 할당
- 검출과 회복
- 검출
- 자원 할당 그래프를 사용하여 교착 상태를 찾음
- 회복
- 모든 프로세스 동시 종료
- 교착상태에 있는 프로세스들 동시에 종료
- 하나씩 순서대로 종료
- 우선순위가 낮거나, 작업 시간이 짧은 순서대로 프로세스 종료
- 모든 프로세스 동시 종료
- 검출
- 예방
- 교착 상태를 유발하는 4가지 조건(1개만 없애도 교착상태 해결)
- 상호배재
- 한 자원에 여러 프로세스가 접근할 수 없다.
- 비선점
- 사용중인 자원을 다른 프로세스가 빼앗을 수 없다.
- 점유와 대기
- 하나의 자원을 소유한 상태에서 다른 자원을 기다린다.
- 원형 대기
- 각 프로세스가 원하는 자원은 원형으로 다음 프로세스가 가지고 있다.
- 상호배재
17. 식사하는 철학자 문제가 있다. DeadLock은 언제 발생하는가? 해결 방법은?
- 식사하는 철학자
- 조건
- 스파게티를 먹어야한다.
- 스파게티를 먹으려면 포크 2개를 들어야한다.
- 식사를 마치면 포크 2개를 내려놓는다.
- 서로 소통은 불가하다.
- 조건
- DeadLock이 발생하는 시기
- 5명 모두 오른쪽 포크를 든다.
- 왼쪽의 포크를 계속 기다린다. ⇒ 교착 상태
- 해결 방법
- 세마포어
- 식탁에 입장 제한 수를 둔다.
- ex)
- 최대 4명으로 식탁 인원을 제한한다.
- 여분의 포크가 1개 남는다.
- 따라서 교착 상태가 해결된다.
- ex)
- 식탁에 입장 제한 수를 둔다.
- 세마포어
18. 뮤텍스, 세마포어 설명
- 뮤택스
- 공유 자원에 1개의 쓰레드 or 프로세스만 접근하게함
- 공유 자원에 접근할 수 있는 Key를 만든다
- 예시
- A쓰레드는 Key를 받아서 공유자원에 접근
- B쓰레드는 Key가 없어서 공유자원 접근 불가
- A쓰레드는 작업을 끝낸 후, Key반환
- B쓰레드는 Key를 얻고 공유자원에 접근
- 예시
- 세마포어
- 공유 자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내게 함
- 예시
- A쓰레드는 공유자원에 접근을 시도
- 공유자원에 접근 가능한 쓰레드의 개수가 남아있음
- A쓰레드는 공유자원에 접근
- 공유자원의 접근 가능 스레드 개수가 1개 차감
- 예시
- 세마포어 종류
- 이진 세마포어
- 0 or 1 값(1개의 프로세스 or 쓰레드만 공유자원에 접근 가능)
- 카운팅 세마포어
- 2 이상의 값(여러개의 프로세스 or 쓰레드가 공유자원에 접근 가능)
- 이진 세마포어
- 공유 자원에 접근할 수 있는 쓰레드, 프로세스의 수를 나타내게 함
19. CPU 스케쥴링의 의미와 종류
- 의미
- ready queue에 있는 프로세스 중에서 어떤 프로세스에 CPU를 배정할지 정하는 것
- 종류
- 선점형
- 의미 : 프로세스가 CPU를 할당받았을 때, 운영체제가 CPU를 강제로 빼앗을 수 있는 방식
- 종류
- Round Robin(RR)
- 프로세스마다 동일한 시간 할당량 부여
- 시간 할당량을 다 쓴 프로세스는 ready queue의 맨 뒤로 보냄
- Shortest Remaining Time First (SRTF)
- CPU 점유시간이 짧은 프로세스부터 CPU 할당
- 기아 문제 유발
- Multilevel Feedback Queue(다중 레벨 피드백 큐)
- 단계별로 큐를 만듦
- 할당량을 다 쓴 프로세스는 다음 단계의 큐로 보냄
- 단계가 클수록 할당량도 커짐
- Round Robin(RR)
- 비선점형
- 의미 : 프로세스가 CPU를 할당받았을 때, 다른 프로세스가 CPU를 빼앗을 수 없는 방식
- 종류
- First Come First Served(FCFS)
- 큐에 도착한 순서대로 CPU 할당
- Shortest Job First (SJF)
- CPU 점유시간이 짧은 프로세스부터 CPU 할당
- 기아 문제 유발
- Highest Response Ratio Next
- 프로세스의 우선순위를 (대기시간 / 서비스 받는 시간)으로 부여
- First Come First Served(FCFS)
- 선점형
※ ready queue : 메인 메모리에 상주하면서 실행될 준비를 하고 기다리는 프로세스 집합
20. CPU 스케쥴링의 성능 척도에는 무엇이 있는가?
- 이용률
- CPU가 놀지 않고 일한 시간
- 처리량
- CPU의 단위 시간당 처리량
- 소요시간, 반환시간
- 프로세스가 생성되고 종료될때까지 걸린 시간
- 해당 프로세스의 대기 시간 + cpu 수행 시간 + 입출력 시간
- 대기시간
- Ready Queue에서 해당 프로세스가 기다린 총 시간
- (cpu에서 실행되다가 ready queue로 돌아가서 다시 기다린 시간도 포함)
- 응답시간
- Ready Queue에서 해당 프로세스가 처음으로 CPU와 만나기까지 걸린 시간