본문 바로가기

스터디스터디/정처기

[실기] 운영체제- 병행 프로세스와 교착 상태

최초 작성일: 2024-08-26

최종 작성일: 2024-08-26

목표 : 정처기 합격 및 CS 지식 쌓기

 

1.    병행프로세스

(1)   병행 프로세스의 개념 : 두개 이상의 프로세스가 동시에 존재하며 실행 상태에 있는 것

(2)   문제점 과 해결 책

(3)   문제점 : 동시에 여러 프로세스를 처리할 때 한정된 자원에 대한 사용순서등의 문제가 발생할 수 있다

(4)   해결책 : 임계 구역( 어떤 자원이 있으면 이 자원에 대해서는 하나의 프로세스만 들어갈수 있도록 하는 것), 상호배제 기법, 동기화 기법 (상호 배제 기법과 동기화 기법을 이용해서 임계구역에 접근 할 수 있도록 한다)

갱신 분실, 모순성, 연쇄복기, 비완료 의존성, -> 로킹, 2단계 로킥, 타임스탬플, 낙관적 병행제어

2.    병행 프로세스 문제 해결책

(1)임계구역 (Critical Section)

여러 프로세스가 공유하는 데이터나 자원에 대해 한번에 하나의 프로세스만이 접근할 수 있도록 지정된 영역

특징: 특정 프로세스가 독점할 수 없다/ 진입 요청 시 일정 시간 내에 진입을 허락해야한다.

(2) 상호 배제(Mutual Exclusion) : 한 프로세스가 공유 메모리나 파일을 사용 중일 때 다른 프로세스가 사용하지 못하도록 하는 제어 기법( 임계 구역에 다른 프로세스가 들어가지 못하도록 막는 것- 배제 하는 것)

상호 배제 기법 : 데커의 알고리즘/ 피터슨의 알로리즘/ 다익스트라 알고리즘/ 램포트의 베이커리 알고리즘

(3) 동기화 기법 : 스레드 들에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정해주는 기법

(3)-1) 세마포어 (수신호) : 프로세스에 제어 신호를 전달 하여 순서대로 작업을 수행하도록 하는 기법/ 다익스트라가 제안/ p v라는 2개의 연산에 의해서 동기화를 유지시키고 상호배제의 원리를 보장/ p는 임계 구역에 들어가기 전에 수행되고, v는 임계 구역에서 나올 떄 수행/ 종류: 계수 세마포어, 이진 세마 포어

(3)-2) 모니터 : 프로그래밍 언어 수준에서 동시성을 제어하는 상호 배제 기법/ 모니터 내의 자원을 공유하려면 프로세스는 반드시 모니터의 진입부를 호출 해야하 함. / 모니터 외부의 프로세스는 모니터 내부의 데이터를 직접 액세스 할 수 없음/ wait signal 연산이 사용

3. 교착상태(Dead Lock)

(3)-(1) 교착 상태의 개념: 상호 배제(하나의 임계 구역에 하나의 프로세스 진입만 허용)에 의해 나타는 문제점으로 여러 프로세스가 자원을 점유한 상태에서 서로 다른 프로세스의 자원을 요구하며 무한정 기다리는 현상

(3)-(2) 교착 상태 발생 조건

발생조건 설명
상호배제 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있다
점유와 대기(Hold & Wait) 자원을 점유하면서 다른 프로세스에 할당된 자원을 추가로 요구하며 대기한다
비 선점 프로세스에 할당된 자원을 사용이 끝날 때 까지 강제로 빼앗을 수 없다
환형 대기(Circular Wait) 각 프로세스가 순차적으로 다음 프로세스가 요구되는 자원을 가지고 있는 상태(서로 양보 안함)

(3)-(3) 교착 상태 해결 방법

해결방법 설명
발견 기법(Detection) 시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 방법
회복 기법(Recovery) 교착 상태를 일으킨 프로세스를 종료하거나 교착 상태의 프로세스에 할당된 자원을 선점하여 회복하는 방법
예방 기법 교착 상태가 발생하지 않도록 시스템을 사전에 제어하는 방법
회피 기법
(Avoidance)
교착상태 발생 가능성을 피하는 방법으로 주로 은행원 알고리즘이 사용(은행원 알고리즘: 돈 입금과 빌려주는 것이 목적, 10억을 빌려주기 위해 10억이 초과되는 것을 빌려주지 말자?)

 

병행 프로세스

운영 체제에서는 여러 프로그램이 동시에 운영

교착 상태

서로의 프로세서들이 자원을 가지고 있는 상태에서 다른 자원 요구

 

=복습..

 

프로세스 실행 중인 프로그램

하나 이상의 스레드를 가지고 있음

프로세스는 코드 영역, 데이터 영역, 힙영역, 스택 영역이 있음

코드, 데이터, 힙은 모든 스레드 들에서 공유 하고 있고

스택 영역은 각각ㅇㅣ 스레드 들이 각각 가지고 있는 것

코드 영역 : 코딩 된 것 들, 코드

데이터 영역 : 전역 변수, 정적 변수

힙 영역: 동적 변수

스택 영역 : 지역 변수가 들어가게 됨. 인자 들이 잠시 머무는 곳

 

사용자 수준의 스레드와 커널 수준의 스레드가 있음

커널 수준의 스레드는 커널에서 운영. 만들기는 쉬운데 사용자 수준보다 느리다.

 

프로세스 상태 전이도

준비 상태 -> 실행 상태 (cpu가 프로세스 처리)

Dispatch

Time runout

*PCB가 있어서 프로세스의 현태 상태를 가지고 문맥 교환이 가능(Dispatch, time runout이 가능한 이유)

실행 상태에 있다가 i/o 등에 걸리면 대기 상태로 있다가 준비 상태로 이동됨
(
대기 -> 준비 : wake up 이라고 함)

 

프로세스 스케쥴링

1)    선점형 : 강력한 제어권이 있음

종류: Round Robin(시간을 할당하여 돌려가면서 수행), SRT(실행시간이 빠른걸 먼저), MLQ(큐들을 두고 어떤 프로세스가 어떤 큐를 할당할 것인지, ), MLFQ(MULTI LEVEL FEEDBACK )

2)    비선점형: 프로세스가 프로세서를 할당할받을 때 프로세서를 강제로 뺏을 수 없음

종류: FCFS(First Come First Service), SJF(Shortest Job First), HRN(대기시간에 힘을 준 것 (대기시간+실행시간)/실행시간), 우선순위, 기한부(시간을 주고 해당 시간 내에 진행하도록 하는 것)

 

3)    기아 현상 : 프로세스가 프로세서를 할당 받지 못하는 것 (SRT, MLQ, SJF, 우선순위가 해당)

4)    에이징 기법: MLFQ,HRN이 기아현상을 해결하기 위해 에이징 기법을 도입한 기법임.