-
운영체제 2주차 3CS/운영체제와 시스템 2021. 7. 29. 15:42
스레드 동기화 문제
여러 스레드가 동일 자원(전역 변수등)을 동시에 수정할때 컨텍스트 스위칭등으로 인해 값이 제대로 변하지 않는등의 문제가 일어남
ex)스레드 1에서 변수 a 에 1을 더하려 할때, 더하기 직전 스레드 2로 바뀌고 스레드 2는 a에 1을 더함. 그리고 다시 스레드 1로 바뀌어도 레지스터는 값이 1이고 이를 a에 복사하므로 a의 값은 2가 아닌 1이됨
Mutual exclusion(상호 배제)
여러 스레드가 변경하는 공유 변수에 대해, 한 스레드가 갱신하는동안 다른 스레드가 접근하지 못하게 막는것
예시
lock.acquire()
for i in range(100000):
g_count += 1
lock.release() 에서 lock 함수가 임계 영역(critical section)을 생성하여, 임계 영역안의 임계 자원(critical resource)을 한번에 한 스레드만 수정할 수 있게 한다
locking 메커니즘 : mutex와 semaphore
mutex(binary semaphore) : 임계 영역에 하나의 스레드만 들어갈 수 있음
semaphore : 임계 영역의 여러 스레드가 접근 가능하나, counter를 두어서 접근 가능한 스레드 수를 제어 -> 성능 효율성 증대
세마포어 용어
s: 세마포어 값(초기 값 만큼 프로세스들이 동시에 임계 구역 접근
p: (lock.acquire) 검사(임계 구역에 들어갈 때), s값이 1 이상이면 스레드가 진입후 s값 1 차감. 0이면 대기
v: (lock.release) 증가(임계 영역에서 나올 때) s값에 1을 더하고 임계 영역에서 나옴
예제(슈도 코드 = pseudo, 단순한 로직을 설명하기 위한 언어)
P(S): wait(S) {
while S <=0 대기(무한 루프) // 프로그램을 멈추게 할 수는 없으므로, 반복문을 계속 수행하는 것임 = (busy wating)
;
S--; 프로세스 허용수 -1}
V(S): signal(S){ S++; 프로세스 허용수 +1}
대기큐 기술
운영체제 기술을 통해, S가 음수일경우 대기큐에 넣어서 CPU 낭비를 막는다
wait(S) {
S->count--;
if (S->count <0) {
add this process to S->queue;
block()
}
}
대기큐에서 재실행
signal(S) {
S->count++;
if (S->count <=0) {
remove a process P from s->queue;
wakeup(P) // 프로세스 재실행
}
}
POSIX 세마포어 함수
sem_open(): 세마포어 생성
sem_wait(): 임계 영역 접근 전, 세마포어를 잠그고, 잠겨있다면 풀릴 때 까지 대기
sem_post(): 세마포어 해제
스레드 deadlock 과 starvation
deadlock(교착상태) : 무한 대기 상태, 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있어서, 다음단계로 진입하지 못하는 상태(배치 처리 시스템에서는 일어나지 않음, 프로세스, 스레드 둘다 발생 가능)
deadlock 조건 : 다음의 4가지 조건이 모두 성립될때 교착상태 발생 가능성이 있다
1.상호 배제(mutual exclusion): 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권 요구
2.점유 대기(hold and wait): 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림
3.비선점(no preemtion): 프로세스가 어떤 자원의 사용을 끝낼 때 까지 그 자원을 가져갈 수 없음
3.순환대기(circular wait): 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 소유
deadlock 회피 : 조건 1,2,3은 놔두고 4번만 제거 ->1,2,3 제거시 비효율성 증가
조건 회피 방법 : 임계 영역 제거, 한번에 모든 필요 자원 점유 및 해제, 선점 가능 기법 만들기, 자원 유형에 따라 순서를 매기기
교착상태 발견과 회복
발견(deadlock detection) : 교착상태가 발생했는지 확인하는것
회복(recovery): 교착상태 해결
starvation(기아상태) : 특정 프로세스의 우선순위가 낮아서 필요한 자원을 계속 할당, 접근 받지 못하는 상태
기아상태 해결 방안 : 우선순위 변경
1.프로세스 우선순위를 수시로 변경
2.오래 기다린 프로세스의 우선순위 높이기
3.우선순위 대산 요청 순서대로 처리하는 FIFO 기반 요청큐 사용
교착 vs 기아 : 교착상태는 여러 프로세스가 동일 자원 점유 요청할 때 발생, 기아상태는 여러 프로세스가 특정 자원을 점유하려 할때, 우선순위가 낮은 프로세스는 자원 할당이 안되는 경우
'CS > 운영체제와 시스템' 카테고리의 다른 글
운영체제 2주차 5 (0) 2021.08.04 운영체제 2주차 4 (0) 2021.07.29 운영체제 2주차 2 (0) 2021.07.28 운영체제 2주차 1 (0) 2021.07.27 운영체제 1주차 5 (0) 2021.07.26