– CPU 인터럽트
– CPU는 하던 일을 중단 한후, 서비스루틴의 실행지점으로 시작주소를 옮긴다. 실행을 완료한 후, 인터럽트된 일을 재개한다.
– ex : 나는 6시간에 한번씩 안약을 넣는다 (하던일 도중 안약을 넣음)
– 프로세스 관리
– 스케쥴링 기법
– Cache : 정보는 보통 RAM에 저장된다.
– 정보가 사용됨에 따라, 일시적으로 캐시에 복사됨.
– 캐시에 정보가 없다 -> 램에서 정보를 가져오므로 느려진다.
– PCB (Process Control Block)
– 각 프로세스는 PCB에 의해 표현될수있다.
– 스케쥴러
– 기본적으로 프로세스들은 Queue로 진입함.
– 이 프로세스 큐안의 프로세스를 효율적으로 선택하는 것이 스케쥴러.
– Context Switch
– CPU가 다른 프로세스로 작업을 전환하는 것
– 이를 위해, 현재 프로세스의 상태를 PCB에 저장하고 다른 작업의 프로세스 상태를 Restore 한다.
– ex) c코딩 중 opencl의 gpu 처리 이동
– Context switch 동안, 시스템은 아무일도 할 수없다. (overhead)
– 다중 프로세싱
– 작업을 여러 프로세스로 처리.
– 프로세스를 요청할때마다 프로세스를 만드므로, 메모리 및 시간의 소모가 크다.
– 다중 쓰레딩
– 같은 메모리 내에서 요청한 작업만 수행하는 스레드를 만들고 실행한다.
– 요청이 많을수록 병렬성이 높아진다.
– 쓰레드 풀
– 일정량의 Thread를 만들어 놓고 돌림.
– Dispatcher : CPU스케쥴링에 포함되어있다.
– Context switch
– User mode 변환
– 프로그램 재시작을 위해 적절한 위치로 주소 점프
– Dispatch Latency
– 하나의 프로세스를 중단시키고 다른 프로세스를 실행하기 까지 걸리는 시간
– CPU 스케쥴링의 종류
– FCFS(First come, First served)
– 가장 기본
– SJF (Shortest job first)
– 최소의 평균 대기시간 : 최적
– 그러나, CPU Burst 시간 측정이 어렵다.
– 장기 스케쥴링은 가능은 하나, 단기 스케쥴링은 측정방법이 없다.
– Priority Scheduling
– 우선시간 > Burst시간 기준
– 우선시간(priority)를 가장 첫번째 고려항목으로 선정.
– 다양한 요인에 의해 계산한다.
– 선점 / 비선점 가능
– indefinite blocking : 가장 큰 문제
– 실행준비는 되어있지만, CPU를 사용못한다.
– 해결법 : Aging -> 우선순위를 조금씩 올린다.
– RR (Round Robin)
– 시분할을 위해 설계됨. 프로세스 사이를 자유로이 이동할 수 있다.
– 할당받은 시간만큼 프로세스를 진행한다.
– 할당받은 시간이 클수록 FCFS에 가까워짐.
– 잦은 Contexst Switch로 인해 성능감소가 우려된다.
– Critical Section
– 쓰레드들에 의해 간섭이 일어날 소지가 있는 영역(코드)
– 이 구간은 하나의 Thread만 사용한다. (다른 쓰레드 접근 불가 -> Locking 기법 활용)
– 상호배제를 알아보자.
– 해결책
1) Semaphore
– 임계영역에 대한 최대 허용치 설정
– 허용치 만큼 쓰레드가 접근할 수 있다. ( 접근시마다 카운트를 뺀다)
2) Mutex
– 한번에 하나의 쓰레드만 실행
– 첫번째 쓰레드가 끝날때까지 대기한다.
– Deadlock
– 두개이상의 작업이 서로 상대방의 작업이 끝날때까지 기다리느라, 아무것도 하지 못하는 상태
– ex : 세마포어 예제 및 식사하는 철학자 문제
– Deadlock 조건
1) 상호배제 : 한자원은 하나의 프로세스만 선점
– 다른 프로세스는 끝날때까지 대기
2) 점유와 대기 : 프로세스가 할당된 자원을 가진상태에서 다른 자원을 갖기위해 대기
3) 비선점 : 프로세스가 어떤 자원의 사용을 마칠때까지 그 자원을 뺏을 수 없다.
– 이미 할당된 자원은 선점하지 않아야한다.
4) 순환대기 : 순환적으로 자원을 대기
– 각 프로세스는 다음 프로세스의 자원을 대기한다
– Deadlock 예방
1) 상호배제 제거
– 공유 불가능한 자원을 사용해서 발생한 것이다. 제거하거나 공유자원을 사용한다(읽기전용파일)
2) 점유와 대기 제거
– 프로세스가 자원 요청시, 다른 자원을 갖고 있지 않아야 한다.
– ex : DVD->하드->프린트
1 : 전체에 대한 자원 요청. 프린트는 마지막에서 필요하지만 전체 실행시간동안 프린트 점유함.
– 단점 : 많은 자원이 할당 된후, 오랫동안 사용을 안하므로 자원 이용률이 떨어진다.
2 : 순서대로 자원점유
– DVD하고 방출-> 하드 파일하고 방출..
– 단점 : 중간의 단계가 다른 프로세스에게 할당 가능. 다른 프로세스가 끝날때까지 무한 대기상태가 가능하다.
3) 비선점 제거
– 비선점 프로세스에 선점가능한 프로토콜을 생성한다.
– 한 프로세스가 자원요청 -> 가능한가? -> 할당
-> 불가능한가? -> 타 프로세스에 할당이 가능한가? -> 뺏어온다(선점)
4) 순환대기 제거
– 순서를 부여한다. 자원유형에 따라 순서를 메긴다.
– Deadlock 무시
– 데드락 에방 및 회피기법 사용시, 성능에 영향을 미친다.
– 데드락 확률이 작으면 그냥 내버려둔다.