운영체제

limlim·2023년 5월 27일
0

GDSC YONSEI

목록 보기
3/3

동기화 Synchronization

프로세스나 쓰레드가 수행되는 순서를 조절.
쓰레드간의 shared data를 문제 없이 사용하기 위해서!
두 쓰레드가 동시에 같은 shard data에 진입하고 운나쁘게 interupt가 걸리는 경우를 생각해 볼
수 있음 → 의도하지 않은 결과를 낼 수 있음

임계구역

동기화 문제가 발생하지 않도록 독점을 허용해야하는 영역(한 쓰레드나 프로세스만 사용)
교착상태 Dead Lock & 라이브락
둘 이상의 프로세스가 각자 다른 공유자원을 점유하고 다른 프로세스의 공유자원을 요청하며 무한
정 대기하는 상태
1. Mutual Exclusion 2. Hold and Wait 3. Non-preemption 4. Circular Wait 이 4가지 조건을 모두
만족했을 때 발생함

Live Lock

여러 스레드 또는 프로세스가 동시에 실행되며 락 해제와 획득을 반복적으로 하며 정상적으로 작
동하는것처럼 보이지만 공유자원을 원하는대로 사용하지못하고 무한히 동작중인 상태

atomic

인터럽트가 발생할 수 없는 하나의 유닛(더이상 쪼갤 수 x)
[운영체제 Atomic방법]test_and_set, Compare_and_Swap, Bounded-waiting
운영체제 목차 자ㅏ아ㅏ아 운영체제의 lock문제를 해결하기 위한 방법으로 3가지가 있다고
저번에 설명을 했었어요 1. 소프트웨어적 방법 2. 더 이상 쪼개지지 않는 원자적 명령어로 구
현하는 방법 (즉 하드웨어 명령어 이용하는 것) 3. 인터럽트 제어로 해결하는 방법 이렇게 세
https://jhnyang.tistory.com/entry/운영체제-Atomic방법testandset-CompareandSw
ap-Bounded-waiting
하드웨어명령어 → lock의 문제 해결
test_and_set (lock과 같은 역할)
compare_and_swap((&lock, 0, 1) ≠ 0) (lock과 같은 역할, 3개의 매개변수)
1, 2번째 매개변수가 같을 때 (lock == 0) lock을 1로 설정하고 return 0
lock이 걸려있으면 (lock == 1) return 1

피터슨 알고리즘

두 프로세스 중 무엇이 먼저 실행될지를 결정하는 알고리즘 (어떤 프로세스가 임계구역에 진입할지를 결정, 소프트웨어적 해결 방식)
1. 상호배제가 보존되어야 하며 2.임계영역에 다른 스레드의 접근이 없을 때 바로 사용할 수 있어야
하고 3. 특정 프로세스가 무한정 대기해서는 안됨.
→ 해당조건을 만족하기 위한 피터슨 알고리즘 고안 (keyword: flag=[false, false], turn = 0)
P0 P1
flag[0] = True turn = 1 while flag[0] and trun ==
1: pass 임계구역 접근 flag[0] = False
flag[1] = True turn = 0 while flag[1] and turn
== 1: pass 임계구역 접근 flag[1] =
False

세마포어와 뮤텍스

세마포어: 여러 프로세스 or 쓰레드가 접근하는 것을 막아줌 (동기화 대상 ≥1)
공유자원의 개수를 나타내는 변수 → 접근해 사용할 때 -1, 0이되면 접근할 수 없음 (공유자원
이 없으므로)
wait() (P)와 signal() (V)을 통해 공유자원을 사용하고 반납, 두 함수는 atomic이어야 함
뮤텍스: 하나의 프로세스 or 쓰레드가 접근하는 것을 막아줌 (동기화 대상 = 1)
뮤텍스와 달리 세마포어는 공유자원을 소유할 수 없어서 다른 쓰레드가 공유자원할당해제할 문제
가 생길수도 있음

모니터

공유데이터를 캡슐화하고 해당 모듈을 동기화함
하나의 모니터에는 하나의 프로세스만
2개의 queue를 사용하여 공유자원에 접근하도록 하는 키의 할당과 해제를 관리함

producer_consumer_problem

producer: 데이터를 생성하여 버퍼에 저장
consumer: 버퍼 데이터를 꺼내 사용
이때 버퍼와 버퍼 안의 데이터 개수 count는 임계영역으로 간주해야 함

Readers_Writes_Problem

reader: 데이터를 읽기만 하는 프로세스
writer: 데이터를 읽고 수정도 하는 프로세스
reader는 데이터를 변경하지 않으므로 굳이 공유자원에 한 프로세스만 접근 가능하도록 설정할
필요가 없음

Dining_phiplosophers_problem

deadlock을 설명하는 예제
💡 think unless the left fork is available. when it is, pick it up;think unless the right fork
is available. when it is, pick it up. when both forks are held, eat for a fixed amount of
time. put the left fork down;put the right fork down. repeat from the beginning.
모든 철학자가 동시에 왼쪽 포크를 들었을 경우 deadlock(굶음)

profile
소개가 세상에서 제일 어려운 사람

0개의 댓글